一個原始的對話系統的例子,嘗試與 NLTK 的 chatbot 談話

操作平臺: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的類型爲<dict_keys>,返回的結果是無序的

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)


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