NLP快速入門:手把手教你用HanLP做中文分詞

2021-03-06 寒樹RPA與AI

導讀:隨著自然語言處理(Natural Language Processing, NLP)技術日趨成熟,實現中文分詞的工具也越來越多。中文分詞技術作為中文自然語言處理的第一項核心技術,是眾多上層任務的首要基礎工作,同時在日常的工作中起著基礎性的作用。本文將講解如何在Python環境下調用HanLP包進行分詞,並結合Python語言簡約的特性,實現一行代碼完成中文分詞。

工具名稱是否開源
工具描述
Jieba
(結巴分詞)免費使用
jieba庫是一款優秀的支持 Python 第三方中文分詞庫,jieba支持三種分詞模式:精確模式、全模式和搜尋引擎模式。SnowNLP
(中文的類庫)免費使用SnowNLP是一個python寫的類庫,可以方便的處理中文文本內容,是受到了TextBlob的啟發而寫的,誕生了一個方便處理中文的類庫。FoolNLTK
(中文處理工具包)
免費使用FoolNLTK是基於Bi-LSTM模型訓練成的中文分詞工具,僅適用於Linux系統。Jiagu
(甲骨工具包)免費使用Jiagu以BiLSTM等模型為基礎,使用大規模語料訓練而成。集成多種NLP基礎處理功能並支持知識圖譜開放信息抽取。HanLP
(漢語言處理包)免費使用HanLP是一系列模型與算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。pyltp
(哈工大語言云)付費使用pyltp 是哈工大自然語言工作組推出的一款基於Python 封裝的自然語言處理工具,提供了分詞,詞性標註,命名實體識別,依存句法分析,語義角色標註的功能。THULAC(清華中文詞法分析)付費使用THULAC(THU Lexical Analyzer for Chinese)是由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包,具有中文分詞和詞性標註功能。NLPIR(漢語分詞系統)
付費使用NLPIR大數據語義智能分析平臺由北京理工大學大數據搜索與挖掘實驗室研發的「自然語言處理與信息檢索共享平臺。      眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開。而在漢語中,詞以字為基本單位,但是一篇文章的語義表達卻仍然是以詞來劃分。例如,英文句子"I am a student",用中文則為:"我是一個學生"。計算機可以很簡單通過空格知道"student"是一個單詞,但是不能很容易明白"學"、"生"兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。"我是一個學生",分詞的結果是:"我 是 一個 學生"。因此,需要針對中文漢字,將其按照一定的方式進行組織,分成不同的詞。       中文分詞是讓計算機自動識別出句子中的詞,然後在詞間加入邊界標記符。這個過程的主要困難在於分詞規範、歧義切分和未登陸詞的識別。

       

      分詞規範可以理解為國人並沒有統一對漢語詞的認識,對漢語詞的認識的操作尺度很難把握,極易受到主觀因素的影響,從而無法提供一個公認的、具有權威性的詞表(例如普通說話人的語感與語言學家的標準就有較大的差異)。

       歧義切分可以舉例如下:"南京市長江大橋"的分詞有兩種切分,"南京市\長江大橋" 和 "南京\市長\江大橋"。這種情況在漢語文本中非常普遍,並且處理這類問題往往也要複雜得多。

       未登錄詞的識別(生詞)可以有兩種解釋:一是指已有詞典中沒有收錄的詞;二是指已有的訓練語料中未曾出現過的詞。所以從某種意義上來說,生詞對分詞的影響是最容易處理的。

       HanLP的API總體來說並不多,且需要進行的配置並不複雜,適合新手上手。下載完成後,可以使用如下命令進行安裝。要求Python 3.6以上,支持Windows,可以在CPU上運行,推薦GPU/TPU。       註:若未安裝Java則會報如下錯誤。因為HanLP 主項目採用 Java 開發,所以需要 Java 運行環境,請安裝 JDK。
jpype.jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVAHOME environment variable properly.

       項目Github地址:https://github.com/hankcs/pyhanlp       首先,我們通過一個官網的實例直觀認識下HanLP的分詞結果。
import pyhanlptext = '鐵甲網是中國最大的工程機械交易平臺'words = []for term in pyhanlp.HanLP.segment(text):    words.append(term.word)print(words)  #輸出分詞結果

['鐵甲', '網', '是', '中國', '最大', '的', '工程', '機械', '交易', '平臺']

       接著,我們通過自定義增加不同領域內的專有名詞的詞典,從而進一步優化HanLP的分詞結果。
