1. 程式人生 > >【讀書筆記】《Python自然語言處理》第1章 語言處理與Python

【讀書筆記】《Python自然語言處理》第1章 語言處理與Python

1.1 語言計算:文字和詞彙

入門

nltk下載地址 使用pip安裝
>>>import nltk 檢驗是否成功。
>>>nltk.download() 選擇語料下載

nltk相關語料

使用python直譯器載入book模組中的條目
>>>from nltk.book import *

nltk.book

輸入名字如 >>>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)
Top50詞頻視覺化

檢視文字中只出現一次的詞 >>>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()

這裡寫圖片描述

這裡寫圖片描述

文字的含義