文字列のアナグラムを作成する方法を考え出すことはできますが、それらを実際の単語の辞書と比較して、アナグラムが実際の単語であるかどうかを確認する方法がわかりません。英語辞書全体を含む Java API のクラスはありますか?
5 に答える
いいえ、しかし、単語リストはさまざまな場所から入手できます。そこから、wordlist ファイルをリストに読み込むことができます。
List<String> lines = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader("wordlist.txt"));
String line = null;
while (null!=(line=in.readLine()))
{
lines.add(line);
}
in.close();
最後に、候補単語のバイナリ検索を使用します。lines.contains()
文字のセットが単語のアナグラムであるかどうかを判断する方法の 1 つは、素数を使用することです。a=2、b=3、c=5、d=7 のように、各文字に素数を割り当てます。次に、辞書内の各単語の素数の積を事前計算します。たとえば、'add' = 2*7*7 = 98、または 'bad' = 3*2*7 = 42 です。
文字セットが辞書内の任意の単語のアナグラムであるかどうかを判断するには、文字セットの値を計算します。たとえば、文字 'abd'= 2*3*7 = 42 = 'bad' です。文字の計算値が事前計算された辞書に存在するかどうかを確認するだけです。どのアナグラムでも、考えられるすべてのアナグラムを生成しようとするのではなく、この計算を 1 回行うだけで済みます。ただし、この方法は比較的小さな単語に対してのみうまく機能することに注意してください。そうしないと、オーバーフローの問題が発生し、BigInteger を使用する必要があります。
いいえ、 JWNLなどの外部ライブラリを使用する必要があります。これは WordNet のラッパーです。これは、意味ごとに編成された機械可読語彙データベースであり、ほぼすべての英語の単語が含まれています。
Jazzyの英語辞書が役立つかもしれません。