CustomDictionary.add("鐵甲網")    CustomDictionary.insert("工程機械", "nz 1024")    CustomDictionary.add("交易平臺", "nz 1024 n 1")    print(HanLP.segment(txt))

['鐵甲網', '是', '中國', '最大', '的', '工程機械', '交易平臺']

       最後,我們可以利用Python語言的簡約性將代碼優化成如下一行。          正則表達式 re.fullmatch(r'[\u4e00-\u9fa5]+',i) 的作用是僅保留漢字,過濾掉非漢字之外的字符。
words = [i for i in [i.word for i in pyhanlp.HanLP.segment(text)] if re.fullmatch(r'[\u4e00-\u9fa5]+',i)]

       當然了,HanLP作為開源框架,並不是只有分詞這一個功能,還提供了很多在分詞之上的算法,如關鍵詞提取、自動摘要、依存句法分析、情感分析等,這裡不再贅述。

哎呀媽呀!

相關焦點

  • Java中文語言處理HanLP
    官網:http://hanlp.linrunsoft.com/1、中文分詞:http://hanlp.linrunsoft.com/doc/_build/html/segment.html2、摘要關鍵字:http://hanlp.linrunsoft.com/doc/_build/html
  • 【分詞】中文分詞的古今中外,你想知道的都在這裡
    中的"Hey"和"you"是需要與身後的標點分隔開的為什麼需要分詞?能不能不分詞?中文分詞難在哪?從古至今的分詞算法:詞典到預訓練從中到外的分詞工具對於中文來說,如果不進行分詞,那麼神經網絡將直接基於原始的漢字序列進行處理和學習。
  • 【分詞】從why到how的中文分詞詳解,從算法原理到開源工具
    中的"Hey"和"you"是需要與身後的標點分隔開的為什麼需要分詞?能不能不分詞?中文分詞難在哪?從古至今的分詞算法:詞典到預訓練從中到外的分詞工具對於中文來說,如果不進行分詞,那麼神經網絡將直接基於原始的漢字序列進行處理和學習。
  • 中文分詞技術全解析,你想知道的都在這裡(附開源工具)
    中的"Hey"和"you"是需要與身後的標點分隔開的為什麼需要分詞?能不能不分詞?中文分詞難在哪?2.2 基於統計機器學習NLP是一門跟機器學習強綁定的學科,分詞問題自然也不例外。中文分詞同樣可以建模成一個「序列標註」問題,即一個考慮上下文的字分類問題。因此可以先通過帶標籤的分詞語料來訓練一個序列標註模型,再用這個模型對無標籤的語料進行分詞。
  • 自然語言處理工具python調用hanlp中文實體識別
    Hanlp作為一款重要的中文分詞工具,在GitHub的用戶量已經非常之高,應該可以看得出來大家對於hanlp這款分詞工具還是很認可的。本篇繼續分享一篇關於hanlp的使用實例即Python調用hanlp進行中文實體識別。
  • Hanlp分詞之CRF中文詞法分析詳解
    默認模型訓練自OpenCorpus/pku98/199801.txt,隨hanlp 1.6.2以上版本發布。語料格式等與感知機詞法分析器相同,請先閱讀《感知機詞法分析器》。中文分詞訓練CRFSegmenter segmenter = new CRFSegmenter(null);segmenter.train("data/test/pku98/199801.txt
  • 中文分詞文章索引和分詞數據資源分享
    ,除了基於深度學習的分詞方法還沒有探討外,「古典」機器學習時代的中文分詞方法都有涉及,從基於詞典的中文分詞(最大匹配法),到基於統計的分詞方法(HMM、最大熵模型、條件隨機場模型CRF),再到Mecab、NLTK中文分詞,都有所涉及。
  • 韋編 | HanLP——面向中文的自然語言處理常用工具包
    上兩周上課時,計量學老師介紹了StanfordCoreNLP在命令行和Eclipse中的用法,好奇心驅使,想要尋找一款在Python中好用的自然語言處理工具。其基本功能有:中文分詞  詞性標註  命名實體識別  依存句法分析  關鍵詞提取  新詞發現  短語提取  自動摘要  文本分類  拼音簡繁  文本推薦  情感分析  word2vec 文本聚類等。
  • 手把手教你用Jieba做中文分詞
    、盤古分詞等。如果將詞看作節點,詞和詞之間的分詞符看作邊,那麼一種分詞方案則對應著從第一個字到最後一個字的一條分詞路徑。因此,基於前綴詞典可以快速構建包含全部可能分詞結果的有向無環圖,這個圖包含多條分詞路徑,有向是指全部的路徑都始於第一個字、止於最後一個字,無環是指節點之間不構成閉環。其次,基於標註語料、使用動態規劃的方法可以找出最大概率路徑,並將其作為最終的分詞結果。
  • NLP入門乾貨:手把手教你3種中文規則分詞方法
    將詞確定下來是理解自然語言的第一步,只有跨越了這一步,中文才能像英文那樣過渡到短語劃分、概念抽取以及主題分析,以至自然語言理解,最終達到智能計算的最高境界。因此,每個NLP工作者都應掌握分詞技術。1. 分詞的概念和分類「詞」這個概念一直是漢語言學界糾纏不清而又揮之不去的問題。
  • NLP、KG相關軟體、工具、資源匯總
    /jieba):應該是應用最廣泛的一個中文分詞工具了。UER-py (https://github.com/dbiir/UER-py):基於pytorch的一個預訓練模型框架(在你自己的語料上訓練語言模型或者finetune下遊任務),也包含了一些即開即用的中文預訓練模型
  • NLP的中文分詞面試指南
    隨著機器學習的快速發展,越來越多的網際網路公司開始擁抱機器學習。但市場上機器學習相關的優秀工程師卻非常稀少,所以網際網路公司才不惜開出高薪吸引人才。而NLP是機器學習領域最重要的分支,也是目前最難攻克的方向。
  • 中文分詞工具評估:chinese-segmentation-evaluation
    這裡有一個Java開源項目cws_evaluation,對中文分詞做了評比,但有幾點不足:(1). 只有java版本,但是機器學習主要是基於python的 (2).效果指標為行完美率和字完美率,該指標不妥,特別是句子越長,越無意義,(3). 每種分詞工具評測的算法太多了,這裡僅評比了默認的分詞算法。
  • 乾貨 | NLP、知識圖譜教程、書籍、網站、工具...(附資源連結)
    包括52nlp、rickjin、liwei等國內外華人大牛.http://www.52nlp.cn/實戰課程:自己動手做聊天機器人http://www.shareditor.com/bloglistbytag/?
  • KenLM, NLP語言模型神器手把手入門教學
    KenLM, NLP語言模型神器手把手入門教學我是@老K玩代碼,專注分享實戰項目和最新行業資訊,已累計分享超1000實戰項目!Part10. 前言做自然語言處理NLP項目,構建語言模型是第一步工作,也是萬物的基石。
  • 【NLP】為什麼中文分詞比英文分詞更難?有哪些常用算法?(附代碼)
    這就給中文分詞帶來了挑戰。分詞的第一步是獲得詞彙表。由於許多中文詞彙存在部分重疊現象,詞彙表越大,分詞歧義性出現的可能性就越大。因此,需要在詞彙表的規模和最終分詞的質量之間尋找平衡點。這裡介紹一種主流的中文分詞方式——基於匹配的分詞。這種分詞方式採用固定的匹配規則對輸入文本進行分割,使得每部分都是一個詞表中的單詞。
  • 資源 | Python中文分詞工具大合集
    安裝這些模塊其實很簡單,只要按官方文檔的方法安裝即可,以下做個簡單介紹,主要是在Python3.x & Ubuntu16.04 的環境下測試及安裝這些中文分詞器。再附加介紹12款其他的中文分詞工具或者中文分詞模塊,最後的兩款fnlp和ansj是比較棒的java中文分詞工具,貌似還沒有python接口,記錄一下。這些中文分詞工具我沒有測試,感興趣的同學可以動手試試。
  • 一文詳解如何用 python 做中文分詞
    打算繪製中文詞雲圖?那你得先學會如何做中文文本分詞。跟著我們的教程,一步步用 Python 來動手實踐吧。但是很快就有讀者嘗試用中文文本做詞雲了。按照前文的方法,你成功了嗎?估計是不成功的。因為這裡面缺了一個重要的步驟。觀察你的英文文本。你會發現英文單詞之間採用空格作為強制分隔符。
  • 【推薦】中文自然語言處理利器-HanLP
    HanLP提供下列功能:中文分詞詞性標註HMM詞性標註(速度快)感知機詞性標註、CRF詞性標註(精度高)命名實體識別關鍵詞提取自動摘要短語提取拼音轉換簡繁轉換文本推薦依存句法分析基於神經網絡的高性能依存句法分析器
  • 中文分詞工具——jieba
    在此介紹中文分詞工具jieba,其特點為:社區活躍、目前github上有19670的star數目功能豐富,支持關鍵詞提取、詞性標註等多語言支持(Python、C++、Go、R等)使用簡單Jieba分詞結合了基於規則和基於統計這兩類方法。