天天看點

python和nltk自然語言處理書評_Python自然語言處理學習筆記(一)

操作平台: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)