2013-06-24 8 views
5

Sorgunun en iyi eşleşmesi için bir String[] numaralı telefona String bakmak istiyorum. Levenshtein Mesafesini duydum. Ama ihtiyacım olup olmadığını belirleyemem. VarsayalımEn Kısa Levenshtein Mesafesi? İhtiyacım var mı?

, ben iyi eşleşme olarak String[] den Example almak istiyorum, Şimdi bir String query = "Examples" ve

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

var.

Bunu yapmak için Levenshtein Mesafesine ihtiyacım var mı? Birisi bana Java için Levenshtein Mesafesinin hızlı bir uygulamasını gösterebilirse, bu harika olurdu. Sahip olduğum tüm dizelerle çalışıp çalışmadığını kontrol etmek istiyorum. (Temelde 10k dizilerden eşleştirmek için yaklaşık 10k dizelerim var.)

+0

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

+0

Levenstein mesafe basitçe eklemek zorunda charactes miktarıdır bir sokmayı diğerine dönüştürmek için/kaldırın/değiştirin. Bu gerçekten maçın kalitesi hakkında bir şey söylemiyor. Örneğin. "örnek" -> "çok popüler sokma operasyonlarının örnekleri" -> 34 ve "örnek" -> "beklenen ampersan dersi" -> mesafe 18. En kısa levenstein mesafesinin her zaman size en iyi eşleşmeyi sağlayacağından şüphe duyuyorum –

+0

@MarcoForberg Yanlışsın, çünkü öyle. – BackSlash

cevap

6

Evet, Levenshtein Distance bunun için goto algoritmasıdır. Sen, Java gibi birçok dilde uygulamaları bulmak şuradan erişebilirsiniz http://rosettacode.org/wiki/Levenshtein_distance

+2

@ marco-forberg'in işaret ettiği gibi, Apache'nin StringUtils'inin bir uygulaması vardır: http://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence, java.lang.CharSequence) yanı sıra 'Jaro Winkler Distance' algoritmasının bir uygulaması, 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