NLP(十三)中文分詞工具的使用嘗試

2021-09-25 20:25:21 字數 4401 閱讀 8996

本文將對三種中文分詞工具進行使用嘗試,這三種工具分別為哈工大的ltp,結巴分詞以及北大的pkuseg。

首先我們先準備好環境,即需要安裝三個模組:pyltp, jieba, pkuseg以及ltp的分詞模型檔案cws.model。在使用者字典中新增以下5個詞語:

少安賀鳳英

f-35戰鬥機

埃達爾·阿勒坎

測試的python**如下:

# -*- coding: utf-8 -*-

import os

import jieba

import pkuseg

from pyltp import segmentor

lexicon =

['經'

,'少安'

,'賀鳳英'

,'f-35戰鬥機'

,'埃達爾·阿勒坎'

]# 自定義詞典

# 哈工大ltp分詞

defltp_segment

(sent)

:# 載入檔案

cws_model_path = os.path.join(

'data/cws.model'

)# 分詞模型路徑,模型名稱為`cws.model`

lexicon_path = os.path.join(

'data/lexicon.txt'

)# 引數lexicon是自定義詞典的檔案路徑

segmentor = segmentor(

) segmentor.load_with_lexicon(cws_model_path, lexicon_path)

words =

list

(segmentor.segment(sent)

) segmentor.release(

)return words

# 結巴分詞

defjieba_cut

(sent)

:for word in lexicon:

jieba.add_word(word)

return

list

(jieba.cut(sent)

)# pkuseg分詞

defpkuseg_cut

(sent)

: seg = pkuseg.pkuseg(user_dict=lexicon)

words = seg.cut(sent)

return words

sent =

'儘管玉亭成家以後,他老婆賀鳳英那些年把少安媽欺負上一回又一回,怕老婆的玉亭連一聲也不敢吭,但少安他媽不計較他。'

#sent = '據此前報道,以色列於去年5月成為世界上第乙個在實戰中使用f-35戰鬥機的國家。'

#sent = '小船4月8日經長江前往小鳥島。'

#sent = '2023年,埃達爾·阿勒坎出生在土耳其首都安卡拉,但他的求學生涯多在美國度過。'

print

('ltp:'

, ltp_segment(sent)

)print

('jieba:'

, jieba_cut(sent)

)print

('pkuseg:'

, pkuseg_cut(sent)

)

&emsp 對於第一句話,輸出結果如下:

原文: 儘管玉亭成家以後,他老婆賀鳳英那些年把少安媽欺負上一回又一回,怕老婆的玉亭連一聲也不敢吭,但少安他媽不計較他。

ltp: [『儘管』, 『玉亭』, 『成家』, 『以後』, 『,』, 『他』, 『老婆』, 『賀鳳英』, 『那些』, 『年』, 『把』, 『少安』, 『媽』, 『欺負』, 『上』, 『一』, 『回』, 『又』, 『一』, 『回』, 『,』, 『怕』, 『老婆』, 『的』, 『玉亭』, 『連』, 『一』, 『聲』, 『也』, 『不』, 『敢』, 『吭』, 『,』, 『但』, 『少安』, 『他媽』, 『不』, 『計較』, 『他』, 『。』]

jieba: [『儘管』, 『玉亭』, 『成家』, 『以後』, 『,』, 『他』, 『老婆』, 『賀鳳英』, 『那些』, 『年』, 『把』, 『少安』, 『媽』, 『欺負』, 『上』, 『一回』, 『又』, 『一回』, 『,』, 『怕老婆』, 『的』, 『玉亭』, 『連』, 『一聲』, 『也』, 『不敢』, 『吭』, 『,』, 『但少安』, 『他媽』, 『不』, 『計較』, 『他』, 『。』]

pkuseg: [『儘管』, 『玉亭』, 『成家』, 『以後』, 『,』, 『他』, 『老婆』, 『賀鳳英』, 『那些』, 『年』, 『把』, 『少安』, 『媽』, 『欺負』, 『上』, 『一』, 『回』, 『又』, 『一』, 『回』, 『,』, 『怕』, 『老婆』, 『的』, 『玉亭』, 『連』, 『一』, 『聲』, 『也』, 『不』, 『敢』, 『吭』, 『,』, 『但』, 『少安』, 『他媽』, 『不』, 『計較』, 『他』, 『。』]

對於第二句話,輸出結果如下:

原文: 據此前報道,以色列於去年5月成為世界上第乙個在實戰中使用f-35戰鬥機的國家。

