Ruby: быстрый способ отфильтровать ключевые слова из текста на основе массива слов - PullRequest
1 голос
/ 26 июля 2011

У меня есть большая текстовая строка и около 200 ключевых слов, которые я хочу отфильтровать из текста.

Есть множество способов сделать это, но я застрял на том, какой из них лучший:

1) Используйте цикл for с gsub для каждого ключевого слова

3) Используйте массивное регулярное выражение

Любые другие идеи, что бы вы предложили, ребята

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Массивное регулярное выражение работает быстрее, так как будет проходить текст только один раз.

Также, если вам не нужен текст, только слова, в конце вы можете сделать текст набором слов в нижнем регистре, а затем удалить слова из массива фильтра.Но это работает, только если вам не нужен «текст», чтобы иметь смысл в конце (обычно для тегов или полнотекстового поиска).

0 голосов
/ 26 июля 2011

Создайте хеш с каждым действительным ключевым словом в качестве ключа.

keywords = %w[foo bar baz]
keywords_hash = Hash[keywords.map{|k|[k,true]}]

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

keywords_in_text = text.downcase.scan(/[[:alnum:][-]]{3,}/).select { |word|
  keywords_hash.has_key? word
}.uniq

Это должно быть достаточно эффективным, даже если текст для поиска и список допустимых ключевых слов очень велики.

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