Class | Matcher |
In: |
lib/more/facets/matcher.rb
|
Parent: | Object |
Matcher derives from Ruby Quiz #103, the DictionaryMatcher quiz.
word_count | [R] |
Create a DictionaryMatcher with no words in it
# File lib/more/facets/matcher.rb, line 20 def initialize @trie = {} @word_count = 0 end
Add a word to the DictionaryMatcher
# File lib/more/facets/matcher.rb, line 26 def add(word) @word_count += 1 container = @trie containers=[] i=0 word.each_byte do |b| container[b] = {} unless container.has_key? b container[:depth]=i containers << container container = container[b] i+=1 end containers << container container[0] = true # Mark end of word container[:depth]=i ff=compute_failure_function word ff.zip(containers).each do |pointto,container| container[:failure]=containers[pointto] if pointto end self end
Determine whether one of the words in the DictionaryMatcher is a substring of string. Returns a DictionaryMatcher::MatchData object if found, nil if not found.
# File lib/more/facets/matcher.rb, line 92 def match text internal_match(text){|md| return md} nil end
Scans string for all occurrances of strings in the DictionaryMatcher. Overlapping matches are skipped (only the first one is yielded), and when some strings in the DictionaryMatcher are substrings of others, only the shortest match at a given position is found.
# File lib/more/facets/matcher.rb, line 130 def scan(text, &block) matches=[] block= lambda{ |md| matches << md } unless block internal_match(text,&block) matches end