37 lines
924 B
Ruby
37 lines
924 B
Ruby
|
class DictionaryGenerator
|
||
|
attr_reader :dictionary, :depth
|
||
|
|
||
|
def initialize( depth )
|
||
|
@dictionary = {}
|
||
|
@capitalized_words = []
|
||
|
@depth = depth
|
||
|
@split_words = /(\.\s+)|(\.$)|([?!])|[\s]+/
|
||
|
@split_sentence = /(?<=[.!?])\s+/
|
||
|
end
|
||
|
|
||
|
def add_word_to_dict( keyword, followedby )
|
||
|
@dictionary[keyword] ||= []
|
||
|
@dictionary[keyword] << followedby
|
||
|
end
|
||
|
|
||
|
def insert_text( text )
|
||
|
input_sentences = text.split @split_sentence
|
||
|
|
||
|
if input_sentences.empty? then raise "insert_text called without input" end
|
||
|
|
||
|
unless input_sentences[-1].strip[-1].match /[.!?]/ then
|
||
|
input_sentences[-1] = input_sentences[-1].strip + '.'
|
||
|
end
|
||
|
|
||
|
input_sentences.each do |sentence|
|
||
|
|
||
|
sentence.split(@split_words).each_cons(@depth + 1) do |words|
|
||
|
words = words.collect { |s| s.gsub(/["()]/, "") }
|
||
|
self.add_word_to_dict words[0..-2], words[-1]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|