nlp中文分詞(jieba和pyltp)

分詞是中文天然語言處理的基礎。目前經常使用的分詞算法有html

1.張華平博士的NShort中文分詞算法。算法

2.基於條件隨機場(CRF)的中文分詞算法。函數

這兩種算法的表明工具包分別是jieba分詞系統和哈工大的LTP語言技術平臺。下面就分別演示這兩個工具的使用方法。工具

jieba包有兩個分詞函數,cutcut_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。

相關文章
相關標籤/搜索