2013-07-26 10 views
5

2つの文字列を類似しているかどうかに基づいて分類します。例Javaの2つの文字列の間で一致するスコアを計算する方法は?

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

のために私は2弦の間に、彼らはないの類似している場合、私は判断できるスコアからマッチングスコアを与えることができますJavaライブラリを探しています。私のプログラムは小さなデータセット(〜2000文字列)で作業する必要があります。既に利用可能なものがあるかどうか知っていますか?

答えて

0

スコアマッチングのためのレーベンシュタイン距離を確認してください。 Levenshtein距離アルゴリズム...

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

すべてのNLP Java問題については、Apache Luceneプロジェクトをチェックする必要があります。しかし、あなたの必要性のためには、Levenshteinの距離を含む便利な方法がたくさんあります。

関連する問題