2010-10-31 19 views
9

我正在試圖進行自動分類短的文章,我試圖找出如何匹配類似的話 - 比如,擱板式貨架或繪畫和重繪我怎麼可能讓一個搜索匹配類似的話

我使用Porter干擾算法,但它只對某些情況有幫助,只有在詞的結尾(上面的兩個例子都不適用)。

是否有一個算法或相關的單詞列表,將與這樣的幫助(使我自己之外?)

(我在PHP工作,所以在語言的任何解決方案,將更有幫助。)

回答

9

Levenshtein Distance是你在找什麼。

對於任何兩個字符串,它計算將一個字符串更改爲另一個字符串時需要發生的插入,突變和刪除的最小數量。

如果距離很低,那麼這兩個詞是相似的。

您也可以使用Soundex算法來確定兩個單詞是否聽起來相似。

參見:
PHP levenshtein function
PHP soundex function

+1

在這種情況下Levenshtein的一個特殊問題是,你必須找到一個好的門檻;它只返回兩個單詞之間的變化數量。原始帖子中的兩個例子有很大的不同:levenshtein(「shelf」,「shelves」)= 3,levenshtein(「painting」,「repaint」)= 5. – 2010-10-31 17:04:34

+0

僅供參考 - 我發現http ://stackoverflow.com/questions/634995/implementation-of-levenshtein-distance-for-mysql-fuzzy-search其中包含一些鏈接到一些MySQL存儲過程版本。儘管正如Jan所指出的那樣,現在還不清楚它會多麼接近。但值得一試。 – Yehosef 2010-10-31 21:13:38

+0

這是最接近的答案 - 這不是理想的,但一個好的開始。從1月的單詞列表是更理想的,但在這一點上不現實。 – Yehosef 2010-11-11 12:01:19

4

那麼,有所有「相關的單詞列表」的母親,叫共發現:http://wordnet.princeton.edu/

它是免費提供主題的一個相當慷慨的許可證。在「相關項目」部分有一個PHP界面。

與使用單詞相似性算法相比,它的優勢在於它甚至可以知道單詞的不同的同義詞,如「paint」和「color」。缺點是你要麼必須知道正確的同義詞(畢竟,一個詞可能意味着不同的東西),或者你可以得到一個非常狂野的同義詞列表。

+0

哇 - 感謝您的鏈接。我認爲只要瞭解db格式的時間比我對該項目的時間要多,但它似乎是最理想的方式。 – Yehosef 2010-10-31 21:07:13

相關問題