NLP三種中文分詞工具的對比使用

2021-02-20 Python中文社區

作者:jclian,喜歡算法,熱愛分享,希望能結交更多志同道合的朋友,一起在學習Python的道路上走得更遠!

本文將對三種中文分詞工具進行使用嘗試,這三種工具分別為哈工大的LTP,結巴分詞以及北大的pkuseg。
首先我們先準備好環境,即需要安裝三個模塊:pyltp, jieba, pkuseg以及LTP的分詞模型文件cws.model。在用戶字典中添加以下5個詞語:


少安
賀鳳英
F-35戰鬥機
埃達爾·阿勒坎

測試的Python代碼如下:



import os
import jieba
import pkuseg
from pyltp import Segmentor

lexicon = ['經', '少安', '賀鳳英', 'F-35戰鬥機', '埃達爾·阿勒坎'] 


def ltp_segment(sent):
    
    cws_model_path = os.path.join('data/cws.model') 
    lexicon_path = os.path.join('data/lexicon.txt') 
    segmentor = Segmentor()
    segmentor.load_with_lexicon(cws_model_path, lexicon_path)
    words = list(segmentor.segment(sent))
    segmentor.release()

    return words


def jieba_cut(sent):
    for word in lexicon:
        jieba.add_word(word)
    return list(jieba.cut(sent))


def pkuseg_cut(sent):
    seg = pkuseg.pkuseg(user_dict=lexicon)
    words = seg.cut(sent)
    return words

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




print('ltp:', ltp_segment(sent))
print('jieba:', jieba_cut(sent))
print('pkuseg:', pkuseg_cut(sent))

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

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

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日', '經', '長江', '前往', '小鳥', '島', '。']

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

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

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

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

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

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

用戶詞典方面:LTP和pkuseg的效果都很好,jieba的表現不盡如人意,這主要是因為自定義的字典的詞語裡面含有標點符號,關於該問題的解決辦法,可以參考網址:https://blog.csdn.net/weixin_42471956/article/details/80795534

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

總的來說,三者的分詞效果都很優秀,差距不是很大,但在自定義詞典這塊,無疑pkuseg的效果更加穩定些。筆者也會在以後的分詞使用中多多考慮pkuseg~
有關pkuseg的介紹與使用,可以參考網址:https://github.com/lancopku/PKUSeg-python

