Самый простой способ проверить ввод по файлу слов? - PullRequest
1 голос
/ 31 марта 2009

Каков наилучший способ проверки ввода gets по очень длинному списку слов (список всех доступных английских слов)?

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

Ответы [ 4 ]

2 голосов
/ 31 марта 2009

Самый простой способ, но отнюдь не самый быстрый, - это просто каждый раз искать по списку слов. Если список слов находится в массиве:

if word_list.index word
    #manipulate word
end

Если, однако, у вас был список слов в виде отдельного файла (каждое слово в отдельной строке), тогда мы найдем File#foreach, чтобы найти его:

if File.foreach("word.list") {|x| break x if x.chomp == word}
   #manipulate word
end

Обратите внимание, что foreach не удаляет завершающие символы новой строки, поэтому мы избавляемся от них с помощью String#chomp.

2 голосов
/ 31 марта 2009

Вот простой пример использования Set, хотя Марк Джонсон прав, фильтр Блума будет более эффективным.

require 'set'

WORD_RE = /\w+/

# Read in the default dictionary (from /usr/share/dict/words),
# and put all the words into a set
WORDS = Set.new(File.read('/usr/share/dict/words').scan(WORD_RE))

# read the input line by line
STDIN.each_line do |line|
  # find all the words in the line that aren't contained in our dictionary
  unrecognized = line.scan(WORD_RE).find_all { |term| not WORDS.include? term }

  # if none were found, the line is valid
  if unrecognized.empty?
    puts "line is valid"
  else # otherwise, the line contains some words not in our dictionary
    puts "line is invalid, could not recognize #{unrecognized.inspect}"
  end
end
0 голосов
/ 01 апреля 2009

Считать список слов в память и для каждого слова сделать запись в хеш-таблицу:

def init_word_tester
    @words = {}

    File.foreach("word.list") {|word| 
        @words[word.chomp] = 1
    }
end

теперь вы можете просто проверить каждое слово по вашему хешу:

def test_word word
    return @words[word]
end
0 голосов
/ 31 марта 2009

вы читаете список из файла? ты не можешь иметь все это в памяти? возможно пальчиковое дерево может помочь вам если нет, то не более, чем «прочесть кусок данных из файла и выполнить grep в»

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