2013-07-26 4 views
5

Я хочу классифицировать две строки как похожие или не похожие. НапримерКак рассчитать совпадение между двумя строками в java?

s1 = "Token is invalid. DeviceId = deviceId: "345" " 
s2 = "Token is invalid. DeviceId = deviceId: "123" " 
s3 = "Could not send Message." 

Я ищу библиотеку Java, которая может дать соответствующий счет между 2 строки и с этого балла я могу определить, если они похожи на нет. Моя программа должна работать только с небольшим набором данных (~ 2000 строк). Вы знаете, есть ли что-то уже доступное там?

ответ

0

Как было предложено. Левенштейновский алгоритм расстояния ...

public class LevenshteinDistance 
{ 
    private static int minimum(int a, int b, int c) 
    { 
     return Math.min(Math.min(a, b), c); 
    } 

    public static int computeLevenshteinDistance(CharSequence str1, CharSequence str2) 
    { 
     int[][] distance = new int[str1.length() + 1][str2.length() + 1]; 

     for (int i = 0; i <= str1.length(); i++) 
      distance[i][0] = i; 
     for (int j = 1; j <= str2.length(); j++) 
      distance[0][j] = j; 

     for (int i = 1; i <= str1.length(); i++) 
      for (int j = 1; j <= str2.length(); j++) 
       distance[i][j] = minimum(distance[i - 1][j] + 1, 
             distance[i][j - 1] + 1, 
             distance[i - 1][j - 1] + ((str1.charAt(i - 1) == str2.charAt(j - 1)) ? 0 : 1)); 

     return distance[str1.length()][str2.length()]; 
    } 

    public static void main(String[] args) 
    { 
     String s1 = "Token is invalid. DeviceId = deviceId: \"345\" "; 
     String s2 = "Token is invalid. DeviceId = deviceId: \"123\" "; 
     String s3 = "Could not send Message."; 

     System.out.println(computeLevenshteinDistance(s1, s2)); // s1 VS. s2 
     System.out.println(computeLevenshteinDistance(s1, s3)); // s1 VS. s3 
     System.out.println(computeLevenshteinDistance(s2, s3)); // s2 Vs. s3 

    } 
} 
1

Для всех проблем с Java-интерфейсом NLP вы должны проверить проект Apache Lucene. Тем не менее, для вашей потребности достаточно простое дистанционное слово Левенштейна