在Rails中validation英语词典中的单词?

我做了一些谷歌搜索但找不到我想要的东西。

我正在开发一个拼字游戏类型的单词游戏,并且想知道是否有一种简单的方法来validation玩家在游戏中输入的内容实际上是一个单词。 他们正在打字。

是否针对某种英语语言词典数据库加载了应用程序中解决此问题的最佳方法? 如果是这样,是否有任何提供此类function的库? 如果没有,你会建议什么?

谢谢你的帮助!

你需要两件事:

  1. 单词列表
  2. 一些代码

单词列表是棘手的部分。 在大多数Unix系统上, /usr/share/dict/words/usr/dict/words都有一个单词列表 – 有关详细信息,请参阅http://en.wikipedia.org/wiki/Words_(Unix) 。 我Mac上的那个有234,936个单词。 但它们并非都是有效的拼字游戏。 因此,您必须以某种方式获取Scrabble字典,确保您拥有使用它的正确许可,并处理它以使其成为文本文件。

(更新: LetterPress的单词列表现在是开源的 , 可以在GitHub上找到 。)

在简单的情况下代码没有问题。 这是我刚才掀起的剧本:

 words = {} File.open("/usr/share/dict/words") do |file| file.each do |line| words[line.strip] = true end end p words["magic"] p words["saldkaj"] 

这将输出

 true nil 

我把它作为练习让读者把它变成一个合适的Words对象。 (从技术上讲,它不是一个字典,因为它没有定义。)或者使用DAWG而不是哈希,即使哈希可能适合您的需求。

这里有一条与语言无关的建议是,如果你只关心一个单词的存在(在这种情况下,你这样做),并且你打算将整个数据库加载到应用程序中(你的查询建议你然后, DAWG将使您能够检查O(n)时间复杂度是否存在,其中n是单词的大小(字典大小没有影响 – 整体上查找基本上是O(1)),而是在存储器方面相对最小的结构(事实上,一些插入实际上会减小结构的大小,“顶部,轻敲,轻敲,顶部”的DAWG比“顶部,轻敲”的节点更少。)