常用中文分词工具安装和使用
Posted 信号分析与机器智能
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用中文分词工具安装和使用相关的知识,希望对你有一定的参考价值。
得益于深度学习与人工神经网络的发展,语音识别在2016年取得了一系列突破性的进展,在产品应用上也越来越成熟。作为语音交互领域中极其重要的一环,语音识别一直是科技巨头研究的重点。作为语音识别技术成功的关键是基于声纹和语言两大模型。对于语言模型,一般选用基于统计的语言模型,即n-gram。在中文语言模型构建过程中,一般先进性分词操作,无数研究学者已经证明,先分词,后做统计,对后期构建系统识别性能提高很多。
分词对于研究和应用中文自然语言处理的童鞋来说,都是一个非常非常基础的部件,分词的质量直接影响到后续词性标注、命名实体识别、句法分析等部件的准确性。作为一个基础部件,学术界对分词的研究已经非常久了,市面上流行的几大开源分词工具也被工业界的各大公司应用很多年了。最近,中文分词随着一篇博文的发表被推到了风口浪尖,引发众多大牛在微博、微信群里的激烈讨论。本文并不想对这篇博文进行过多评论,只是想对各大分词工具介绍,方便后来者根据自己的需求选择合适的工具。
本文选择了4个常见的分词工具,分别是:哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba
1.清华大学THULAC
1.1python版下载路径:
https://github.com/thunlp/THULAC-Python
1.2参考文档:
http://thulac.thunlp.org/
1.3分词模型:
http://thulac.thunlp.org/register
1.4特点
1.4.1 能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。
1.4.2 准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
1.4.3 速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。
1.5使用方法:
#/bin/usr/python
#coding:utf-8
import thulac
a = thu1.cut("修改为待分词语句")
print(a)
黑体部分为需用户修改的地方。
2.jieba
2.1python版下载路径:
https://github.com/fxsjy/jieba
2.2参考文档:
http://www.tuicool.com/articles/QV36ru
2.3特点
2.3.1支持三种分词模式:
a) 精确模式,试图将句子最精确地切开,适合文本分析;
b)全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但不能解决歧义;
c)搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索 引擎分词。
2.3.2支持繁体分词
2.3.3支持自定义词典
2.3.4MIT 授权协议
2.4 算法实现
2.4.1 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
2.4.2 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
2.4.3 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
2.5 使用方法
* `jieba.cut` 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
* `jieba.cut_for_search` 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
* 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
* `jieba.cut` 以及 `jieba.cut_for_search` 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
* `jieba.lcut` 以及 `jieba.lcut_for_search` 直接返回 list
* `jieba.Tokenizer(dictionary=DEFAULT_DICT)` 新建自定义分词器,可用于同时使用不同词典。`jieba.dt` 为默认分词器,所有全局分词相关函数都是该分词器的映射。
代码示例
```python
# encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
```
输出:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
3.哈工大LTP
3.1 python版下载路径:
https://github.com/HIT-SCIR/pyltp
3.2 参考文档
http://ltp.readthedocs.io/zh_CN/latest/
http://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2F
3.4特点:
除了分词之外,pyltp 还提供词性标注、命名实体识别、依存句法分析、语义角色标注等功能。
3.5 使用方法
```python
# -*- coding: utf-8 -*-
from pyltp import Segmentor
segmentor = Segmentor()
segmentor.load("模型路径")
words = segmentor.segment("待分词语句")
print "|".join(words)
segmentor.release()
```
黑体部分为用户修改的部分。
4.中科院计算所NLPIR
4.1 python版下载路径:
http://ictclas.nlpir.org/downloads 下载最新版
4.2参考文档
http://ictclas.nlpir.org/documents
4.3 使用方法
4.3.1 将【Data】整个文件夹拷贝到【sample】--【pythonsample】下。
4.3.2 将【lib】文件夹里的各个型号的dll 拷贝到【pythonsample】 --【nlpir】里,替换原来的旧的dll,文件名字要对应更改,如拷过来的是win32下的NLPIR.dll,要对应的改成NLPIR32.dll 放到【pythonsample】 --【nlpir】里。
4.3.3 打开【pythonsample】里的nlpir.py :
a)将libFile = './nlpir/NLPIR64.dll' 这一句里的dll改成对应自己系统版本的dll,例如是32位的,就改成libFile= './nlpir/NLPIR32.dll'
b)第213行
if not Init('',ENCODING.UTF8_CODE,''):改为:
### if not Init('',ENCODING.UTF8_CODE,''): #use this line for python 2.x
if not Init(b'',ENCODING.UTF8_CODE,b''): #use this line for python 3.x; for python3, string parameters should be bytes type
以上是关于常用中文分词工具安装和使用的主要内容,如果未能解决你的问题,请参考以下文章