目錄
nltk資料下載
import nltk
nltk.download()
其中,download()
參數默認是all,可以在腳本里面加上nltk.download(需要的資料庫)
來進行下載
文本和詞匯
首先,通過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))#查找頻率
詞長可以幫助我們理解作者、文本和語言之間的差異