【讀書筆記】《Python自然語言處理》第1章 語言處理與Python
1.1 語言計算:文字和詞彙
入門
nltk下載地址 使用pip安裝
>>>import nltk
檢驗是否成功。
>>>nltk.download()
選擇語料下載
使用python直譯器載入book模組中的條目
>>>from nltk.book import *
輸入名字如 >>>text1
即可找到相應的文字
搜尋文字
搜尋文字中的某個詞 >>>text1.concordance("monstrous")
搜尋文字中與指定詞相似的詞 >>>text1.similar("monstrous")
研究同一文字中的兩個及以上的詞之間的關係 >>>text2.common_contexts(["monstrous","very"])
(可以用來考察兩次的用法是否相似)
根據幾個詞在文字中出現位置的離散圖觀察單詞分佈
>>>text4.dispersion_plot(["citizens","democracy","freedom","duties","America"])
生成文字 >>>text3.generate()
(書中nltk2.0.1版本可用,但是新版本不再支援)
計數詞彙
使用len函式獲取文字長度(包括單詞及標點) >>>len(text3)
獲取無重複的詞彙表 >>>sorted(set(text3))
計算文字詞彙豐富度
>>>from __feature__ import division
>>>len(text3) / len(set(text3))
特定單詞計數 >>>text3.count("smote")
1.2 近觀Python:將文本當做詞連結串列
主要介紹Python中連結串列的相關操作。(略)
1.3 計算語言:簡單的統計
頻率分佈
統計文字中詞的詞頻,降序排列儲存至map中
>>>fdist1 = FreqDist(text1)
>>>vocabulary1 = fdist1.keys()
>>>vocabulary1[:50]
Top50詞頻視覺化 >>>fdist1.plot(50,cumulative=True)
檢視文字中只出現一次的詞 >>>fdist1.hapaxes()
細粒度選擇詞
找出文字中長度超過15的詞 :
>>>V = set(text1)
>>>long_words = [w for w in V if len(w) > 15]
>>>sorted(long_words)
詞語搭配和雙連詞
提取文字詞彙中的詞對
>>>list(bigrams(['more', 'is', 'said', 'than', 'done']))
collocations()
函式在已知單個詞的詞頻基礎上,找到出現頻繁的雙連詞
>>text4.collocations()
計算其他東西
檢視文字中詞長的分佈
>>>fdist = FreqDist([len(w) for w in text1])
>>>fdist.keys()
輸出結果表明text1中最長的詞是由20個字元組成。
>>>fdist.items()
>>>fdist.max()
>>>fdist.freq(3)
由結果可知,文字中長度為3的詞最頻繁,約佔20%。
Examples | Descriptions |
---|---|
fdist = FreqDist(samples) |
建立包含給定樣本的頻率分佈 |
fdist.inc(samples) |
增加樣本 |
fdist['monstrous'] |
計數給定樣本出現的次數 |
fdist.freq('monstrous') |
給定樣本的頻率 |
fdist.N() |
樣本總數 |
fdist.keys() |
以頻率遞減順序排序的樣本連結 |
for sample in fdist: |
以頻率遞減的順序遍歷樣本 |
fdist.max() |
數值最大的樣本 |
fdist.tabulate() |
繪製頻率分佈表 |
fdist.plot() |
繪製頻率分佈圖 |
fdist.plot(cumulative=True) |
繪製累積頻率分佈圖 |
fdist1<fdist2 |
測試樣本在fdist1中出現的頻率是否小於fdist2 |
1.4 回到Python:決策與控制
主要介紹for迴圈與條件語句(略)
1.5 自動理解自然語言
詞義消岐
指代消解 anaphora resolution
自動生成語言
遺憾地發現在nltk3.2裡,書中的babelize_shell()
這個服務也不再提供了。
人機對話系統
>>>import nltk
>>>nltk.chat.chatbots()