0

私はスペルチェッカーに取り組んでいます。単語リストを取り込むハッシュテーブルを実装しましたが、次に、可能な単語の提案を生成するために使用される5つの手法を作成する必要があります。それらの1つは

  1. 隣接する文字を入れ替える
  2. 各文字の間に文字を挿入します

例えば:

「bob」という単語があります...(az)b(az)o(az)b(az)の間に文字を挿入して、提案の可能性がある新しい単語を取得できるかどうかを確認したいスペルミスのある単語の場合

これは私がこれまでにしたことです...しかし機能しません

public static void main(String[] args) {
    String word = "evelina";

    char[] wordCharArr = word.toCharArray();

    for(int i=0; i < wordCharArr.length ; i++) {
        //char temp1 = wordCharArr[i];
        for(char j = 'A'; j <= 'Z' ; j++) {
            word.substring(j);
        }
    }
}
4

3 に答える 3

1

私がしたことは、ArrayList (本質的には無制限の配列) を作成するコードを追加し、1 文字を切り替えることで見つかったすべての可能性でそれを埋めることでした。また、それぞれを印刷しますが、それを削除できます。

私が行った唯一の変更は次のとおりです。

1.ArrayListの追加

2.外側のループを修正します。1 文字短い (Bob は 3 回ではなく 4 回の反復を必要とする)

3.単語の残りの部分を考慮して、追加の部分文字列セグメントを追加します。

要素は words.get(a); で取得できます。ここで、「a」は配列リストの境界内の int です。import ステートメント import java.util.*; を忘れないでください。

これは、ジェフのソリューションよりも効率的です。これは、辞書全体をチェックしてから、以下に示すように辞書からすべての要素を削除する代わりに、〜100の可能性すべてで辞書をチェックするだけでよいためです。辞書はアルファベット順であるため、非常に高速に検索できますが、各エントリ (ほぼ 100000 語) を削除すると効率が低下します。

import java.util.*;
public class spellcheck {
public static void main(String[] args) {
    String word = "evelina";
    char[] wordCharArr = word.toCharArray();
    ArrayList<String> words = new ArrayList<String>();
    for(int i=0; i <= wordCharArr.length ; i++) {
        for(char j = 'A'; j <= 'Z' ; j++) {
            words.add(word.substring(0,i) + j + word.substring(i,wordCharArr.length));
    System.out.println(word.substring(0,i) + j + word.substring(i,wordCharArr.length));
        }
    }
}
}
于 2012-08-25T03:17:43.453 に答える
0

あなたの問題はあなたのforループにあります。チェックしている単語の1文字おきにループするだけではありません。あなたはオリジナルを含むすべての手紙をループしています。外側のforループは少し異なるはずです。

于 2012-08-23T21:40:02.340 に答える
0

別のオプションがありますが、実装が簡単か難しいかはわかりません(少なくとも私には簡単に聞こえます)。すべての文字をループして単語に挿入するのではなく、次のような単純なクエリメカニズムを構築できます。

 Input: b?ob

したがって、アルゴリズムは次のようになります。

 1) Start with your entire word list
 2) Remove all words that don't start with b
 3) You can "ignore" the ?
 4) Remove all words that don't have a 'o' in the 3rd position
 5) Remove all words that don't have a 'b' in the 4th position
 6) Return the results

次に、各オプションを実行します

 Input 2: bo?b
 Input 3: bob?
于 2012-08-23T21:46:08.367 に答える