作者:Allen
欢迎关注我们的公众号:数据科学杂谈
今天,我们正式开始《从零开始学自然语言处理》系列文章的更新。内容会涉及自然语言处理的各个方面知识内容和具体操作:包括但不仅限于词法分析,句法分析,语义分析,文本聚类,文本分类,情感分析,文本摘要生成,主题模型,词嵌入,文本语义相似度,自然语言推理,机器翻译,语言模型,信息抽取,关系预测,对话,指代消解等等。 从最基础的内容开始讲起,欢迎持续关注学习。
(温馨提示:文章中代码部分左右滑动可查看全部)针对中文的自然语言处理,我们需要先将段落和句子切分为词语,这是最基础的一步操作,分词属于词法分析的基础部分。本文聊聊 jieba 这个工具包。jieba 是一款优秀的中文分词工具。如何安装 jieba 呢?我们可以通过 Python 的 pip 直接安装:
pip install jieba
jieba 采用的算法为:
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
jieba 有三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
我们接下来开始具体操作首先我们使用全模式进行分词:
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
结果为:
image
使用精确模式(默认的也是精确模式,即去掉cut_all参数也是精确模式):
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
image
使用搜索引擎模式:
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
image
但是当我们遇到一些新词的时候,jieba 可能并不能正确分词,例如我们在对以下句子进行分词时:
seg_list = jieba.cut("新研发的产品名为一网搜索。", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
image
那如何解决这个问题呢?
我们只需要创建一个自定义词典文件,文件格式为 txt 词典格式和 dict.txt
一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name
若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。词频省略时使用自动计算的能保证分出该词的词频。例如,我在本地创建了一个名为 userdict.txt 的文件
用法:jieba.load_userdict(file_name)
file_name 为文件类对象或自定义词典的路径然后使用如下代码即可完成正确分词:
jieba.load_userdict(r'E:/jieba/userdict.txt')
seg_list = jieba.cut("新研发的产品名为一网搜索。", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
image
想对 jieba 分词有更深入的了解可以传送到 jieba 的 github:https://github.com/fxsjy/jieba对《从零开始学自然语言处理》系列文章有兴趣的话,欢迎持续关注学习。历史文章推荐阅读:Python快速安装库的靠谱办法
欢迎关注我们的公众号:数据科学杂谈 ,每天分享原创干货文章!
网友评论