2013-07-26 15 views
5

Desidero classificare due stringhe come simili o non simili. Per esempioCome calcolare il punteggio di corrispondenza tra due stringhe in java?

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

Sto cercando una libreria Java che può dare un punteggio di corrispondenza tra il 2 stringhe e da quel punteggio posso determinare se sono simili di no. Il mio programma deve solo lavorare su un piccolo set di dati (~ 2000 stringhe). Sai se c'è già qualcosa di disponibile là fuori?

risposta

0

Come suggerito. Levenshtein algoritmo di distanza ...

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

Per tutti i problemi java PNL, si dovrebbe verificare il progetto Apache Lucene. Tuttavia, per il tuo bisogno basta una semplice distanza Levenshtein.

Problemi correlati