??本文將對三種中文分詞工具進行使用嘗試,這三種工具分別為哈工大的LTP阀溶,結(jié)巴分詞以及北大的pkuseg豹悬。
??首先我們先準備好環(huán)境,即需要安裝三個模塊:pyltp, jieba, pkuseg以及LTP的分詞模型文件cws.model
纸型。在用戶字典中添加以下5個詞語:
經(jīng)
少安
賀鳳英
F-35戰(zhàn)斗機
埃達爾·阿勒坎
??測試的Python代碼如下:
# -*- coding: utf-8 -*-
import os
import jieba
import pkuseg
from pyltp import Segmentor
lexicon = ['經(jīng)', '少安', '賀鳳英', 'F-35戰(zhàn)斗機', '埃達爾·阿勒坎'] # 自定義詞典
# 哈工大LTP分詞
def ltp_segment(sent):
# 加載文件
cws_model_path = os.path.join('data/cws.model') # 分詞模型路徑,模型名稱為`cws.model`
lexicon_path = os.path.join('data/lexicon.txt') # 參數(shù)lexicon是自定義詞典的文件路徑
segmentor = Segmentor()
segmentor.load_with_lexicon(cws_model_path, lexicon_path)
words = list(segmentor.segment(sent))
segmentor.release()
return words
# 結(jié)巴分詞
def jieba_cut(sent):
for word in lexicon:
jieba.add_word(word)
return list(jieba.cut(sent))
# pkuseg分詞
def pkuseg_cut(sent):
seg = pkuseg.pkuseg(user_dict=lexicon)
words = seg.cut(sent)
return words
sent = '盡管玉亭成家以后梅忌,他老婆賀鳳英那些年把少安媽欺負上一回又一回狰腌,怕老婆的玉亭連一聲也不敢吭,但少安他媽不計較他牧氮。'
#sent = '據(jù)此前報道癌别,以色列于去年5月成為世界上第一個在實戰(zhàn)中使用F-35戰(zhàn)斗機的國家。'
#sent = '小船4月8日經(jīng)長江前往小鳥島蹋笼。'
#sent = '1958年,埃達爾·阿勒坎出生在土耳其首都安卡拉躁垛,但他的求學(xué)生涯多在美國度過剖毯。'
print('ltp:', ltp_segment(sent))
print('jieba:', jieba_cut(sent))
print('pkuseg:', pkuseg_cut(sent))
&emsp?對于第一句話,輸出結(jié)果如下:
原文: 盡管玉亭成家以后教馆,他老婆賀鳳英那些年把少安媽欺負上一回又一回逊谋,怕老婆的玉亭連一聲也不敢吭,但少安他媽不計較他土铺。
ltp: ['盡管', '玉亭', '成家', '以后', '胶滋,', '他', '老婆', '賀鳳英', '那些', '年', '把', '少安', '媽', '欺負', '上', '一', '回', '又', '一', '回', ',', '怕', '老婆', '的', '玉亭', '連', '一', '聲', '也', '不', '敢', '吭', '悲敷,', '但', '少安', '他媽', '不', '計較', '他', '究恤。']
jieba: ['盡管', '玉亭', '成家', '以后', ',', '他', '老婆', '賀鳳英', '那些', '年', '把', '少安', '媽', '欺負', '上', '一回', '又', '一回', '后德,', '怕老婆', '的', '玉亭', '連', '一聲', '也', '不敢', '吭', '部宿,', '但少安', '他媽', '不', '計較', '他', '。']
pkuseg: ['盡管', '玉亭', '成家', '以后', ',', '他', '老婆', '賀鳳英', '那些', '年', '把', '少安', '媽', '欺負', '上', '一', '回', '又', '一', '回', '理张,', '怕', '老婆', '的', '玉亭', '連', '一', '聲', '也', '不', '敢', '吭', '赫蛇,', '但', '少安', '他媽', '不', '計較', '他', '。']
??對于第二句話雾叭,輸出結(jié)果如下:
原文: 據(jù)此前報道悟耘,以色列于去年5月成為世界上第一個在實戰(zhàn)中使用F-35戰(zhàn)斗機的國家。
ltp: ['據(jù)', '此前', '報道', '织狐,', '以色列', '于', '去年', '5月', '成為', '世界', '上', '第一', '個', '在', '實戰(zhàn)', '中', '使用', 'F-35', '戰(zhàn)斗機', '的', '國家', '暂幼。']
jieba: ['據(jù)此', '前', '報道', ',', '以色列', '于', '去年', '5', '月', '成為', '世界', '上', '第一個', '在', '實戰(zhàn)', '中', '使用', 'F', '-', '35', '戰(zhàn)斗機', '的', '國家', '赚瘦。']
pkuseg: ['據(jù)', '此前', '報道', '粟誓,', '以色列', '于', '去年', '5月', '成為', '世界', '上', '第一', '個', '在', '實戰(zhàn)', '中', '使用', 'F-35戰(zhàn)斗機', '的', '國家', '。']
??對于第三句話起意,輸出結(jié)果如下:
原文: 小船4月8日經(jīng)長江前往小鳥島鹰服。
ltp: ['小船', '4月', '8日', '經(jīng)長江', '前往', '小鳥島', '。']
jieba: ['小船', '4', '月', '8', '日經(jīng)', '長江', '前往', '小', '鳥島', '揽咕。']
pkuseg: ['小船', '4月', '8日', '經(jīng)', '長江', '前往', '小鳥', '島', '悲酷。']
??對于第四句話,輸出結(jié)果如下:
原文: 1958年亲善,埃達爾·阿勒坎出生在土耳其首都安卡拉设易,但他的求學(xué)生涯多在美國度過。
ltp: ['1958年', '蛹头,', '埃達爾·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', '顿肺,', '但', '他', '的', '求學(xué)', '生涯', '多', '在', '美國', '度過', '。']
jieba: ['1958', '年', '渣蜗,', '埃', '達爾', '·', '阿勒', '坎', '出生', '在', '土耳其', '首都', '安卡拉', '屠尊,', '但', '他', '的', '求學(xué)', '生涯', '多', '在', '美國', '度過', '。']
pkuseg: ['1958年', '耕拷,', '埃達爾·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', '讼昆,', '但', '他', '的', '求學(xué)', '生涯', '多', '在', '美國', '度過', '。']
??接著骚烧,對以上的測試情況做一個簡單的總結(jié):
用戶詞典方面:LTP和pkuseg的效果都很好浸赫,jieba的表現(xiàn)不盡如人意,這主要是因為自定義的字典的詞語里面含有標點符號赃绊,關(guān)于該問題的解決辦法既峡,可以參考網(wǎng)址:https://blog.csdn.net/weixin_42471956/article/details/80795534
從第二句話的效果來看,pkuseg的分詞效果應(yīng)該是最好的凭戴,‘經(jīng)’應(yīng)該作為單個的詞語切分出來涧狮,而LTP和jieba即使加了自定義詞典,也沒有效果,同理者冤,‘F-35戰(zhàn)斗機’也是類似的情形肤视。
??總的來說,三者的分詞效果都很優(yōu)秀涉枫,差距不是很大邢滑,但在自定義詞典這塊,無疑pkuseg的效果更加穩(wěn)定些愿汰。筆者也會在以后的分詞使用中多多考慮pkuseg~
??有關(guān)pkuseg的介紹與使用困后,可以參考網(wǎng)址:https://github.com/lancopku/PKUSeg-python
注意:不妨了解下筆者的微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關(guān)注~