jieba分词
jieba分词是python写成的一个算是工业界的分词开源库,其github地址为:https://github.com/fxsjy/jieba,在Python里的安装方式: pip install jieba
简单示例:
1 | import jieba as jb |
执行结果:
1 | 全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学 |
jieba分词的基本思路
jieba分词对已收录词和未收录词都有相应的算法进行处理,其处理的思路很简单,主要的处理思路如下:
- 加载词典dict.txt
- 从内存的词典中构建该句子的DAG(有向无环图)
- 对于词典中未收录词,使用HMM模型的viterbi算法尝试分词处理
- 已收录词和未收录词全部分词完毕后,使用dp寻找DAG的最大概率路径 输出分词结果
案例:
1 | #!/usr/bin/env python |
执行结果:
1 | Building prefix dict from the default dictionary ... |
流程介绍
首先,我们从网上抓取政府工作报告的全文。我将这个步骤封装在一个名叫extract_text的简单函数中,接受url作为参数。因为目标页面中报告的文本在所有的p元素中,所以我们只需要通过BeautifulSoup选中全部的p元素即可,最后返回一个包含了报告正文的字符串。
然后,我们就可以利用jieba进行分词了。这里,我们要选择全模式分词。jieba的全模式分词,即把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。之所以这么做,是因为默认的精确模式下,返回的词频数据不准确。
分词时,还要注意去除标点符号,由于标点符号的长度都是1,所以我们添加一个len(word) >= 2的条件即可。
最后,我们就可以利用Counter类,将分词后的列表快速地转化为字典,其中的键值就是键的出现次数,也就是这个词在全文中出现的次数。