小资料工程师乐园

从零开始学自然语言处理(一)—— jieba 分词

2019-11-28  本文已影响0人  数据科学杂谈

作者:Allen
欢迎关注我们的公众号:数据科学杂谈

今天,我们正式开始《从零开始学自然语言处理》系列文章的更新。内容会涉及自然语言处理的各个方面知识内容和具体操作:包括但不仅限于词法分析,句法分析,语义分析,文本聚类,文本分类,情感分析,文本摘要生成,主题模型,词嵌入,文本语义相似度,自然语言推理,机器翻译,语言模型,信息抽取,关系预测,对话,指代消解等等。 从最基础的内容开始讲起,欢迎持续关注学习。
(温馨提示:文章中代码部分左右滑动可查看全部)针对中文的自然语言处理,我们需要先将段落和句子切分为词语,这是最基础的一步操作,分词属于词法分析的基础部分。本文聊聊 jieba 这个工具包。jieba 是一款优秀的中文分词工具。如何安装 jieba 呢?我们可以通过 Python 的 pip 直接安装:

pip install jieba

jieba 采用的算法为:

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 的文件

image 然后将 “一网搜索” 加入自定义词典,后面的 5 表示词的词频(词频越高,对该词分词的准确度和优先级越高),然后保存。 image

用法: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快速安装库的靠谱办法
欢迎关注我们的公众号:数据科学杂谈 ,每天分享原创干货文章!

上一篇 下一篇

猜你喜欢

热点阅读