0

私は小さなアプリを多かれ少なかれ言葉遊びのようにコーディングしています。ユーザーが作成した単語が有効な英単語であるかどうかを確認するために、その単語を検証する必要があります。私はこれを実装するいくつかの方法を考えました. このようにして、ユーザーの検証時にキーを検索できます。2) Dictionary.com などのサイトに HTTP リクエストを送信して、単語が存在するかどうかを確認します。

HTTPリクエストはこれを実装するための良い方法のように思えますが、最初に入力され、その後定期的にソースから更新されるハッシュマップが必要でした。 HTTP リクエストの実装で。

ソースからの単語でハッシュマップを埋める方法についての指針は大歓迎です。

ありがとう

4

5 に答える 5

1

Web サービスと Big Huge シソーラスを使用できます。これは REST Web サービスであるため、Jersey や RestEasy などのツールが必要になる場合があります。

代替手段は、Oanaware とその SOAP Web サービスです。


資力 :

同じトピックで:

于 2010-08-29T13:14:29.877 に答える
0

1)すべての英単語をキーとして、ブール値を値としてハッシュマップを作成します。このようにして、ユーザーの検証時にキーを検索できます。

AHashMapは、このタスクにはやり過ぎです。単語が存在するかどうかを知る必要があるだけなので、HashSet. すべての単語を に追加した後HashSet、 メソッドを使用してcontains()、単語が に存在するかどうかを確認しますHashSet。ただし、これは大文字と小文字を区別するアプローチであるため、すべての単語の大文字と小文字が同じであることを確認する必要があります (たとえば、"hello" は "Hello" と一致しません)。

また、英語辞書全体をメモリにロードするのがどれほどメモリ集約型になるかはわかりません。問題が発生した場合は、単語が存在するかどうかを確認する必要があるたびに辞書ファイルをスキャンすることをお勧めします。

2) Dictionary.com などのサイトに HTTP リクエストを送信して、単語が存在するかどうかを確認します。

これも機能しますが、(1) コンピューターがアクティブなインターネット接続を持っていること、および (2) Dictionary.com Web サイトが稼働していることに依存しています。

于 2010-08-29T18:02:13.273 に答える
0

単語のハッシュをチェックするだけでは十分ではないと思います。2 つの単語が同じハッシュを持つ場合があります。さらに、文字のランダムなシーケンスは、正しい単語と同じハッシュ値を持つことができます。この2点を考えると、自分の言葉をチェックする(辞書を引く)ことは避けられないと思います。

あなたの辞書を埋める最良の方法が何であるかわかりません。無料の辞書ソフトウェアを見つけて、使用するデータについてライセンスに記載されている内容を確認してください。こういうのを買ったほうが楽だと思います

それがオプションでない場合、オンライン処理は悪いオプションではないと思います。

于 2010-08-29T13:13:29.800 に答える
0

単語リストをダウンロードしてみませんか。WordNet http://wordnet.princeton.edu/wordnet/ 155,287 語のリストと同義語などを使用できます。

または、最初のページに関連するリンクがたくさんある「英単語のリスト」のようなものをグーグルで検索します。

于 2010-08-29T13:13:33.657 に答える
0

単語が辞書に存在するかどうかだけを確認したい場合は、HashSet を使用してみませんか? 各行に単語を含むプレーンテキストの辞書ファイルを使用できます。または、少なくともそれが過去に行ったことです。

更新するかどうかはわかりませんが、dictionary.com が単語リストを含むファイルを提供している場合は、それをダウンロードしてから、ファイルを開いてすべてのエントリをハッシュ マップ/セットに追加できます。単語が削除されないと仮定すると、既存のエントリが上書きされるだけです。

編集:単語をチェックするときにハッシュマップまたはハッシュセットで衝突が問題にならないことを示すテストプログラムを作成しました。

import java.util.HashSet;

public class CollidingHash {
    String value;
    public CollidingHash(String s){
        value=s;
    }
    @Override 
    public int hashCode(){
        return 1;
    }
    @Override 
    public boolean equals(Object o){
        if(! (o instanceof CollidingHash)){
            return false;
        }
        CollidingHash c2 = (CollidingHash)o;
        return value.equals(c2.value);
    }
    public static void main(String[] args) {
        HashSet<CollidingHash> dict = new HashSet<CollidingHash>();
        CollidingHash a = new CollidingHash("This");
        CollidingHash b = new CollidingHash("That");
        dict.add(a);
        System.out.println("Is "+ (dict.contains(b)? "Bad": "OK"));
    }   
}

Edit2: Pace が言及したように equals メソッドを追加しました。

于 2010-08-29T13:14:00.160 に答える