如何让我的程序猜出正确的单词?

时间:2012-09-08 10:37:33

标签: c# winforms algorithm artificial-intelligence solver

我有兴趣做一些AI /算法探索。所以我有这个想法让一个简单的应用程序像挂人,我分配一个单词并留下一些字母作为线索。但是,不是用户猜测我想让我的应用程序试图根据我留下的线索弄清楚它。有谁知道我应该从哪里开始?感谢。

3 个答案:

答案 0 :(得分:3)

创建所需语言的单词数据库(索引维基百科转储) 这可能不应该超过100万字。

然后您可以简单地查询数据库:

例如:fxxulxxs

- > SELECT * FROM T_Words WHERE word LIKE f__ul__s

- >精彩

如果返回集中有多于1个单词,则需要返回统计上最常用的单词。

另一种方法是看看nhunspell

如果你想更加分析地做,你需要找到一个统计方法来关联词干,结尾和开头,或者基本上是词语相似度的测量。

语言研究表明,只有开始和结束时,您才能轻松阅读单词。如果你只有中间,那就很难了。

enter image description here

答案 1 :(得分:2)

您可能需要查看用于衡量编辑距离的某种形式的算法,例如Damerau-Levenshtein distance (wikipedia)。这通常用于找到与其他给定单词最匹配的几个单词。

在处理DNA和蛋白质序列时,它被用于搜索和比较,但在您的情况下也可能有用。

答案 2 :(得分:0)

第一步是构建一个包含所有有效单词的数据结构,并且可以轻松查询该数据结构以检索与当前模式匹配的所有单词。然后使用此匹配单词列表,您可以计算最常用的字母以获得下一个候选人。另一种方法可能是找到将给出最小的下一个匹配单词集的字母。

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)