Проверить слова против английского словаря в направляющих?

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

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

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

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

8
задан dartfrog 13 August 2010 в 00:32
поделиться

2 ответа

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

2
ответ дан 5 December 2019 в 10:38
поделиться

Вам понадобятся две вещи:

  1. список слов
  2. некоторый код

Список слов - сложная часть.В большинстве систем Unix есть список слов по адресу / usr / share / dict / words или / usr / dict / words - см. http: //en.wikipedia. org / wiki / Words_ (Unix) для получения более подробной информации. На моем Mac 234 936 слов. Но это не все подходящие слова Scrabble. Таким образом, вам придется каким-то образом приобрести словарь 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 вместо хеша, даже если хеш, вероятно, подходит для ваших нужд.

14
ответ дан 5 December 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: