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