分詞是中文天然語言處理的基礎。目前經常使用的分詞算法有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。