2014-08-29 26 views
0

我寫了一個小型「搜索工具」,可以找到目錄及其子目錄中的所有文本文件 - 我可以編輯代碼,但我認爲這對於我的題。Python 2.7:堅持搜索和索引

它的工作原理是這樣的格式製作詞典:

term_frequency = {'file1' : { 'WORD1' : 1, 'WORD2' : 2, 'WORD3' : 3}} 
       {'file2' : { 'WORD1' : 1, 'WORD3' : 3, 'WORD4' : 4}} 
       ...continues with all the files it has found... 

從收集到的信息會創建第二個字典像這樣:

document_frequency = {'WORD1' : ['file1', 'file2'....], 
         'WORD2' : ['file1',............], 
         ....every found word..........]} 

term_frequency dictionary的目的是爲了保持數據一個單詞在該文件中被使用了多少次,並且document_frequency表示該單詞已被使用了多少個文檔。

然後,當給出一個單詞時,它按tf/df計算每個文件的相關性,並列出文件的下降相關性中的non-zero值。

例如:

file1 : 0.75 
file2 : 0.5 

我知道,這是TF-IDF的一個非常簡單的表現,但我是新來的Python和編程(2周),我逐漸熟悉了這一切。

對不起長上下的前奏,但我覺得這是相關的問題......這使我對想:

我如何去製作,在一個文件中保存這些詞典的索引和然後讓一個「搜索者」從文件中讀取這些字典。因爲現在的問題是,每當你想尋找一個不同的單詞時,它必須再次讀取所有文件,並且一遍又一遍地製作相同的2個字典。

+1

我認爲你正在尋找['pickle'(HTTPS: //docs.python.org/2/library/pickle.html)你的字典。 – will 2014-08-29 15:44:51

+0

@will啊,我不知道爲什麼,但我無法訪問'docs.python'上的任何頁面,我的互聯網運行得非常好,它只是討厭那個wesbite ...太令人沮喪了:/ – Sebastian 2014-08-29 15:47:35

+1

糟糕。好吧,看起來我被毆打了。抱歉。 – Phillammon 2014-08-29 15:48:06

回答

1

The pickle (and for that matter cPickle)圖書館是你的朋友在這裏。通過使用pickle.dump(),可以將整個字典轉換爲一個文件,以後可以通過pickle.load()讀回。

在這種情況下,你可以使用這樣的事情:

import pickle 
termfile = open('terms.pkl', 'wb') 
documentfile = open('documents.pkl', 'wb') 
pickle.dump(term_frequency, termfile) 
pickle.dump(document_frequency, documentfile) 
termfile.close() 
documentfile.close() 

和讀回,像這樣:

termfile = open('terms.pkl', 'rb') 
documentfile = open('documents.pkl', 'rb') 
term_frequency = pickle.load(termfile) 
document_frequency = pickle.load(documentfile) 
termfile.close() 
documentfile.close() 
+0

我會嘗試和它一起玩,謝謝 – Sebastian 2014-08-29 15:52:42

+0

我已經實現了代碼,第一部分完美工作,但是當我嘗試在另一個腳本中加載字典時,它返回一個EOF錯誤,我不知道爲什麼 – Sebastian 2014-09-01 10:35:55

+0

nvm,解決它,謝謝一堆 – Sebastian 2014-09-01 10:46:48