操作平台:Fedora 22, Python 3.4 (偶爾使用2.7檢視差異)
正式接觸NLTK(Natural Language Toolkit)工具包。
重點學習NLP和NLTK的使用,不過分糾結于Python語言本身。
1. 安裝與下載下傳
在官網上安裝NLTK後,開始下載下傳所需的包。
啟動Python解釋器,執行如下兩行指令:
>>>import nltk
>>>nltk.download()
Python 3.4下在字元界面提示下載下傳或更新相應的包,Python 2.7下是彈出GUI提示相應的操作。
可用from nltk.book import *驗證是否下載下傳成功。
(已下載下傳全部語料,放在/home/annefu/nltk_data下)
2. 搜尋文本
示例文本text1~text9所屬的類為nltk.text.Text(該類是否繼承了list有待查證)。
以下為該類中的一些方法(這些方法對指定詞不區分大小寫):
(1)concordance(word, width=79, lines=25)
顯示指定單詞在文本中的出現情況,同時還顯示了該單詞所在的上下文。
(2)similar(word, num=20)
找到與指定詞出現在相同上下文中的其他詞,優先列出最相似的那些詞。
(3)common_contexts([word1, word2, ...])
顯示共用這些詞彙的上下文。
(4)dispersion_plot([word1, word2, ...])
構造文本的詞彙分布圖。(未成功導入Numpy和Matplotlib,該方法的驗證先擱置)
(5)generate():新版本的NLTK已無此方法。
3. 文本詞彙的統計
(1)BIF len(text)
可用來擷取文本的辨別符個數(辨別符:指代單詞或标點符号)。
(3)BIF sorted(set(text))
去掉文本中重複的元素後,将這些元素排序(标點符号->大寫單詞->小寫單詞)。
詞類型:一個詞在一個文本中獨一無二的出現或拼寫形式。
(3)計算文本詞彙相似度
len(text) / len(set(text))
(4)某個詞在文本中占據的百分比
100* text.count(word) / len(text)
4. 頻率分布
>>>from nltk.probability import *
(1)獲得每個詞在文本中出現的頻率
fdist = FreqDist(text)
v = fdist.keys() #v的類型為,傳回的結果是無序的
list(v)[:50] #将v轉化為清單後再顯示前50項
sorted(fdist.items(), key=lambda fdist: fdist[1], reverse=True) """設定以字典值排序,使頻率從高到低顯示"""
fdist.hapaxes() #顯示低頻詞
5. 詞語搭配和雙連詞
(1)擷取雙連詞
list(bigrams([word1, word2, ....]))
如對于['I', 'love', 'NLP']顯示結果是[('I', 'love'), ('love', 'NLP')]
(2)擷取搭配
搭配:不經常在一起出現的詞序列。特點是其中的詞不能被類似的詞置換。
text.collocations()
6. 一些語言了解技術
(1)詞意消歧(Word Sense Disambiguation)
針對有不同詞意的詞,要分析出特定上下文中的詞被賦予的是哪個意思。
(2)指代消解(Anaphora Resolution)
确定代詞或名詞短語指代的對象。
(3)語義角色标注(Semantic Role Labeling)
确定名詞短語如何與動詞相關聯(如代理,受事,工具,etc.)
(4)自動問答(Question Answering)
NLTK提供了一個原始的對話系統:運作nltk.chat.chatbots()
(5)機器翻譯(Machine Translation)
文本對齊(text alignment):根據兩種語言的文檔或雙語詞典,自動配對組成句子。
*無法使用nltk中的babelizer
(6)文本含義識别(Recognizing Textual Entailment)