相關焦點

  • NLP 中文分詞工具的使用嘗試
    本文將對三種中文分詞工具進行使用嘗試,這三種工具分別為哈工大的 LTP,結巴分詞以及北大的 pkuseg。首先我們先準備好環境,即需要安裝三個模塊:pyltp, jieba, pkuseg 以及 LTP 的分詞模型文件 cws.model。
  • 中文分詞工具評估:chinese-segmentation-evaluation
    專欄地址:http://www.52nlp.cn/author/tiandiweizun中文分詞工具評估項目地址:https:基於此,我做了一個java和python版本中文分詞工具評比項目chinese-segmentation-evaluation。
  • 乾貨 | 史上最全中文分詞工具整理
    作者 | fendouai編輯 | 安可出品 | 磐創AI技術團隊【磐創AI導讀】:本文為中文分詞工具整理分享 一.中文分詞 我們在統一測試環境下,對上述流行分詞軟體和THULAC進行了測試,使用的模型為各分詞軟體自帶模型。THULAC使用的是隨軟體提供的簡單模型Model_1。評測環境為 Intel Core i5 2.4 GHz 評測結果如下:
  • 常用的開源中文分詞工具
    一般來說用CRF實現的分詞工具的處理速度是比較慢的(訓練CRF模型是非常耗時的),但是精度高,涉及CRF的分詞工具有CRF++,Stanford分詞工具。Bakeoff是一個國際中文處理比賽,有多個語料,所以每個語料都有排名。只有部分優秀的Bakeoff工具開源。
  • 中文分詞入門之資源
    作為中文信息處理的「橋頭堡」,中文分詞在國內的關注度似乎遠遠超過了自然語言處理的其他研究領域。在中文分詞中,資源的重要性又不言而喻,最大匹配法等需要一個好的詞表,而基於字標註的中文分詞方法又需要人工加工好的分詞語料庫。所以想研究中文分詞,第一步需要解決的就是資源問題,這裡曾經介紹過「LDC上免費的中文信息處理資源」,其中包括一個有頻率統計的詞表,共計44405條,就可以作為一個不錯的中文分詞詞表使用。
  • 在 NLTK 中使用 Stanford NLP 工具包
    使用 StanfordSegmenter 和 StanfordTokenizer 進行分詞使用 StanfordNERTagger 進行命名實體識別使用 StanfordPOSTagger 進行詞性標註使用 StanfordParser 進行句法分析使用 StanfordDependencyParser 進行依存句法分析
  • 【NLP】為什麼中文分詞比英文分詞更難?有哪些常用算法?(附代碼)
    如在以下例子中,兩種分拆方式代表的語義都有可能:南京市|長江|大橋南京|市長|江大橋為了解決分詞中的歧義性,許多相關算法被提出並在實踐中取得了很好的效果。下面將對中文分詞和英文分詞進行介紹。01 中文分詞在漢語中,句子是單詞的組合。
  • 小米開源NLP分詞工具
    近日,小米NLP團隊開源了其分詞工具minlp-tokenizer,該分詞工具支持細粒度和
  • 專欄 中文分詞工具測評
    作為一個基礎部件,學術界對分詞的研究已經非常久了,市面上流行的幾大開源分詞工具也被工業界的各大公司應用很多年了。最近,中文分詞隨著一篇博文的發表被推到了風口浪尖,引發眾多大牛在微博、微信群裡的激烈討論。本文並不想對這篇博文進行過多評論,只是想用公開的數據集對各大分詞工具進行一個客觀地測評,以供大家在選擇工具時有所依據。
  • 乾貨 | NLP、知識圖譜教程、書籍、網站、工具...(附資源連結)
    工具Natural Language Toolkit(NLTK)官網:http://www.nltk.org/可使用nltk.download()下載相關nltk官方提供的各種資源。/CoreNLP/THUCTCTHUCTC(THU Chinese Text Classification)是由清華大學自然語言處理實驗室推出的中文文本分類工具包。
  • Awesome-Chinese-NLP:中文自然語言處理相關資料
    chinese_nlp (C++ & Python) Chinese Natural Language Processing tools and examplesChinese-Annotator (Python) Annotator for Chinese Text Corpus 中文文本標註工具Poplar (Typescript) A web-based
  • 【NLP】競賽必備的NLP庫
    jieba是Python中的優秀的中文分詞第三方庫,通過幾行代碼就可以完成中文句子的分詞。jieba的分詞精度和性能非常優異,經常用來進行中文分詞的實驗對比。此外jieba還可以很方便的自定義詞典,使用起來非常靈活。
  • 支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP
    3.6 及之後版本,並基於 PyTorch,支持多種語言的完整文本分析管道,包括分詞、詞性標註、詞形歸併和依存關係解析,此外它還提供了與 CoreNLP 的 Python 接口。StanfordNLP 不僅提供 CoreNLP 的功能,還包含一系列工具,可將文本字符串轉換為句子和單詞列表,生成單詞的基本形式、詞性和形態特徵,以及適用於 70 餘種語言中的句法結構。StanfordNLP 用高度準確的神經網絡構建而成,允許使用自己的標註數據進行高效訓練和評估。這些模塊基於 PyTorch 構建。
  • 五款中文分詞工具在線PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
    PK,例如在AINLP公眾號後臺對話輸入:中文分詞 我愛自然語言處理,就可以得到五款分詞工具的分詞結果:現在的開源中文分詞工具或者模塊已經很豐富了,並且很多都有一些在封閉測試集上的效果對比數據,不過這僅僅只能展現這些分詞工具在這個封閉測試集上的效果,並不能全面說明問題,個人覺得,選擇一個適合自己業務的分詞器可能更重要,有的時候,還需要加一些私人定製的詞庫。
  • 數據競賽必備的NLP庫總結!
    因此本周我們給大家整理了機器學習和競賽相關的NLP庫,方便大家進行使用,又一篇收藏即學習系列。jieba是Python中的優秀的中文分詞第三方庫,通過幾行代碼就可以完成中文句子的分詞。jieba的分詞精度和性能非常優異,經常用來進行中文分詞的實驗對比。此外jieba還可以很方便的自定義詞典,使用起來非常靈活。
  • 分詞|Python最好的中文分詞庫
    在使用這個庫之前,我相信有很多的讀者一定很想知道jieba背後的工作原理,jieba具體應用的算法如下:基於前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG);採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合;對於未登錄詞,採用了基於漢字成詞能力的 HMM 模型,使用了 Viterbi 算法。
  • Elasticsearch 使用中文分詞
    IK Analysis 插件來實現在 Elasticsearch 中的中文分詞功能。使用中文分詞在「Spring Boot應用企業級博客系統」課程中(http://coding.imooc.com/class/125.html),所有的博客功能都已經完成了。讀者朋友們開始愉快地使用博客來發表博客了。但如果朋友們足夠細心的話,發現在輸入中文的標籤的時候,存在一定的問題。
  • 打包帶走,競賽必備的NLP庫
    因此本周我們給大家整理了機器學習和競賽相關的NLP庫,方便大家進行使用,建議收藏本文。jieba是Python中的優秀的中文分詞第三方庫,通過幾行代碼就可以完成中文句子的分詞。jieba的分詞精度和性能非常優異,經常用來進行中文分詞的實驗對比。此外jieba還可以很方便的自定義詞典,使用起來非常靈活。
  • 三種NLP工具將告訴你答案!
    例如,DocumentCloud 在其「View Entities」分析選項中使用了類似的方法。分詞 & 詞性標註從文本中提取意思的一種方法是分析單個單詞。將文本拆分為單詞的過程叫做分詞(tokenization)——得到的單詞稱為分詞(token)。標點符號也是分詞。句子中的每個分詞都有幾個可以用來分析的屬性。
  • PaddleNLP:工業級中文NLP開源工具集
    為了適應全面豐富的NLP任務,方便更多開發者靈活插拔嘗試多種網絡結構,並且讓應用最快速達到工業級效果,今年4月23日,百度正式開放了工業級中文NLP工具與預訓練模型集——PaddleNLP(nlp.baidu.com/homepage/nlptools)。