私はいくつかのAI/アルゴリズムの調査を行うことに興味があります。だから私は、ハングマンのような単純なアプリケーションを作成するというこのアイデアを持っています。単語を割り当て、いくつかの文字を手がかりとして残します。しかし、ユーザーが単語を推測する代わりに、私が残した手がかりに基づいて、アプリケーションにそれを理解させたいと思っています。誰かが私がどこから始めるべきか知っていますか?ありがとう。
3 に答える
目的の言語の単語のデータベースを作成します(ウィキペディアのダンプのインデックス)。
それはおそらく100万語を超えてはいけません。
次に、データベースにクエリを実行するだけです。
例:fxxulxxs
-> SELECT * FROM T_Words WHERE word LIKE f__ul__s
->素晴らしい
戻りセットに複数の単語がある場合は、統計的に最も使用されている単語を返す必要があります。
別の方法は、nhunspellを調べることです
より分析的に行いたい場合は、語幹、語尾、語尾を相関させる統計的手法、または基本的に単語の類似性の測定値を見つける必要があります。
言語調査によると、始まりと終わりしかないときに単語を簡単に読むことができます。真ん中しかない場合は難しくなります。
ダメラウ・レーベンシュタイン距離(ウィキペディア)など、編集距離を測定するための何らかのアルゴリズムを確認することをお勧めします。これは通常、他の特定の単語に最も近い単語をいくつか見つけるために使用されます。
DNAやタンパク質の配列を処理する際の検索や比較によく使用されますが、あなたの場合にも役立つかもしれません。
最初のステップは、すべての有効な単語を含み、現在のパターンに一致するすべての単語を取得するために簡単に照会できるデータ構造を構築することです。次に、この一致する単語のリストを使用して、次の候補を取得するために最も頻繁な文字を計算できます。別のアプローチは、次に一致する最小の単語セットを与える文字を見つけることです。
next_guess(pattern, played_chars, dictionary)
// find all the word matching the pattern and not containing letters played
// not in the pattern
words_set = find_words_matching(pattern, played_chars, dictionary)
// build an array containing for each letter the frequency in the words set
letter_freq = build_frequency_array(words_set)
// build an array containing the size of the words set if ever the letter appears at least once
// in the word (I name it its power)
letter_power = build_power_array(words_set)
// find the letter minimizing a function (the AI part ?)
// the function could take last two arrays in account
// this is the AI part.
candidate = minimize(weighted_function, letter_freq, letter_power)