分词就是词语切分了,关于分词的理论实现,以后再继续学习。此处用python的jieba分词工具直接分词。
jieba分词库的安装
本人用的是python3.6,windows环境,直接在cmd命令窗口下输入:
pip install jieba
发现自动下载安装:jieba-0.38,这个版本对python2和python3都兼容。
jieba分词在python中使用
支持三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
分词算法
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
分词实现
jieba.cut
方法有三个输入参数:
- 分词的字符串
- cut_all 参数用来控制是否采用全模式
- HMM参数,是否使用HMM
jieba.cut_for_sesarch
方法接受两个参数 - 分词的字符串
- 是否使用HMM
代码实现,在python3环境下试了,没问题
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
上面的 "/ ",“, ” 斜杠空格,逗号空格,是分词以此来分来,结果如下
Paste_Image.png分词结果中,“杭州”一词没有在词典中,也被识别出来了
文档中的分词
文档中分词就是先读文档,然后再调用分词,最后再保存了
import jieba
def readFile(path):
with open(path,'r',errors='ignore') as file:
content = file.read()
return content
def saveFile(path,result,errors='ignore'):
with open(path,'w') as file:
file.write(result)
content = readFile("E:/test.txt")#调用上面函数读取文件的内容
result = (str(content)).replace("\r\n","").strip()#删除多余空行与空格
cutResult = jieba.cut(result)#默认方式分词,分词结果用空格隔开
saveFile("E:/result"," ".join(cutResult))#调用上面函数保存到文件
参考文献
- (一)中说明的书籍
- https://github.com/fxsjy/jieba
网友评论