1、公式 :
計算詞頻tf
考慮到文章有長短之分,為了便於不同文章的比較,進行"詞頻"標準化。
或者
計算反文件頻率idf
importosimport
math
import
operator
filepath='
h:/data/allfiles/allfiles
'doc_word =dict()
i=0#
統計每篇文章中的詞頻,及文章總數
for filename in
os.listdir(filepath):
with open(filepath+'
/'+filename,'
r',encoding='
utf-8
') as f:
freq_word =dict()
for line in
f.readlines():
words = line.strip().split('')
if len(words) == ''
:
continue
for word in
words :
if freq_word.get(word,-1) == -1:
freq_word[word] = 1
else
: freq_word[word] += 1doc_word[filename] =freq_word
i += 1
#統計idf
doc_nums =float(i)
doc_freq =dict()
for filename in
doc_word.keys():
for word in
doc_word[filename].keys():
if doc_freq.get(word,-1)==-1:
doc_freq[word]=1
else
: doc_freq[word]+=1
for word in
doc_freq.keys():
doc_freq[word] =math.log(doc_nums/(doc_freq[word]+1))
#tf-idf
for filename in
doc_word.keys():
word_sorted = sorted(doc_word[filename].items(),key=operator.itemgetter(1),reverse=true)
for word in
doc_word[filename].keys():
doc_word[filename][word] = doc_word[filename][word]*doc_freq[word]/float(word_sorted[0][1])
print (doc_word[filename])
自然語言處理 TF IDF演算法提取關鍵詞
這個標題看上去好像很複雜,其實我要談的是乙個很簡單的問題。這個問題涉及到資料探勘 文字處理 資訊檢索等很多計算機前沿領域,但是出乎意料的是,有乙個非常簡單的經典演算法,可以給出令人相當滿意的結果。它簡單到都不需要高等數學,普通人只用10分鐘就可以理解,這就是我今天想要介紹的tf idf演算法。乙個容...
自然語言處理 TF IDF演算法提取關鍵詞
這個標題看上去好像很複雜,其實我要談的是乙個很簡單的問題。這個問題涉及到資料探勘 文字處理 資訊檢索等很多計算機前沿領域,但是出乎意料的是,有乙個非常簡單的經典演算法,可以給出令人相當滿意的結果。它簡單到都不需要高等數學,普通人只用10分鐘就可以理解,這就是我今天想要介紹的tf idf演算法。乙個容...
自然語言處理 關鍵詞提取之TFIDF方法
tf idf terms frequency inverse document frequency 主要思想 如果某個單詞在一篇文章 現的頻率高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。詞頻 term frequency,tf 即乙個詞條在文字 現的頻率。逆...