2011-06-17 89 views
2

我寫一個小工具,我想篩選基於搜索的價值最相關的結果:逼近字符串匹配在Ruby中

例如:如果用戶搜索「只是爲了好玩萊納斯」和我的搜索結果如下:

  1. 「只爲女孩」

  2. 「只是爲了好玩:易石班卓琴」

  3. 「只是爲了娛樂:一個意外的革命Linus Torvalds的故事」

我的算法應該給最後一個權重最高。目前我有一個本地算法,它使用soundex匹配賦予權重,但有時失敗。

是否有一個紅寶石寶石,可以給我最好的方式來找到最接近的匹配字符串?我嘗試使用'amatch' - 但它沒有給出正確的匹配權重。

+0

什麼是您的數據庫?如果你使用mysql,那裏有一些內置的函數可以解決這個問題。我相信其他數據庫有類似的東西。 – 2011-06-17 09:13:09

+0

剛剛計數相同的下降單詞怎麼樣? – steenslag 2011-06-17 12:49:57

回答

-1

我發現了一個寶石 - amatch - 這個任務真的很好

+0

我用你的例子嘗試了Amatch包含的所有算法。 「最長的次序」是唯一給予「僅僅爲了樂趣:意外革命的萊納斯·託瓦茲的故事」最高權重的人。沒有任何一個編輯距離的文件('Hamming','Jaro','JaroWinkler','Levenshtein'或'Sellers')。或者'PairDistance'(普通的bigrams除以所有bigrams)或者'LongestSubstring'。 – user495470 2011-10-03 06:30:58