3

しきい値が指定された単語に一致するライブラリが必要です。スペルが間違っているか、別の単語のリーツピークのバリエーションです。たとえば、次のようAntoineに一致します。

4ntoine
4toine
antoine
4t01n3
titoine
entoine
a n t o i n e

など。この問題にどのように取り組むことができますか?

4

3 に答える 3

0

提案されているように、Levenstein またはトライグラムも試すことができます。http://en.m.wikipedia.org/wiki/Trigram_search

于 2013-01-02T09:49:16.913 に答える
0

Jazzyを使用してみることができます。これはもともと IBM によって開発されたもので、あまり維持されていないように見えました。

現在の状況はわかりませんが、達成しようとしていることに近いことを行うためにそれをうまく使用しました. ただし、それで l33t を処理できるかどうかはわかりません。

こちらのリンクもチェック

于 2013-01-02T09:12:39.900 に答える
0

レーベンスタイン距離が役立つ場合がありますが、最初に AMHO にいくつかのヒューリスティック ルールが適用される場合があります。

以下のプログラムを体験してください。

public class LevenshteinDistance
{
   public static int computeDistance( String s1, String s2 )
   {
      s1 = s1.toLowerCase();
      s2 = s2.toLowerCase();
      int[] costs = new int[s2.length() + 1];
      for( int i = 0; i <= s1.length(); i++ )
      {
         int lastValue = i;
         for( int j = 0; j <= s2.length(); j++ )
         {
            if( i == 0 ) {
               costs[ j ] = j;
            }
            else
            {
               if( j > 0 )
               {
                  int newValue = costs[ j - 1 ];
                  if( s1.charAt( i - 1 ) != s2.charAt( j - 1 ) ) {
                     newValue =
                        Math.min(
                           Math.min( newValue, lastValue ),
                           costs[ j ] ) + 1;
                  }
                  costs[ j - 1 ] = lastValue;
                  lastValue = newValue;
               }
            }
         }
         if( i > 0 ) {
            costs[ s2.length() ] = lastValue;
         }
      }
      return costs[ s2.length() ];
   }

   public static void main(String[] args) {
      String ref = "Antoine";
      String[] samples = {
         "4ntoine", "4ntoine", "antoine", "4nt01n3", "titoine", "entoine",
         "a n t o i n e" };
      for( String sample : samples ) {
         System.out.printf( "| %s | %-20s | %4d |\n",
            ref, sample, computeDistance( ref, sample ));
      }
   }
}

結果:

| Antoine | 4ntoine              |    1 |
| Antoine | 4ntoine              |    1 |
| Antoine | antoine              |    0 |
| Antoine | 4nt01n3              |    4 |
| Antoine | titoine              |    2 |
| Antoine | entoine              |    1 |
| Antoine | a n t o i n e        |    6 |

ご覧のとおり、最後の単語を前処理して空白を削除し、4 番目の単語を前処理して 3 を E に、4 を A に置き換える必要があります。

于 2013-01-02T09:12:52.707 に答える