使用NLTK進行英文文字的分詞和統計詞頻

2021-10-07 15:02:28 字數 3551 閱讀 8507

去停用詞

統計詞頻

生成英文詞云

先將文件讀入,然後全部變為小寫

txt=

open

("english.txt"

,"r"

).read(

) txt = txt.lower(

)#將英文全部變為小寫

中文分詞需要專門的方法:

英文分詞就可以直接使用word_tokenize()進行分詞

text=

"this is a text for test.and i want to learn how to use nltk."

words = nltk.word_tokenize(text)

#分詞

把不影響詞性的inflection的詞綴砍掉

例如 :walking 砍掉ing=>walk

有三種方式,

lancasterstemmer()和porterstemmer(),snowballstemmer(),比較常用的是 porter 提取演算法

lancaster演算法

from nltk.stem.lancaster import lancasterstemmer

lancaster_stemmer=lancasterstemmer(

)print

(lancaster_stemmer.stem(

'maximum'))

print

(lancaster_stemmer.stem(

'multiply'

))

porter提取演算法

from nltk.stem.poter import porterstemmer

porter_stemmer = porterstemmer(

)print

(porter_stemmer.stem(

'maximum'))

print

(porter_stemmer.stem(

'multiply'

))

snowball提取演算法

from nltk.stem import snowballstemmer

snowball_stemmer=snowballstemmer(

"english"

)print

(snowball_stemmer.stem(

'maximum'))

print

(snowball_stemmer.stem(

'multiply'

))

把單詞的各種形式都歸一,

例如:went 歸一 => go   are 歸一 => be

詞形還原預設單詞是名詞,所以在進行歸一之前,要求手動註明詞性,否則可能會有問題。因此一般先要分詞、詞性標註,再詞性還原。

from nltk.stem import wordnetlemmatizer

wnl = wordnetlemmatizer(

)print

(wnl.lemmatize(

'men'

,'n'))

print

(wnl.lemmatize(

'ate'

,'v'))

print

(wnl.lemmatize(

'saddest'

,'a'

))

使用nltk.pos_tag可以輸出對應詞的詞性

import nltk

text=nltk.word_tokenize(

'what does the beautiful fox say'

)print

(text)

print

(nltk.pos_tag(text)

)

輸出類似與:

(

'sentiment'

,'nn'),

('analysis'

,'nn'),

('challenging'

,'vbg'),

('subject'

,'jj'

),

import nltk

from nltk.corpus import stopwords

word_list=nltk.word_tokenize(

'what does the beautiful fox say'

)#去停用詞

filter_words=

[word for word in word_list if word not

in stopwords.words(

'english')]

print

(filter_words)

去除停用詞後可以進行統計詞頻

使用freqdist(tokens)統計詞頻:

freq_dist = nltk.freqdist(filter_words)

for k,v in freq_dist.items():

print

(str

(k)+

':'+

str(v)

# 把最常見的50個單詞拿出來

standard_freq_vector = freq_dist.most_common(50)

print

(standard_freq_vector)

清除停用詞之後,生成詞云

from wordcloud import wordcloud

import matplotlib.pyplot as plt

wordcloud = wordcloud(

background_color=

"white"

,#設定背景為白色,預設為黑色

width=

1500

,#設定的寬度

height=

960,

#設定的高度

margin=

10#設定的邊緣

).generate(

str(filter_words)

)#清除停用詞後生成詞云

# 繪製

plt.imshow(wordcloud)

# 消除座標軸

plt.axis(

"off"

)# 展示

plt.show(

)# 儲存

wordcloud.to_file(

'my_test2.png'

)

使用nltk進行文字預處理

coding utf 8 import nltk import re import string from nltk.corpus import brown from nltk.book import from nltk.tokenize import wordpuncttokenizer prin...

使用Thuctc進行中文文字分類應用

public static void createmodel int kind,string bootpath public void runclasstrainandtest int kind,double train per,double test per,int symbol 將儲存好的模型拿...

C 統計英文文字中的單詞數並排序

思路如下 1.使用的hashtable 高效 集合,記錄每個單詞出現的次數 2.採用arraylist對hashtable中的keys按字母序排列 3.排序使用插入排序 穩定 public void statisticswords string path hashtable ht new hasht...