轉至:https://www.sohu.com/a/195343820_163476
最近正在用nltk 對中文網絡商品評論進行褒貶情感分類,計算評論的信息熵(entropy)、互信息(point mutual information)和困惑值(perplexity)等(不過這些概念我其實也還理解不深...只是nltk 提供了相應方法)。
我感覺用nltk 處理中文是完全可用的。其重點在於中文分詞和文本表達的形式。
中文和英文主要的不同之處是中文需要分詞。因為nltk 的處理粒度一般是詞,所以必須要先對文本進行分詞然后再用nltk 來處理(不需要用nltk 來做分詞,直接用分詞包就可以了。嚴重推薦結巴分詞,非常好用)。
中文分詞之后,文本就是一個由每個詞組成的長數組:[word1, word2, word3…… wordn]。之后就可以使用nltk 里面的各種方法來處理這個文本了。比如用FreqDist 統計文本詞頻,用bigrams 把文本變成雙詞組的形式:[(word1, word2), (word2, word3), (word3, word4)……(wordn-1, wordn)]。
再之后就可以用這些來計算文本詞語的信息熵、互信息等。
再之后可以用這些來選擇機器學習的特征,構建分類器,對文本進行分類(商品評論是由多個獨立評論組成的多維數組,網上有很多情感分類的實現例子用的就是nltk 中的商品評論語料庫,不過是英文的。但整個思想是可以一致的)。
另外還有一個困擾很多人的Python 中文編碼問題。多次失敗后我總結出一些經驗。
Python 解決中文編碼問題基本可以用以下邏輯:
utf8(輸入) ——> unicode(處理) ——> (輸出)utf8
Python 里面處理的字符都是都是unicode 編碼,因此解決編碼問題的方法是把輸入的文本(無論是什么編碼)解碼為(decode)unicode編碼,然后輸出時再編碼(encode)成所需編碼。
由於處理的一般為txt 文檔,所以最簡單的方法,是把txt 文檔另存為utf-8 編碼,然后使用Python 處理的時候解碼為unicode(sometexts.decode('utf8')),輸出結果回txt 的時候再編碼成utf8(直接用str() 函數就可以了)。
另外這篇文章也有很詳細的講到nltk 的中文應用,很值得參考:http://blog.csdn.net/huyoo/article/details/12188573
1.NLTK
NLTK 在使用 Python 處理自然語言的工具中處於領先的地位。它提供了 WordNet 這種方便處理詞匯資源的接口,以及分類、分詞、詞干提取、標注、語法分析、語義推理等類庫。
網站
http://www.nltk.org/
安裝 NLTK: sudo pip install -U nltk
安裝 Numpy (可選): sudo pip install -U numpy
安裝測試: python then type import nltk
2.Pattern
Pattern 擁有一系列的自然語言處理工具,比如說詞性標注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(sentiment analysis),WordNet。它也支持機器學習的向量空間模型,聚類,向量機。
網站:
https://github.com/clips/pattern
安裝:
pip install pattern
3.TextBlob
TextBlob 是一個處理文本數據的 Python 庫。它提供了一個簡單的 api 來解決一些常見的自然語言處理任務,例如詞性標注、名詞短語抽取、情感分析、分類、翻譯等等。
網站:
http://textblob.readthedocs.org/en/dev/
安裝:
pip install -U textblob
4.Gensim
Gensim 是一個 Python 庫,用於對大型語料庫進行主題建模、文件索引、相似度檢索等。它可以處理大於內存的輸入數據。作者說它是“純文本上無監督的語義建模最健壯、高效、易用的軟件。”
網站:
https://github.com/piskvorky/gensim
安裝:
pip install -U gensim
5.PyNLPI
它的全稱是:Python 自然語言處理庫(Python Natural Language Processing Library,音發作: pineapple) 是一個用於自然語言處理任務庫。它集合了各種獨立或松散互相關的,那些常見的、不常見的、對NLP 任務有用的模塊。PyNLPI 可以用來處理 N 元搜索,計算頻率表和分布,建立語言模型。它還可以處理向優先隊列這種更加復雜的數據結構,或者像 Beam 搜索這種更加復雜的算法。
安裝:
LInux:sudo apt-get install pymol
Fedora:yum install pymol
6.spaCy
這是一個商業的開源軟件。結合了Python 和Cython 優異的 NLP 工具。是快速的,最先進的自然語言處理工具。
網站:
https://github.com/proycon/pynlpl
安裝:
pip install spacy
7.Polyglot(可以做印尼分詞,不過需要安裝包,基於Linux系統)
Polyglot 支持大規模多語言應用程序的處理。它支持165種語言的分詞,196中語言的辨識,40種語言的專有名詞識別,16種語言的詞性標注,136種語言的情感分析,137種語言的嵌入,135種語言的形態分析,以及69種語言的翻譯。
網站:
https://pypi.python.org/pypi/polyglot
安裝
pip install polyglot
8.MontyLingua
MontyLingua 是一個免費的、功能強大的、端到端的英文處理工具。在 MontyLingua 輸入原始英文文本 ,輸出就會得到這段文本的語義解釋。它適用於信息檢索和提取,請求處理,問答系統。從英文文本中,它能提取出主動賓元組,形容詞、名詞和動詞短語,人名、地名、事件,日期和時間等語義信息。
網站:
http://web.media.mit.edu/~hugo/montylingua/
9.BLLIP Parser
BLLIP Parser(也叫做 Charniak-Johnson parser)是一個集成了生成成分分析器和最大熵排序的統計自然語言分析器。它包括命令行和python接口。
10.Quepy
Quepy 是一個 Python 框架,提供了將自然語言問題轉換成為數據庫查詢語言中的查詢。它可以方便地自定義自然語言中不同類型的問題和數據庫查詢。所以,通過 Quepy,僅僅修改幾行代碼,就可以構建你自己的自然語言查詢數據庫系統。
網站
https://github.com/machinalis/quepy
http://quepy.machinalis.com/