2

這是我爲學校做的一項信息檢索工作。計劃是使用該單詞的前兩個字母作爲關鍵字以及將這兩個字母保存爲字符串值的任何單詞創建單詞的哈希表。所以,幫助建立倒排索引

的HashMap [「BA」] =「壞大麥基地」

一旦我做了標記化而行我採取的HashMap,序列化,並將其追加到關鍵命名的文本文件。

這個想法是,如果我把數據分散到數百個文件中,我會減少每個文件的密度以減少搜索的時間。我遇到的問題是,當我在每次運行中製作超過100個文件時,它會因爲任何原因而窒息創建幾個文件,因此這些條目是空的。 有什麼辦法可以讓這個更高效?值得繼續嗎,還是應該放棄它?

我想提一下我正在使用PHP。我比較熟悉的兩種語言是PHP和Java。我選擇了PHP,因爲前端將非常簡單,我可以添加諸如自動完成/建議搜索等功能,而不會出現問題。我也看不到使用Java的好處。任何幫助表示讚賞,謝謝。

+0

會使用數據庫是一個選項嗎? – VolkerK 2010-04-03 10:06:06

+0

不幸的不是。我必須自己編制索引並選擇所有內容。 – tipu 2010-04-07 06:39:12

回答

2

我會使用單個文件來獲取並放入序列化的字符串。我也會使用json作爲序列化。

把數據

$string = "bad barley base"; 
$data = explode(" ",$string); 
$hashmap["ba"] = $data; 

$jsonContent = json_encode($hashmap); 
file_put_contents("a-z.txt",$jsonContent); 

獲取數據

$jsonContent = file_get_contents("a-z.txt"); 
$hashmap = json_decode($jsonContent); 

foreach($hashmap as $firstTwoCharacters => $value) { 
    if ($firstTwoCharacters == 'ba') { 
     $wordCount = count($value); 
    } 
} 
+0

我正在處理一個29MB的txt文件。您不認爲包含json_encode($ hashmap)的單個文件效率不高 – tipu 2010-04-03 05:09:03

+0

您可能會分解到每個字母字符都具有自己的文件的位置。 a.txt,b.txt,c.txt。對於搜索數據是的,這將是稅收。發生添加時,只能寫入a-z.txt。這真的取決於你使用的數據是什麼? – 2010-04-03 05:46:25

0

你沒有說明你正在試圖解決的問題。我猜你正在嘗試創建一個全文搜索引擎,但是你的hashmap中沒有文檔ID,所以我不確定你如何使用HashMap來查找匹配的文檔。

假設你想要一個全文搜索引擎,我會考慮使用trie作爲數據結構。你應該能夠適應一切,而不會變得太大。匹配您要索引的單詞的節點將包含包含該單詞的文檔的ID。

+0

假設我正在製作全文搜索引擎,您絕對正確。我現在正在查看trie數據結構,這比我目前正在做的更有效率(這是我在上面描述的)。我期待着實現這一點,謝謝! – tipu 2010-04-10 09:36:02

+0

轉到這裏http://www.ics.uci.edu/~chenli/pubs.html並查看標題爲Efficient Interactive Fuzzy Keyword Search – jshen 2010-04-12 16:14:33