nltk的全稱是natural language toolkit,是一套基於python的自然語言處理工具集。
nltk的安裝十分便捷,只需要pip就可以。
pip install nltk
在nltk中整合了語料與模型等的包管理器,通過在python直譯器中執行
>>>
import nltk
>>> nltk.download()
nltk.text.text()類用於對文字進行初級的統計與分析,它接受乙個詞的列表作為引數。text類提供了下列方法。
方法作用
text(words)
物件構造
concordance(word, width=79, lines=25)
顯示word出現的上下文
common_contexts(words)
顯示words出現的相同模式
similar(word)
顯示word的相似詞
collocations(num=20, window_size=2)
顯示最常見的二詞搭配
count(word)
word出現的詞數
dispersion_plot(words)
繪製words中文件中出現的位置圖
vocab()
返回文章去重的詞典
nltk.text.textcollection類是text的集合,提供下列方法
方法作用
nltk.text.textcollection([text1,text2,])
物件構造
idf(term)
計算詞term在語料庫中的逆文件頻率,即lo
g總文章
數文中出
現ter
m的文章
數
tf(term,text)
統計term在text中的詞頻
tf_idf(term,text)
計算term在句子中的tf_idf,即tf*idf
下面我們對青春愛情**《被遺忘的時光》做下簡單的分析。首先載入文字:
import ntlk
import jieba
raw=open('forgotten_times.txt').read()
text=nltk.text.text(jieba.lcut(raw))
對於言情**,先看下風花雪月這樣的詞出現的情況
print text.concordance(u'風花雪月')
輸出如下:
>>> displaying2of
2 matches:
彼時 校園 民謠 不復 大熱 了 , 但 處身 校園 , 喜歡 吟唱 風花雪月 的 感性 青年 還是 喜歡 藉此 抒懷 。 邵伊敏 平常 聽 英語歌 較
的 眼睛 看 的 是 自己 , 迷戀 的 卻 多半 只是 少女 心中 的 風花雪月 , 而 迷戀 過後 不可避免 不是 失望 就是 幻滅 。 他 將 目光
再看下作者對於某些同義詞的使用習慣
print text.common_contexts([u'一起',u'一同'])
輸出如下:
>>> 爺爺奶奶_生活 在_時
下面看下文章常用的二詞搭配
text.collocations()
輸出
出入境 管理處; 沃爾沃 xc90; 慢吞吞 爬起來; 沒交過 男朋友; 邵伊敏 回頭一看; 戴維凡 哭笑不得; 沒想到 邵伊敏; 邵伊敏 第二天; 邵伊敏 沒想到
檢視關心的詞在文中出現的位置
text.dispersion_plot([u'校園',u'大學'])
輸出如下圖:
這個類主要記錄了每個詞出現的次數,根據統計資料生成**,或繪圖。其結構很簡單,用乙個有序詞典進行實現。所以dict型別的方法在此類也是適用的。如keys()等。
方法作用
b()返回詞典的長度
plot(title,cumulative=false)
繪製頻率分布圖,若cumu為true,則是累積頻率分布圖
tabulate()
生成頻率分布的**形式
most_common()
返回出現次數最頻繁的詞與頻度
hapaxes()
返回只出現過一次的詞
對歌曲《the day you went away》的歌詞進行分析。
text = open('corpus/the_day_you_went_away.txt').read()
fdist = nltk.freqdist(nltk.word_tokenize(text))
fdist.plot(30,cumulative=true)
**第二行呼叫了word_tokenize()函式,此函式的作用是基於空格/標點等對文字進行分詞,返回分詞後的列表。如果要處理中文,需要三方的分詞器先處理,之後才能使用nltk進行處理。執行輸出分布圖如下:
在nltk.corpus包下,提供了幾類標註好的語料庫。見下表:
語料庫說明
gutenberg
乙個有若干萬部的**語料庫,多是古典作品
webtext
收集的網路廣告等內容
nps_chat
有上萬條聊天訊息語料庫,即時聊天訊息為主
brown
乙個百萬詞級的英語語料庫,按文體進行分類
reuters
路透社語料庫,上萬篇新聞方檔,約有1百萬字,分90個主題,並分為訓練集和測試集兩組
inaugural
演講語料庫,幾十個文字,都是**演說
方法明說明
fileids()
返回語料庫中檔名列表
fileids[categories]
返回指定類別的檔名列表
raw(fid=[c1,c2])
返回指定檔名的文字字串
raw(catergories=)
返回指定分類的原始文字
sents(fid=[c1,c2])
返回指定檔名的語句列表
sents(catergories=[c1,c2])
按分類返回語句列表
words(filename)
返回指定檔名的單詞列表
words(catogories=)
返回指定分類的單詞列表
nlp在獲取語料之後,通常要進行文字預處理。英文的預處理包括:分詞,去停詞,提取詞幹等步驟。中文的分詞相對於英文更複雜一些,也需要去停詞。但沒有提取詞幹的需要。
對於英文去停詞的支援,在corpus下包含了乙個stopword的停詞庫。
對於提取詞詞幹,提供了porter和lancaster兩個stemer。另個還提供了乙個wordnetlemmatizer做詞形歸併。stem通常基於語法規則使用正規表示式來實現,處理的範圍廣,但過於死板。而lemmatizer實現採用基於詞典的方式來解決,因而更慢一些,處理的範圍和詞典的大小有關。
porter = nltk.porterstemmer()
porter.stem('lying') #'lie'
lema=nltk.wordnetlemmatizer()
lema.lemmatize('women') #'woman'
文字分析 NLTK訪問檔案
coding utf 8 from future import division import nltk,re,pprint 從網路和硬碟中訪問文字 1 電子書 2 處理的html 3 處理搜尋引擎的結果 4 讀取本地檔案 5 從pdf,word及其他二進位制格式中讀取 6 捕獲使用者輸入 7 nl...
文字分析入門(一)
今天在圖書館查了不少資料,感覺沒什麼特別好的學習途徑。主要通過部落格,李航的 統計學習方法 相關比賽 來學習。首先還是介紹幾個名詞,乙個新領域總是有很多新名詞。tokenization 將文字轉化為tokens的過程 tokens 在文字裡的展示的單詞或實體 文字分析也好,平時做的資料探勘也好,開始...
linux學習三 awk文字分析工具
awk 是一種處理文字檔案的語言,是乙個強大的文字分析工具。awk 是以檔案的一行內容為處理單位的。awk讀取一行內容,然後根據指定條件判斷是否處理此行內容,若此行文字符合條件,則按照動作處理文字,否則跳過此行文字,讀取下一行進行判斷。condition 條件。若此行文字符合該條件,則按照 acti...