ltp: [『據』, 『此前』, 『報道』, 『,』, 『以色列』, 『於』, 『去年』, 『5月』, 『成為』, 『世界』, 『上』, 『第一』, 『個』, 『在』, 『實戰』, 『中』, 『使用』, 『f-35』, 『戰鬥機』, 『的』, 『國家』, 『。』]

jieba: [『據此』, 『前』, 『報道』, 『,』, 『以色列』, 『於』, 『去年』, 『5』, 『月』, 『成為』, 『世界』, 『上』, 『第乙個』, 『在』, 『實戰』, 『中』, 『使用』, 『f』, 『-』, 『35』, 『戰鬥機』, 『的』, 『國家』, 『。』]

pkuseg: [『據』, 『此前』, 『報道』, 『,』, 『以色列』, 『於』, 『去年』, 『5月』, 『成為』, 『世界』, 『上』, 『第一』, 『個』, 『在』, 『實戰』, 『中』, 『使用』, 『f-35戰鬥機』, 『的』, 『國家』, 『。』]

對於第三句話,輸出結果如下:

原文: 小船4月8日經長江前往小鳥島。

ltp: [『小船』, 『4月』, 『8日』, 『經長江』, 『前往』, 『小鳥島』, 『。』]

jieba: [『小船』, 『4』, 『月』, 『8』, 『日經』, 『長江』, 『前往』, 『小』, 『鳥島』, 『。』]

pkuseg: [『小船』, 『4月』, 『8日』, 『經』, 『長江』, 『前往』, 『小鳥』, 『島』, 『。』]

對於第四句話,輸出結果如下:

原文: 2023年,埃達爾·阿勒坎出生在土耳其首都安卡拉,但他的求學生涯多在美國度過。

ltp: [『2023年』, 『,』, 『埃達爾·阿勒坎』, 『出生』, 『在』, 『土耳其』, 『首都』, 『安卡拉』, 『,』, 『但』, 『他』, 『的』, 『求學』, 『生涯』, 『多』, 『在』, 『美國』, 『度過』, 『。』]

jieba: [『1958』, 『年』, 『,』, 『埃』, 『達爾』, 『·』, 『阿勒』, 『坎』, 『出生』, 『在』, 『土耳其』, 『首都』, 『安卡拉』, 『,』, 『但』, 『他』, 『的』, 『求學』, 『生涯』, 『多』, 『在』, 『美國』, 『度過』, 『。』]

pkuseg: [『2023年』, 『,』, 『埃達爾·阿勒坎』, 『出生』, 『在』, 『土耳其』, 『首都』, 『安卡拉』, 『,』, 『但』, 『他』, 『的』, 『求學』, 『生涯』, 『多』, 『在』, 『美國』, 『度過』, 『。』]

接著,對以上的測試情況做乙個簡單的總結:

使用者詞典方面:ltp和pkuseg的效果都很好,jieba的表現不盡如人意,這主要是因為自定義的字典的詞語裡面含有標點符號,關於該問題的解決辦法,可以參考**:

從第二句話的效果來看,pkuseg的分詞效果應該是最好的,『經』應該作為單個的詞語切分出來,而ltp和jieba即使加了自定義詞典,也沒有效果,同理,『f-35戰鬥機』也是類似的情形。

總的來說,三者的分詞效果都很優秀,差距不是很大,但在自定義詞典這塊,無疑pkuseg的效果更加穩定些。筆者也會在以後的分詞使用中多多考慮pkuseg~

有關pkuseg的介紹與使用,可以參考**:

專案實訓(十三) 中心裁剪bitmap

參考 專案中有個需求,因為處理模型只接收256 256的,所以我需要對進行乙個裁剪然後方法。也就是說,分為兩步,先取中間的正方形部分 類似imageview的scaletype 然後生成乙個固定大小的新圖。param edgelength 希望得到的正方形部分的邊長 return 縮放擷取正中部分後...

NLP基礎實驗 中文分詞 jieba

中文分詞有很多種,常見的比如有中科院計算所 nlpir 哈工大 ltp 清華大學 thulac 斯坦福分詞器 hanlp 分詞器 jieba 分詞 ikanalyzer 等。官方 三種分詞演算法 支援三種分詞模式 import jieba content 現如今,機器學習和深度學習帶動人工智慧飛速的...

NLP系列 中文分詞(基於詞典)

詞是最小的能夠獨立活動的有意義的語言成分,一般分詞是自然語言處理的第一項核心技術。英文中每個句子都將詞用空格或標點符號分隔開來,而在中文中很難對詞的邊界進行界定,難以將詞劃分出來。在漢語中,雖然是以字為最小單位,但是一篇文章的語義表達卻仍然是以詞來劃分的。因此處理中文文字時,需要進行分詞處理,將句子...