1. 程式人生 > >NLTK學習筆記(一):語言處理和Python

NLTK學習筆記(一):語言處理和Python

1. 列表內容

nltk資料下載**
import nltk
nltk.download()
其中,download() 引數預設是all,可以在腳本里面加上nltk.download(需要的資料庫) 來進行下載

2. 文字和詞彙
首先,通過from nltk.book import * 引入需要的內建9本書
搜尋文字
上下文:Text.concordance(‘monstrous’) ,concordance是一致性的意思。即在Text物件中monstrous出現的上下文
相同上下文單詞:Text.similar(‘monstrous’) ,查詢哪些詞還有相同的上下文 。(比如 the__size 空格上可以是big/small),這個函式會自動找出來並返回。
多個單詞上下文

: Text.common_contexts([‘very’,’monstrous’]) ,返回共用兩個或兩個以上詞彙的上下文
多個單詞頻率繪圖工具: Text.dispersion_plot([‘citizens’,’freedom’]) , 可以得到很好看的離差散點圖
計數詞彙(去重、定位)
不去重的計算用BIF裡面的len() 就可以了:len(text1)
去重計算 需要用到內建結構set: len(set(text1))
可以使用nltk內建BIF:Text.count(word) 查詢單詞出現次數;使用Text.index(word)可以進行定位

詞連結串列
主要是結合python內建list的特點,可以進行連結等一些連結串列操作,十分方便,對於一些基本的list操作,可以自行看文件

自然語言簡單數學統計
頻率分佈
用法:FreqDist(WordList) ,引數可以實List或者其子類,所以 Text(text1,text2…)也可以作為引數。函式返回字典形式,可以呼叫dict.keys() 查詢所有單詞和符號

from nltk import *
fdist = FreqDist(text1)
print(fdist[‘whale’])
可以通過 fdist.plot(TopK,cumulative=True) 畫出來出現頻率前K的詞彙的光滑曲線,去掉第二個引數,是折線圖。個人感覺曲線好看。。。

對於只出現一次的詞彙,通過fdist.hapaxes() 返回的list檢視。

細粒度的選擇詞
細粒度: 細粒度模型,通俗的講就是將業務模型中的物件加以細分,從而得到更科學合理的物件模型,直觀的說就是劃分出很多物件。對於詞彙,我們可能需要長度大於5的不重複詞彙,這就是一個Model

v = set(text1)
long_words = [w for w in v if len(w) > 5]
如果我們需要頻率大於7,長度大於10的呢?

fdist = FreqDist(text1)
long_words = [w for w in set(text1) if len(w)>10 and fdist[w] > 7]
雙連詞和詞彙搭配
雙連詞就是n-gram模型中n=2,組成的詞連結串列

在nltk裡面有BIF,bigrams(wordlist) ,生成詞連結串列
list(bigrams([‘a’,’b’,’c’]))
[(‘a’, ‘b’), (‘b’, ‘c’)]
通過這個詞連結串列,我們可以找到搭配(定義:不經常在一起出現的詞序列).Text.collocations() 可以查找出現頻率比預期頻率更頻繁的雙連詞

text4.collocations()
United States; fellow citizens; four years; years ago; Federal
Government; General Government; American people; Vice President; Old
World; Almighty God; Fellow citizens; Chief Magistrate; Chief Justice;
God bless; every citizen; Indian tribes; public debt; one another;
foreign nations; political parties

詞長分佈
程式碼實現:

fdist = FreqDist([len(w) for w in text1])
print(fdist.items())
print(fdist.freq(3))#查詢頻率