我想編寫一個使用字典來獲取tf:idf(ratio?)的腳本。Python 2.7:使用字典創建tf:idf腳本
的想法是有腳本使用os.walk查找目錄中的所有.txt文件和子目錄:
files = []
for root, dirnames, filenames in os.walk(directory):
for filename in fnmatch.filter(filenames, '*.txt'):
files.append(os.path.join(root, filename))
它然後使用列表中找到所有的話多少次它們出現:
def word_sort(filename3):
with open(filename3) as f3:
passage = f3.read()
stop_words = "THE OF A TO AND IS IN YOU THAT IT THIS YOUR AS AN BUT FOR".split()
words = re.findall(r'\w+', passage)
cap_words = [word.upper() for word in words if word.upper() not in stop_words]
word_sort = Counter(cap_words)
return word_sort
term_freq_per_file = {}
for file in files:
term_freq_per_file[file] = (word_sort(file))
它結束了像這樣的詞典:
'/home/seb/Learning/ex15_sample.txt': Counter({'LOTS': 2, 'STUFF': 2, 'HAVE': 1,
'I': 1, 'TYPED': 1, 'INTO': 1, 'HERE': 1,
'FILE': 1, 'FUN': 1, 'COOL': 1,'REALLY': 1}),
在我的腦海裏這給我每個文件的詞頻。
我該如何去尋找真正的tf?
如何查找idf?
通過TF我的意思是詞頻,它是一個字(項)出現了多少次的文檔
TF(T)的=(次項t號碼出現在文檔中)/(總數文件中的術語)。
而以色列國防軍我的意思是倒排文檔頻率,其中文檔頻率是在這個詞多少文檔出現
IDF(T)= log_e(文檔總數/與它項t的文檔數) 。
爲了澄清,我的問題是如何提取這些值並將它們放入公式中,我知道它們在那裏,但我不知道如何提取它們並進一步使用它們。
我已決定把在哪些文件已經用這個詞包含另一個字典,因爲這樣的:通過第一字典這樣的迭代
{word : (file1, file2, file3)}
:
for file in tfDic:
word = tfDic[file][Counter]
for word in tfDic:
if word not in dfDic.keys():
dfDic.setdefault(word,[]).append(file)
if word in dfDic.keys():
dfDic[word].append(file)
問題出在這條線上:
word = tfDic[file][Counter]
我認爲它會'導航'它的單詞,但我注意到,單詞是計數器字典中的鍵是tfDic(文件)的值。
我的問題是,如何告訴它遍歷單詞(「計數器」字典的鍵)?
你可以解釋你所期望的'tf'得更爲清晰和'idf'是,什麼他們對你來說意味着...... – 2014-08-27 14:01:39
他們是用某些詞加權的嗎? – 2014-08-27 14:03:14
通過查看字典,您已經擁有了「文檔中出現次數t的次數」,「文檔總數」和「文檔數量t」。那麼您的問題是:「如何獲得文檔中的術語總數?」? – Kevin 2014-08-27 14:15:48