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分詞接口,得到下圖的分詞列表:
- Segment segment = HanLP.newSegment().enableOrganizationRecognize(true);
2. List<Term> termList = segment.seg(content);
最后,根據“前文+特定實體+后文”正則匹配,得出提取的實體,如下圖:
技術實施流程圖
原文:https://blog.csdn.net/XiaoXiao_Yang77/article/details/78437915