вы могли бы использовать что-то вроде этого
import org.apache.commons.lang.StringUtils;
public class StringComparison {
/**
* @param args
*/
public static void main(String[] args) {
String s1 = "8219 Lime Forest Blvd";
String s2 = "8219 Lime Forst Boulevard";
//number of chars that differ
int distance = StringUtils.getLevenshteinDistance(s1, s2);
//"relative" difference
float d = (float)distance/(float)s1.length();
System.out.println(d);
}
}
getLevenshteinDistance даст вам ряд символов, которые отличаются от s1 до s2.
Я думаю, что более полезно, если вы разделите это число на длину строки (осторожно с делением на ноль) и попробуйте вручную найти сладкое пятно, где разница достаточно мала, чтобы обнаружить тот же адрес (для меня это как правило, около 20 ~ 30%)
Этот пример в JAVA, либерал используется в http://commons.apache.org/proper/commons-lang/index.html
Кроме того, вы могли бы улучшить это только замена известных сокращений и пытается с ними.
Вам понадобится гораздо более точное определение «похожих», прежде чем вы сможете реально получить что-нибудь полезное из этого, я думаю ... Как только вы точно знаете, что ищете, есть много хорошо документированных алгоритмов для такого рода вещей ... – twalberg