Показывать окружающие слова при поиске определенного слова в текстовом файле (Ruby) - PullRequest
2 голосов
/ 19 апреля 2010

Я очень новичок в рубине. Я пытаюсь найти любой экземпляр слова в текстовом файле (не проблема). Затем, когда слово обнаружено, оно будет отображать окружающий текст (возможно, 3-4 слова до и после целевого слова вместо всей строки), выводить в список экземпляров и продолжать поиск.

Пример:

Быстрая коричневая лиса перепрыгнула через ленивую собаку.

Поисковое слово: прыгнул

Вывод: ... коричневая лиса перепрыгнула через ...

Любая помощь приветствуется.

def word_exists_in_file
   f = File.open("test.txt")
   f.each do line
      print line
      if line.match /someword/
         return true
      end
   end
   false
end

Ответы [ 2 ]

4 голосов
/ 19 апреля 2010
def find_word(string, word)
  r1 = /\w+\W/
  r2 = /\W\w+/
  "..." + string.scan(/(#{r1}{0,2}#{word}#{r2}{0,2})/i).join("...") + "..."
end

string = "The quick brown fox jumped over the lazy dog."

find_word(string, "the")
#=> "...The quick brown...jumped over the lazy dog..."

find_word(string, "over")
#=> "...fox jumped over the lazy..."

Это не идеальное решение, просто путь, так что обходите его.

3 голосов
/ 20 апреля 2010

В Rails есть текстовый помощник с именем excerpt, который делает именно это, поэтому если вы пытаетесь сделать это в представлении Rails:

excerpt('The quick brown fox jumped over the lazy dog',
        'jumped', :radius => 10)
=> "...brown fox jumped over the..."

Если вы хотите использовать это вне Rails (но у вас естьустановленные в Rails гемы) вы можете загрузить ActionView:

require "action_view"
ActionView::Base.new.excerpt('The quick brown fox jumped over the lazy dog',
                                 'jumped', :radius => 10)

=> "...brown fox jumped over the..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...