LTP與THULAC分詞使用者字典使用技巧

2021-09-19 07:47:28 字數 1618 閱讀 6909

最近做關係抽取時需要用到分詞工具。

嘗試對下面一句話進行分詞:

南韓瑜此前就曾邀鴻海來高雄投資。
分詞後:

南韓 瑜 此前 就 曾 邀鴻 海 來 高雄 投資 。
分詞存在將(南韓瑜)分詞為(南韓 瑜)的情況,而我希望的是不希望把「南韓瑜」三個字分開。

此時可以借助 thulac 的字典功能。

sent = "南韓瑜此前就曾邀鴻海來高雄投資。"

segment = thulac.thulac(user_dict='dict.txt',seg_only=true)

thu_out = segment.cut(sent, text=true)

print(thu_out)

其中,dict.txt 內為:

南韓瑜
但是!!!但是!!!將「南韓瑜」加入字典後分詞結果沒有任何改變(對於其他字典詞內的詞可以成功分詞)即分詞結果仍然為(南韓 瑜)

我嘗試將字典內容進行擴充,即將南韓瑜*3甚至*n(n是乙個足夠大的數)

更改後的字典內容為:

南韓瑜

南韓瑜南韓瑜

結果是thulac能夠正常識別「南韓瑜」

南韓瑜 此前 就 曾 邀 鴻海 來 高雄 投資 。
後驗表明只要在字典中加入兩個「南韓瑜」即可成功識別。由於thulac內部模型對使用者透明,因此我猜測字典內的某詞出現的數目越多,分詞器越趨向於將句子按字典分詞。

同樣,我在ltp的分詞器上也進行了實驗,ltp也存在字典中若「南韓瑜」只出現一次,則不能正確分詞,出現多次則可以正確分詞的情況。

測試**:

import thulac

from pyltp import segmentor

from pyltp import customizedsegmentor

import os

sent = "南韓瑜此前就曾邀鴻海來高雄投資,而在16日直播時,韓更透露,17日要與郭台銘直接見面,邀他來高雄擴大投資創造更多工作機會。"

segment = thulac.thulac(user_dict='dict.txt',seg_only=true)

thu_out = segment.cut(sent, text=true)

print(thu_out)

ltp_data_dir = 'd:\ltp\ltp_data_v3.4.0'

cws_model_path = os.path.join(ltp_data_dir, 'cws.model')

segmentor = segmentor()

#segmentor.load_with_lexicon(cws_model_path, 'dict.txt')

segmentor.load(cws_model_path)

ltp_out = segmentor.segment(sent)

print(" ".join(w for w in ltp_out))

segmentor.release()

關於thulac

docker 使用 ltp分詞和pos標註

sudo apt get install docker.io dockerfile檔案在 下面。獲取docker配置檔案後 docker build t ltp ltp 另外一種方式是直接拉取容器 docker run d p 8080 12345 ltp ltp ltp server last s...

LTP與jieba詞性標註對比

ltp 使用的是863詞性標註集,其各個詞性含義如下表。tagdescription example tagdescription example aadjective 美麗ni organization name 保險公司 bother noun modifier 大型,西式 nllocation...

中文分詞的演算法與實現(結巴分詞)

結巴分詞支援三種分詞模式 1.精確模式,試圖將句子最精確的切開,適合文字分析 2.全模式,把句子中所有的可以成詞的詞語都掃瞄出來,速度非常快,但是不能解釋歧義 3.搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。一 分詞 from future import un...