2011-07-27 29 views
2

我想統計一些給定的單詞或短語出現在文本中的次數,但我想使用一些字符串相似度算法。我如何計算文本中的單詞和表達式?

每個單詞或表達具有價值,所以我會根據找到的詞數等

設置文本的相關性我想,從Java String類不能提供這一點。我需要遍歷每一個我想查找的單詞或表達式的所有文本?

是否有文本處理庫?

示例:查找具有「視頻遊戲」,「我有視頻遊戲」等文字,評估類似的表情。我猜如果我爲每個需要評估的單詞或表達式迭代,我找不到類似的單詞,它會變得更慢。

+0

的相關性只是一個分析的第一部分提取文本中的信息,而不是搜索引擎。 –

回答

1

但我想使用一些字符串相似度算法。

看看Lucene。允許您索引一些文本並使用相似性算法查找作品。我認爲你想分割每個單詞並使用lucene索引它們。然後,對於您感興趣的所有單詞,您都可以搜索索引。你可以做一些事情,如Automobile~這將做一個模糊搜索。這裏是一個粗略的算法:

for each word in STRING.split(' ') 
    index word 

for each word in your list 
    search for word and look for number of occurrences 
+0

如果你給我更多的細節,我可能會幫助你。 –

+0

目前,我可以對可以包含電影信息的頁面進行排名。如果某些詞或表達式,該頁面可以包含關於電影的信息。如果在正文中,一些相關性,如果在keyowrds中,另一個相關性,如果在標題中,另一個,如果在URL中,另一個等等...... –

+0

這樣的聲音正是你想要的。我已經將lucene與頁面抓取工具結合使用來索引文本。還建議使用jsoup來解析html。 –

0

你在找什麼是porbably一個倒置文件數據結構。我在數據庫課上學到了這一點,這裏是講座的鏈接。

http://dl.dropbox.com/u/8950924/16Sp11-Search.pdf

基本上想法是有一個地圖數據結構

Map<String, List<Document>> invertedIndex; 

其中字符串是單詞和List<Document>是包含這個詞的文件。

如果您仔細閱讀該pdf文檔,您甚至可以找到排序文檔的方法。

1

Denniss說的倒排索引就是你要找的。如果你想要一個強大的引擎,你需要很好地定義你的文檔。

對於詞組匹配,您的文檔應具有該文檔中單詞(該鍵的鍵)的位置。一旦你找到了你要找的所有單詞,就可以知道這些單詞是否在原始文檔中。

例如:

doc1: "Hello World" 
doc2: "Hello Beautiful World" 

inverted index { 
    "Beautifull": [(doc2, 2)], 
    "Hello": [(doc1, 1)(doc2, 1)], 
    "World": [(doc1, 2)(doc2, 3)], 
} 

query: "Hello World" 

兩個文件有話 「你好」 和 「世界」,但DOC1具有在一起(位置1和2)和DOC2不(位置1和3)。

如果你想找到類似的話,你需要一個新的結構。首先,你需要定義什麼是相似的。 Levenshtein distance是你需要的。

要實施它,您需要一個像自動機一樣的全新結構:Levenshtein automaton

全文搜索是一個巨大的領域。實現一個搜索引擎很困難,許多庫和應用程序已經做到了。

(我的Indextank.com工作實時的全文搜索引擎。如果你需要在一兩分鐘運行一個搜索引擎,我們嘗試了)

+1

有一點,它不適用於搜索引擎。一點也不。這是頁面分析,一個機器人下載。首先分析單詞和短語將根據我想要從文本中檢索的主題(當時,電影)設置相關性。因此,具有電影,導演,製片人和演員的頁面具有比不具有頁面的頁面更多的機會這個。 –

+0

@Renato:正如Leandro所說,倒序索引就是你要找的,[Lucene](http://lucene.apache.org/)等開源項目將會有很大的幫助。 – pengdu

+0

嗯...我已經意識到,根據這些評論我的答案可能是錯誤的。我會寫另一個可能更有幫助。 – Leandro

相關問題