Class: KaeruKeyword

Inherits:
Object
  • Object
show all
Defined in:
lib/kaerukeyword.rb

Overview

KaeruKeyword

KaeruKeyword は登録されたキーワードが文中に存在 するかどうかを調べることができます。

インスタンスの作成時にキーワードを登録できます。

keywords = KaeruKeyword.new([“Ruby”, “Rails”])

あとからキーワードを追加することもできます。

keywords << “Tsukasa”

searchメソッドで文中からキーワードを探し出します。 キーワードが見つかったときは、そのキーワードを 含めた配列を返します。

keywords.search(“I Love Ruby”) #=> [“Ruby”]

Copyright 2008 © Tsukasa OISHI, under MIT License.

おおいしつかさ www.kaeruspoon.net

Instance Method Summary collapse

Constructor Details

#initialize(key_array = nil) ⇒ KaeruKeyword

Returns a new instance of KaeruKeyword.



34
35
36
37
# File 'lib/kaerukeyword.rb', line 34

def initialize(key_array = nil)
  @tree = {}
  key_array.each {|k| add(k)} if key_array.is_a?(Array)
end

Instance Method Details

#add(key) ⇒ Object Also known as: <<



39
40
41
42
43
44
45
46
# File 'lib/kaerukeyword.rb', line 39

def add(key)
  now = @tree
  key.split(//).each do |c|
    now[c] = {} unless now.has_key? c
    now = now[c]
  end
  now[:end] = key
end

#search(text) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/kaerukeyword.rb', line 49

def search(text)
  list = []
  word = ""
  now = @tree
  text.split(//).each do |c|
    unless now.has_key? c
      unless word.empty?
        list << word
        word = ""
      end
      now = @tree
    end

    if now.has_key? c
      now = now[c]
      word = now[:end] if now[:end]
    end
  end

  unless word.empty?
    list << word
  end

  list
end