中文自然語言處理工具介紹

轉載自:http://blog.csdn.net/xieyan0811/article/details/60962955

自然語言處理是人工智能領域中的一個重要方向。它研究能人機之間通訊的方式,並涉及機器對人類知識體系的學習和應用.從分詞,相似度計算,情感分析,文章摘要,到學習文獻,知識推理,都涉及自然語言分析.下面介紹一些中文語言語義分析的資源.(以下只討論能嵌入到我們程序裏的資源)

1. 同義詞詞林

《同義詞詞林》是80年代出版的一本詞典,這提供了詞的歸類,相關性信息,起始主要用於翻譯,哈工大對它進行了細化和擴充,出了《詞林擴展版》,其中含有7萬多詞,17000多種語義,五層編碼.12大類,94中類,1428小類,形如:

[plain] view plain copy
Aa01A01= 人 士 人物 人士 人氏 人選  

每一個條目對應一種語義,根據分類編號:第一位大寫表示大類,第二位小寫表示中類…其中涉及了一詞多義和一義多詞.

《詞林擴展版》網上的下載很多,大小不到1M,可以直接load到程序中,用於簡單的分詞,文章分類,模糊查找,統計,情感分析(不同感情色彩對應不同類別號)等等.

2. 哈工大語言云(LTP)

中文的語義分析工具,大多數都像LTP這樣,提供一個在線的分析器,一組API,比較簡單穩定的功能.LTP是其中做得比較好的.
它提供了中文分詞、詞性標註、命名實體識別、依存句法分析、語義角色標註等等功能.但對於進一步語義方面的深入的開發,用處不大,而且需要連網使用,速度和處理數量上都有一些限制.

詳見:http://www.ltp-cloud.com/demo

  1. 結巴分詞
    結巴是一個Python的中文分詞組件.它提供了分詞和詞性標註功能.能在本地自由使用, 是python實現的, 可以很好的和其它Python工具相結合,使用方法如下:
[python] view plain copy
#encoding=utf-8  
import jieba.posseg as pseg  
import jieba  

seg_list = jieba.cut("我愛北京天安門", cut_all=True)  
print "Full Mode:", "/ ".join(seg_list)  

words = pseg.cut("我愛北京天安門")  
for w in words:  
   print w.word,w.flag

執行結果是:

[plain] view plain copy
Full Mode: 我/ 愛/ 北京/ 天安/ 天安門  
我 r  
愛 v  
北京 ns  
天安門 ns  

詳見: http://www.oschina.net/p/jieba/

4. 知網 HowNet

對於語言的理解, 人們更關注語義,即研究文字真正的含義是什麼,並希望機器能像人腦一樣把知識組織成體系.
中文語義庫開放的資源非常少,《現代漢語語義詞典》,《中文概念辭書》這些都是聽說過沒見過,總之人家是不開放. 就算能去書店買一本, 也用不到程序裏.

我在網上只找到了HowNet (可以在csdn下載, 壓縮包1.5M左右). 形如:

[plain] view plain copy
NO.=069980  
W_C=羣衆  
G_C=N  
E_C=  
W_E=the masses  
G_E=N  
E_E=  
DEF=human|人,mass|衆  

可以看到它包含:編號, 中文詞, 對應英文詞, 詞性, 約12萬多項.

HowNet在2013年後就不更新了, 以上版本差不多是能在網上找到的比較全的數據了. 它還提供了一些庫, 可用於判斷相似度等.

詳見:http://www.keenage.com/html/c_index.html

5. NLTK與WordNet (sentiwordnet)

WordNet是一個語義詞典, NLTK是Python的一個自然語言處理工具,它提供了訪問WordNet各種功能的函數。WordNet形如:

[plain] view plain copy
n   03790512    0   0   motorcycle#1 bike#1 a motor vehicle with two wheels and a strong frame  

其中含有詞性, 編號, 語義, 詞彙間的關係(同義/反義,上行/下行,整體/部分…), 大家都覺得"它很棒, 只可惜沒有中文支持". 其實也不是沒中文支持. WordNet有中文以及其它更多語言的支持, 可以從以下網址下載:

http://globalwordnet.org/wordnets-in-the-world/

其中的數據文件形如:

[plain] view plain copy
03790512-n  cmn:lemma   摩托車  

可以看到,它與sentiwordnet的詞條編號一致,儘管對應可能不是特別完美,但理論上是:對英文能做的處理,對中文也能做.
NLTK+WordNet功能非常豐富,強烈推薦《PYTHON自然語言處理NLTK Natural LanguageProcessing with Python》這本書,它已由愛好者譯成中文版,可從網上下載.裏面不但討論了具體的實現方法,還討論了一些研究方向,比如"從自然語言到一階邏輯"…

  1. 隨想
    對語言的處理,首先是分詞,然後是消歧, 判斷詞在句中的成份, 識別語義.形成知識網絡...希望最終機器能像人類一樣,學習,思考和創造.
    語言處理在不同的層次有不同的應用:從文章分類,內容提取,到自動診斷病情(IBM Watson),或者存在更通用的邏輯,使機器成爲比搜索引擎更智能的各個行業的專家系統.

自然語言和語義看似多對多的關係,我覺得本質上語義轉換成語言是從高維到低的投影.從詞林的分類看,真正核心的概念並不太多,但是語義的關係和組合很複雜,再深層次還涉及知識線等等.而語言只是它的表象.在分析過程中,越擬合那表象,差得越多.
另外,這一領域已經有幾十年的歷史了,學習時儘可能利用現有工具,把精力集中在目標而非具體過程.多參考人家都實現了什麼功能,人家的數據是怎麼組織的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章