分词工具,分词工具包
分词器是什么?
分词器,是将用户输入的一段文本,分析成符合逻辑的一种工具。到目前为止呢,分词器没有办法做到完全的符合人们的要求。和我们有关的分词器有英文的和中文的英文的分词器过程:输入文本-关键词切分-去停用词-形态还原-转为小写中文的分词器分为:单子分词 例:中国人 分成中,国,人二分法人词:例中国人:中国,国人词典分词:有基本的语意来进行分词的,例:中国人分成中国,国人,中国人,现在用的是极易分词和庖丁分词。停用词:不影响语意的词。网上有很多说分词器效果的,我在这里就不进行多说了
部分常用分词工具使用整理
以下分词工具均能在Python环境中直接调用(排名不分先后)。
1、jieba(结巴分词) 免费使用
2、HanLP(汉语言处理包) 免费使用
3、SnowNLP(中文的类库) 免费使用
4、FoolNLTK(中文处理工具包) 免费使用
5、Jiagu(甲骨NLP) 免费使用
6、pyltp(哈工大语言云) 商用需要付费
7、THULAC(清华中文词法分析工具包) 商用需要付费
8、NLPIR(汉语分词系统) 付费使用
1、jieba(结巴分词)
“结巴”中文分词:做最好的 Python 中文分词组件。
项目Github地址:jieba
安装 :
pip install jieba
使用 :
import jieba
jieba.initialize()
text = '化妆和服装'
words = jieba.cut(text)
words = list(words)
print(words)
2、HanLP(汉语言处理包)
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
项目Github地址:pyhanlp
安装:
pip install pyhanlp
使用 :
import pyhanlp
text = '化妆和服装'
words = []
for term in pyhanlp.HanLP.segment(text):
words.append(term.word)
print(words)
3、SnowNLP(中文的类库)
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。
项目Github地址:snownlp
安装:
pip install snownlp
使用:
import snownlp
text = '化妆和服装'
words = snownlp.SnowNLP(text).words
print(words)
4、FoolNLTK(中文处理工具包)
可能不是最快的开源中文分词,但很可能是最准的开源中文分词。
项目Github地址:FoolNLTK
安装:
pip install foolnltk
使用:
import fool
text = '化妆和服装'
words = fool.cut(text)
print(words)
5、Jiagu(甲骨NLP)
基于BiLSTM模型,使用大规模语料训练而成。将提供中文分词、词性标注、命名实体识别、关键词抽取、文本摘要、新词发现等常用自然语言处理功能。参考了各大工具优缺点制作,将Jiagu回馈给大家。
项目Github地址:jiagu
安装:
pip3 install jiagu
使用:
import jiagu
jiagu.init()
text = '化妆和服装'
words = jiagu.seg(text)
print(words)
6、pyltp(哈工大语言云)
pyltp 是 LTP 的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能。
项目Github地址:pyltp,3.4模型下载链接:网盘
安装:
pip install pyltp
使用:
import pyltp
segmentor = pyltp.Segmentor()
segmentor.load('model/ltp_data_v3.4.0/cws.model') # 模型放置的路径
text = '化妆和服装'
words = segmentor.segment(text)
words = list(words)
print(words)
7、THULAC(清华中文词法分析工具包)
THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与 社会 人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。
项目Github地址:THULAC-Python
安装:
pip install thulac
使用:
import thulac
thu = thulac.thulac(seg_only=True)
text = '化妆和服装'
words = thu.cut(text, text=True).split()
print(words)
NLPIR(汉语分词系统)
主要功能包括中文分词;英文分词;词性标注;命名实体识别;新词识别;关键词提取;支持用户专业词典与微博分析。NLPIR系统支持多种编码、多种操作系统、多种开发语言与平台。
项目Github地址:pynlpir
安装:
pip install pynlpir
下载证书覆盖到安装目录,NLPIR.user 例如安装目录:/usr/lib64/python3.4/site-packages/pynlpir/Data
使用 :
import pynlpir
pynlpir.open()
text = '化妆和服装'
words = pynlpir.segment(text, pos_tagging=False)
print(words)
pynlpir.close()
中文分词
中文分词主要有三种技术,分别为:
基于统计的分词模型其主要思想是把每个词看作是由词的最小单位的各个字组成的,如果相连的字在不同的文本中出现的次数越多,就证明这相连的字很可能就是一个词。
其一般分为两步:
语言模型中常用的为n元模型,所谓n元模型就是在估算条件概率时,忽略距离大于等于n的上文此的影响,其概率计算公式如下:
一般使用频率计数的比例来计算n元条件概率
当n越大时,模型包含的词序信息越丰富,同时计算量随之增大。与此同时,长度越长的文本序列出现的次数也会减少。同时为避免出现分母为零的情况,一般在n元模型中与要配合相应得平滑算法来解决这个问题,例如拉普拉斯平滑等
隐含马尔可夫模型是将分词作字在字串中得序列标注任务来实现的,其基本思路是:每个字在构造一个特定的词语时都占据着一个确定的构词位置。
用数学抽象表示如下: 用 代表输入的句子,n为句子长度, 代表输出的标签,理想输出为:
我么们假设每个字的输出仅仅与当前字有关,就可以得到:
通过贝叶斯公式我们可以把最大化 转化为最大化
针对 作马尔可夫假设,得到:
对 有:
作齐次马尔可夫假设的计算公式如下(这个公示表示,每个输出仅仅与上一个输出有关):
于是得到:
~
在HMM中,求解 的常用方法是Veterbi算法,这个算法的核心思想是: 如果最终的最优化路径经过某个 ,那么从初始节点到 点的路径必然也是一个最优路径。
最常用的就是先基于词典的方式进行分词,然后再用统计分词方法进行辅助。
jieba分词结合了基于规则和基于统计这两类方法。
jieba提供了三种分词模式:
除了可以进行分词外,还可以进行词性标注。
下面是各种分词工具比较:
图片 来自
还有 NLPIR汉语分词系统 ,主要功能包括中文分词;英文分词;词性标注;命名实体识别;新词识别;关键词提取;支持用户专业词典与微博分析。NLPIR系统支持多种编码、多种操作系统、多种开发语言与平台