分词是中文天然语言处理的基础。目前经常使用的分词算法有html
1.张华平博士的NShort中文分词算法。算法
2.基于条件随机场(CRF)的中文分词算法。函数
这两种算法的表明工具包分别是jieba分词系统和哈工大的LTP语言技术平台。下面就分别演示这两个工具的使用方法。工具
jieba包有两个分词函数,cut
和cut_for_search
,后者主要为搜索引擎设计,粒度更细。jieba.cut(sentence,cut_all=False,HMM=True)
方法接受三个输入参数: 须要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型。测试
pyltp包的分词模块只有一个分词函数,Segmentor.segment(line)只有一个参数:须要分词的字符串。搜索引擎
#coding:utf-8 import jieba from pyltp import Segmentor text='奎金斯距离祭台很近,加拉塔“掉落”的部分事物就在他的面前,他下意识就捡起了其中一块金属碎屑般的事物和小片黑色固体。' segs1=jieba.cut(text) print('|'.join(segs1)) segs1=jieba.cut_for_search(text) print('|'.join(segs1)) segmentor=Segmentor() #实例化分词模块 segmentor.load("D:\\ltp_data\\cws.model") segs2=segmentor.segment(text) print('|'.join(segs2)) segmentor.release() #释放模型
分词的结果以下:编码
奎金斯|距离|祭台|很近|,|加|拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。
奎金斯|距离|祭台|很近|,|加|拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|意识|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。
奎金斯|距离|祭台|很|近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下|意识|就|捡|起|了|其中|一|块|金属|碎屑|般|的|事物|和|小|片|黑色|固体|。设计
能够看到,默认的分词方法仍是有一些瑕疵,jieba分词结果里,“加拉塔”被分割成了两部分,pyltp的结果里,“般的”被分割成了两部分。为了更好地分词,两个工具包都提供了调整词典、添加词典的功能。code
jieba里调整词典的函数是jieba.add_word(word,freq=None,tag=None),它接受三个参数:新词,词频,词性。jieba还能够添加自定义词典,jieba.load_userdict(f),f是一个txt文档,要求是utf-8编码。词典格式为一个词占一行,每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。htm
pyltp在加载模型的同时,可加载自定义词典。Segmentor. load_with_lexicon(model_path,user_dict)第一个参数自带的模型文件,第二个参数是自定义词典。词典格式为一个词为一行,第一列是词,第二列到第n列是该词的候选词性。
本次分词,jieba、pyltp的自定义词典都是只有词,其余省略。词典内容以下:
下意识
加拉塔
调整词典后的分词代码以下:
#coding:utf-8 import jieba from pyltp import Segmentor from pyltp import CustomizedSegmentor text='奎金斯距离祭台很近,加拉塔“掉落”的部分事物就在他的面前,他下意识就捡起了其中一块金属碎屑般的事物和小片黑色固体。' jieba.add_word('奎金斯') jieba.add_word('加拉塔') segs1=jieba.cut(text) print('|'.join(segs1)) jieba.load_userdict('userdict_jieba.txt') segs1=jieba.cut(text) print('|'.join(segs1)) segmentor=Segmentor() cws_model="D:\\ltp_data\\cws.model" user_dict="userdict_ltp.txt" segmentor.load_with_lexicon(cws_model,user_dict) segs2=segmentor.segment(text) print('|'.join(segs2)) segmentor.release()
分词结果:
奎金斯|距离|祭台|很近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。
奎金斯|距离|祭台|很近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。
[INFO] 2018-04-21 17:49:06 loaded 2 lexicon e
奎金斯|距离|祭台|很|近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡|起|了|其中|一|块|金属|碎屑|般|的|事物|和|小|片|黑色|固体|。
除了添加自定义词典,pyltp还能够个性化分词。个性化分词为了解决测试数据切换到如小说、财经等不一样于新闻领域的领域。 在切换到新领域时,用户只须要标注少许数据。 个性化分词会在原有新闻数据基础之上进行增量训练。 从而达到即利用新闻领域的丰富数据,又兼顾目标领域特殊性的目的。
pyltp 支持使用用户训练好的个性化模型。关于个性化模型的训练需使用 LTP,详细介绍和训练方法请参考http://ltp.readthedocs.org/zh_CN/latest/theory.html#customized-cws-reference-label。