2013-06-24 63 views
5

爲了查詢的最佳匹配,我想在String[]中查找String。我聽說過Levenshtein距離。但我無法確定我是否需要它。最短Levenshtein距離?我需要它嗎?

想,我有一個String query = "Examples"

String[] arrayStr = new String[] {"The Examples String", "The Example String", "Example", "Examples String", "Example String", "Examplestring"}; 

現在,我想從String[]Example爲最佳匹配。

那麼,我需要Levenshtein Distance來做它嗎?另外,如果有人能指出我快速實現Levenshtein Distance for Java,那就太好了。我想檢查它是否適用於我擁有的所有類型的字符串。 (基本上我有10k左右的串來匹配從10k陣列。)

+0

http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Java – BackSlash

+0

編輯距離僅僅是你必須添加本地字符的數量/刪除/改變一個蜇入另一個。它並沒有真正說明比賽的質量。例如。 「示例」 - >「非常流行的刺痛操作的例子」 - >距離34和「示例」 - >「預期的&符合課」 - >距離18.我懷疑最短的levenstein距離會永遠給你最好的匹配 –

+0

@MarcoForberg你錯了,因爲它是。 – BackSlash

回答

6

是的,Levenshtein距離是這個的goto算法。 你可以找到實現在許多語言,包括Java,在 http://rosettacode.org/wiki/Levenshtein_distance

+2

正如@ marco-forberg所指出的,Apache的StringUtils有一個實現 - docs http: /commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence,java.lang.CharSequence) 以及「Jaro Winkler Distance」算法的實現, http://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#getJaroWinklerDistance(java。 lang.CharSequence,java.lang.CharSequence) – GreyBeardedGeek