NLTK學習之一 簡單文字分析

2021-08-06 04:06:03 字數 3939 閱讀 4416

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...