2013-12-19 46 views
0

我正在研究一個小型項目,該項目將基本上在多個文本文件中搜索用戶給定的單詞。我計劃通過在搜索之前將每個文件散列到大型散列表中來完成此操作,然後散列用戶對單詞的選擇並將其與散列表進行比較。從散列中排除單詞的最有效方法

我的問題是,我想從我的哈希中排除某些常見的詞,如「the」。是我曾經想過做這兩種方式如下:

  1. 創建一個正則表達式基本上是「\ bword1 \ C | \ bword2 \ C |」等等等等,然後做一個String.split(regex,"")從文本中刪除的那些話,我開始散列

  2. 之前,當我處理每一個字,做一個String.matches(regex)檢查,看看是否這個詞屬於我的排除正則表達式話。如果是這樣,只需跳到下一個單詞。

我覺得這兩個解決方案非常相似,我想知道是否有更高效的方法來做到這一點。

+0

不是使用正則表達式,而是將所有要忽略的單詞存儲在「HashSet」或其他O(1)查找數據結構中。然後逐字解析文件,並在進一步處理之前查看它們是否在忽略「Set」中。 'Set'操作*可能*比任何可以製作的正則表達式都要快(但我沒有運行任何實驗來確定)。 – dg99

+0

如果你發現了單詞,你會怎麼做?換句話說,你的密鑰和你的哈希表的價值是什麼(我假設單詞是關鍵) – Mani

+0

@Mani我打算將單詞作爲鍵,並且這些值是列出什麼文件包含單詞 – sven

回答

0

我會建議保留一個HashSet停用詞(這是信息檢索領域的官方術語)。你只需檢查stopwords.contains(word)

讓我也提出一種技術,用於快速搜索文檔中的單詞:倒排索引。不要爲每個文件維護一個hashmap;維護單個哈希映射,其中鍵是單詞,值是包含該單詞的文檔ID集合。

然後,如果要搜索包含兩個給定單詞的所有文檔,只需提取兩個集合並計算它們的交集即可提供該請求。

+0

而不是單詞/一組文檔 - 使用單詞/文檔的多映射 –

+0

@GlennTeitelbaum但是這需要第三方庫。另外,有效的交集要求集合,而典型的multimap使用值列表。 –

+0

@GlennTeitelbaum這是一個小型的學習項目。很明顯,每個人都會使用Lucene。 –

相關問題