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