HanLP分詞命名實體提取詳解

adnb34g發表於2019-01-11

HanLP分詞命名實體提取 詳解

 

分享一篇大神的關於 hanlp分詞命名實體提取的經驗文章,文章中分享的內容略有一段時間(使用的hanlp版本比較老),最新一版的hanlp已經出來了,也可以去看看新版的hanlp在這方面有何提升!

文字挖掘是抽取有效、新穎、有用、可理解的、散佈在文字檔案中的有價值知識,並且利用這些知識更好地組織資訊的過程。對於文字來說,由於語言組織形式各異,表達方式多樣,文字里面提到的很多要素,如人名、手機號、組織名、地名等都稱之為實體。在工程領域,招投標檔案裡的這些實體資訊至關重要。利用自然語言處理技術從形式各異的檔案中提取出這些實體,能有效提高工作效率和挖掘實體之間的潛在聯絡。

文字預處理

1、文字清洗

目前,大部分招中標專案資訊都是釋出在各個網站上,所以我們獲取的主要是網路文字。網頁中存在很多與文字內容無關的資訊,比如廣告,導航欄, html、js程式碼,註釋等等。文字清洗,就是透過正則匹配去掉這些干擾資訊,抽取出乾淨的文字內容。

2、中文分詞

中文分詞 (Chinese Word Segmentation) 指的是將一個漢字序列切分成一個一個單獨的詞。分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。一篇文字中不是所有詞都很重要,我們只需找出起到關鍵作用、決定文字主要內容的詞進行分析即可。目前幾大主流的分詞技術可移步到這篇部落格中:中文分詞技術小結、幾大分詞引擎的介紹與比較

筆者採用的是 HanLP分詞工具。  

HanLP是由一系列模型與演算法組成的Java工具包,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。

HanLP提供下列功能:

中文分詞

1.最短路分詞(Dijkstra精度已經足夠,且速度比N最短快幾倍)

2.N-最短路分詞(與Dijkstra對比,D已夠用)

3.CRF分詞(對新詞較有效)

4.索引分詞(長詞切分,索引所有可能詞)

5.極速詞典分詞(速度快,精度一般)

6.使用者自定義詞典

7.標準分詞(HMM-Viterbi)

 

命名實體識別

1.實體機構名識別(層疊HMM-Viterbi)

2.中國人名識別(HMM-Viterbi)

3.音譯人名識別(層疊隱馬模型)

4.日本人名識別(層疊隱馬模型)

5.地名識別(HMM-Viterbi)

 

篇章理解

1.關鍵詞提取( TextRank關鍵詞提取)

2.自動摘要( TextRank自動摘要,提取關鍵句子)

3.短語提取( 基於互資訊和左右資訊熵的短語提取)

 

簡繁拼音轉換

1.拼音轉換( 多音字,聲母,韻母,聲調)

2.簡繁轉換(繁體中文分詞,簡繁分歧詞)

 

智慧推薦

1.文字推薦(句子級別,從一系列句子中挑出與輸入句子/詞語最相似的那一句)

2.語義距離(基於《同義詞詞林擴充套件版》)

 

命名實體提取

 

HanLP分詞提供詞性標註的功能,所以呼叫分詞介面後獲得帶有詞性標註的單詞集合。例如:

String word = "河南大明建設工程管理有限公司受林州市水土保持生態建設管理局委託,

林州市合澗鎮劉家凹小流域 2017年省級水土保持補償費專案進行了公開招標";

List<Term> termList=  HanLP.segment( word );

System.out.println(termList.toString());

 

得到的輸出結果為:

[ 河南 /ns, 大明/nz, 建設工程/nz, 管理/vn, 有限公司/nis, 受/v, 林州市/ns, 水土保持/gg, 生態/n, 建設/vn, 管理局/nis, 委託/vn, ,/w, 就/d, 林州市/ns, 合澗鎮/ns, 劉家凹/nr, 小流域/nz, 2017/m, 年/qt, 省級/b, 水土保持/gg, 補償費/n, 專案/n, 進行/vn, 了/ule, 公開招標/v]

 

每個詞性代表什麼可以參考 HanLP詞性標註集

 

招中標專案文字樣式多變、內容複雜,我們無法直接定位文字中的某一位置來提取實體。小編採用基於統計和基於規則相融合的機器學習方法。

 

首先,統計這些實體出現的前後文單詞和詞性,並考慮他們之間的聯絡,概括出特定實體前後出現的高頻詞彙。

其次,利用這些高頻詞彙構建出 “前文+特定實體+後文”的規則。

最後,利用這一規則在全文中進行模式匹配。利用投票原理,對匹配度高的規則分配高分,相反,匹配度低的規則賦予低分。然後,對所有匹配的規則進行分數排序,得到投票分數最高的規則,並從規則中剝離出特定實體,這個實體即為我們的目標實體。

 

例如,招標單位的提取,我們統計出改實體出現的前文頻率較高的為:招標人、招標單位、建設單位、採購人、採購單位、業主等,後文為:委託、招標等。通常出現這些詞彙的前後就是招標單位。然後我們再根據這個詞的詞性,判斷它是否屬於機構名、團體名。如果是機構團體名,則判定該單詞為招標單位名稱。這樣,就可以獲得我們需要的實體。其他實體的提取與此類似。

如下圖:我們獲得的文字是網路片段

 

 

去除標籤、雜資料,得到的純文字為:

 

 

呼叫 HanLP分詞介面,得到下圖的分詞列表:

 

1.  Segment segment = HanLP.newSegment().enableOrganizationRecognize(true);

  2.  List<Term> termList = segment.seg(content);

 

最後,根據 “前文+特定實體+後文”正則匹配,得出提取的實體,如下圖:

 

技術實施流程圖

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2375527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章