结巴分词模块的简单应用

  • 张华平NShort中文分词算法是目前大规模中文分词的主流算法,下面将介绍以其为核心的结巴分词算法。该模块在Python中使用机及其简单。不需要及其繁琐的安装步骤。
  • 结巴分词支持如下三种模式
  • (1)精确模式,试图将句子最精确地切开,适合文本分析
  • (2)全模式,把句子中所以可以成词的词语都扫描出来,速度非常快,但是不能解决歧义
  • (3)搜索引擎模式,在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词
    如果直接导入模块,则会报错,需要我们自行安装,但是不要担心,安装也是及其简单的
import jieba
---------------------------------------------------------------------------

ModuleNotFoundError                       Traceback (most recent call last)

<ipython-input-1-71874e60dc26> in <module>
----> 1 import jieba


ModuleNotFoundError: No module named 'jieba'

博主使用的是anaconda中的jupyter notebook安装的,只需敲如下的代码即可安装成功。

pip install jieba
Collecting jieba
  Downloading https://files.pythonhosted.org/packages/71/46/c6f9179f73b818d5827202ad1c4a94e371a29473b7f043b736b4dab6b8cd/jieba-0.39.zip (7.3MB)
Building wheels for collected packages: jieba
  Building wheel for jieba (setup.py): started
  Building wheel for jieba (setup.py): finished with status 'done'
  Created wheel for jieba: filename=jieba-0.39-cp37-none-any.whl size=7282597 sha256=93db33aa45db1fd54d335e28ab39193390e8ab26cc1606dd7c75990b4f49e7b4
  Stored in directory: C:\Users\my computer\AppData\Local\pip\Cache\wheels\c9\c7\63\a9ec0322ccc7c365fd51e475942a82395807186e94f0522243
Successfully built jieba
Installing collected packages: jieba
Successfully installed jieba-0.39
Note: you may need to restart the kernel to use updated packages.

安装成功后即可直接导入该模块进行使用

import jieba
import sys
import os

Python3和Python2不一样,需要我们从imp中导入reload才可以用,不然会报错

from imp import reload
reload(sys)
<module 'sys' (built-in)>

下面是引用郑捷的自然语言处理的原理与实践的例子

#全模式
sent="在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树。"
wordlist=jieba.cut(sent,cut_all=True)
print (' | '.join(wordlist))#要加括号
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\MYCOMP~1\AppData\Local\Temp\jieba.cache
Loading model cost 1.089 seconds.
Prefix dict has been built succesfully.


在 | 包含 | 问题 | 的 | 所有 | 解 | 的 | 解空 | 空间 | 树 | 中 |  |  | 按照 | 深度 | 优先 | 搜索 | 的 | 策略 |  |  | 从 | 根 | 节点 | 点出 | 出发 | 深度 | 探索 | 索解 | 解空 | 空间 | 树 |  |
#精确切分
wordlist=jieba.cut(sent,cut_all=False)
print (' | '.join(wordlist))#要加括号
在 | 包含 | 问题 | 的 | 所有 | 解 | 的 | 解 | 空间 | 树中 | , | 按照 | 深度 | 优先 | 搜索 | 的 | 策略 | , | 从根 | 节点 | 出发 | 深度 | 探索 | 解 | 空间 | 树 | 。
#搜索引擎模式
wordlist=jieba.cut_for_search(sent)
print (' | '.join(wordlist))#要加括号
在 | 包含 | 问题 | 的 | 所有 | 解 | 的 | 解 | 空间 | 树中 | , | 按照 | 深度 | 优先 | 搜索 | 的 | 策略 | , | 从根 | 节点 | 出发 | 深度 | 探索 | 解 | 空间 | 树 | 。

#根据以上的结果可以看出,一些专有名词的切分缺乏足够的精度,不仅出现的粒度问题,还出现错分的问题

#用户自定义词典:
每一行分为3部分,词语,词频(默认为5,数值越大,字符串成词的概率越高,收到内置词典的干扰就越小),词性。用空格隔开

jieba.load_userdict('userdict.txt')
sent="在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树。"
wordlist=jieba.cut(sent)
print (' | '.join(wordlist))
在 | 包含 | 问题 | 的 | 所有 | 解 | 的 | 解空间 | 树中 | , | 按照 | 深度优先 | 搜索 | 的 | 策略 | , | 从 | 根节点 | 出发 | 深度 | 探索 | 解空间 | 树 | 。

词性标注:判断出一个句子中每个词所扮演的语法角色,如名词,动词。但是在汉语中,很多词语的词性不是唯一的,特别是一些常用词。因此,中文词性标精度的影响因素是正确判断文本中那些常用词的词性。算法有:HMM(隐马尔科夫模型),最大熵算法,CRF算法