在Rails中验证英语词典中的单词?

dar*_*rog 8 ruby dictionary ruby-on-rails

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

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

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

谢谢你的帮助!

Ale*_*fee 14

你需要两件事:

  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"]
Run Code Online (Sandbox Code Playgroud)

这将输出

true
nil
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*nna 2

这里的一个与语言无关的建议是,如果您只关心一个单词的存在(在这种情况下,您确实这样做),并且您计划将整个数据库加载到应用程序中(您的查询建议您这样做)正在考虑)那么DAWG将使您能够以 O(n) 时间复杂度检查是否存在,其中 n 是单词的大小(字典大小没有影响 - 总体查找本质上是 O(1)),同时是在内存方面相对最小的结构(事实上,一些插入实际上会减少结构的大小,“top,tap,tap,tops”的 DAWG 的节点比“tops,tap”的节点少)。