Проверять слова по английскому словарю в Rails? - PullRequest
8 голосов
/ 13 августа 2010

Я провел поиск в Google, но не смог найти то, что искал.

Я занимаюсь разработкой словесной игры типа скрэббл в рельсах, и мне было интересно, есть ли простой способ проверить, что вводимые игроком слова на самом деле являются словом. Они будут печатать слово.

Является ли проверка данных по базе данных словаря английского языка, загруженной в приложение, лучшим способом решения этой проблемы? Если так, есть ли библиотеки, которые предлагают такую ​​функциональность? Если нет, что бы вы предложили?

Спасибо за вашу помощь!

Ответы [ 2 ]

13 голосов
/ 14 августа 2010

Вам нужно две вещи:

  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

Я оставляю это упражнение для читателя, чтобы превратить его в надлежащий объект Слова. (Технически это не словарь, поскольку у него нет определений.) Или использовать DAWG вместо хеша, даже если хеш, вероятно, подходит для ваших нужд.

2 голосов
/ 13 августа 2010

В данном случае совет, не зависящий от языка, заключается в том, что если вы заботитесь только о существовании слова (что в таком случае вам нужно), и планируете загрузить всю базу данных в приложение (которое запрос предполагает, что вы рассматриваете), тогда DAWG позволит вам проверить существование в O (n) сложности времени, где n - размер слова (размер словаря не имеет никакого эффекта - в целом поиск по существу O (1)), хотя и является относительно минимальной структурой с точки зрения памяти (действительно, некоторые вставки фактически уменьшат размер структуры, у DAWG для «top, tap, taps, tops» меньше узлов, чем для «top» коснитесь ").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...