工具篇
下面列了几个较为主流的分词工具(排名不分先后,大家自行试用),相关的paper请在订阅号「夕小瑶的卖萌屋」后台回复【中文分词】领取。
1 Jieba
说到分词工具第一个想到的肯定是家喻户晓的“结巴”中文分词,主要算法是前面讲到的基于统计的最短路径词图切分,近期还内置了百度飞桨的预训练模型+大规模蒸馏的前沿分词模型。
github项目地址:https://github.com/fxsjy/jieba
2 THULAC(THU Lexical Analyzer for Chinese)
由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。该工具所采用的分词模型为结构化感知机。更多算法细节请参考github项目和阅读论文原文。
github项目地址:https://github.com/thunlp/THULAC
论文链接:https://www.mitpressjournals.org/doi/pdf/10.1162/coli.2009.35.4.35403
使用示例:
#THULAC
#pip install thulac
import thulac
sentence = "不会讲课的程序员不是一名好的算法工程师"
thu1 = thulac.thulac(seg_only=True) #只分词
text = thu1.cut(sentence, text=True) #进行一句话分词
print("THULAC: " + text)
#output
#Model loaded succeed
#THULAC: 不 会 讲课 的 程序员 不 是 一 名 好 的 算法 工程师
3 NLPIR-ICTCLAS汉语分词系统
北京理工大学海量语言信息处理与云计算工程研究中心大数据搜索与挖掘实验室( Big Data Search and Mining Lab.BDSM@BIT)发布。是基于层次HMM的分词库,将分词、POS、NER等都纳入到了一个层次HMM的框架之下联合训练得到。
主页:http://ictclas.nlpir.org/github
项目地址:https://github.com/tsroten/pynlpir
使用示例:
#NLPIR-ICTCLAS
#pip install pynlpir
import pynlpir
sentence = "不会讲课的程序员不是一名好的算法工程师"
pynlpir.open()
tokens = [x[0] for x in pynlpir.segment(sentence)]
print("NLPIR-TCTCLAS: " + " ".join(tokens))
pynlpir.close()
#output
#NLPIR-TCTCLAS: 不 会 讲课 的 程序员 不 是 一 名 好 的 算法 工程
4 LTP
哈工大出品,同THULAC一样,LTP也是基于结构化感知器(Structured Perceptron, SP),以最大熵准则学习的分词模型。
项目主页:https://www.ltp-cloud.com/github
项目地址:https://github.com/HIT-SCIR/ltp
论文链接:http://jcip.cipsc.org.cn/CN/abstract/abstract1579.shtml
使用示例:使用前需下载分词模型(http://ltp.ai/download.html)
5 HanLP
HanLP是随《自然语言处理入门》配套开源的一系列NLP算法库。除了经典的1.x版本在不断迭代更新以外,今年还全新推出了2.0版本。1.x版本有有基于词典的分词工具和基于CRF的切词模型。2.0版本开源了基于深度学习算法的分词工具。
1.x版本
github项目地址:https://github.com/hankcs/pyhanlp
2.0版本
github地址:https://github.com/hankcs/HanLP/tree/doc-zh
使用示例:要求Python 3.6以上使用
#HanLP
#v2.0
#pip install hanlp
import hanlp
sentence = "不会讲课的程序员不是一名好的算法工程师"
tokenizer = hanlp.load('PKU_NAME_MERGED_SIX_MONTHS_CONVSEG')
tokens = tokenizer(sentence)
print("hanlp 2.0: " + " ".join(tokens))
#output
#hanlp 2.0: 不 会 讲课 的 程序员 不 是 一 名 好 的 算法 工程
6 Stanford CoreNLP
斯坦福推出的切词工具,可以支持多种语言。算法核心是基于CRF模型。
github项目地址:https://github.com/Lynten/stanford-corenlp
论文链接:https://nlp.stanford.edu/pubs/sighan2005.pdf
使用示例:需要先从stanford官网下载中文切词模型(https://stanfordnlp.github.io/CoreNLP/)
###stanford CoreNLP
#pip install stanfordcorenlp
from stanfordcorenlp import StanfordCoreNLP
sentence = "不会讲课的程序员不是一名好的算法工程师"
with StanfordCoreNLP(r'stanford-chinese-corenlp-2018-10-05-models', lang='zh') as nlp:
print("stanford: " + " ".join(nlp.word_tokenize(sentence)))