Methods for deriving the infinitive forms of conjugated words for the English-language Linguistics module.
Return the infinitive form of the given word
# File lib/linguistics/en/infinitives.rb, line 1034 def infinitive word = self.to_s word1 = word2 = suffix = rule = newword = '' if IRREGULAR_INFINITIVES.key?( word ) word1 = IRREGULAR_INFINITIVES[ word ] rule = 'irregular' else # Build up $prefix{$suffix} as an array of prefixes, from longest to shortest. prefix, suffix = nil prefixes = Hash::new {|hsh,key| hsh[key] = []} # Build the hash of prefixes for the word 1.upto( word.length ) {|i| prefix = word[0, i] suffix = word[i..-1] (suffix.length - 1).downto( 0 ) {|j| newword = prefix + suffix[0, j] prefixes[ suffix ].push( newword ) } } self.log.debug "prefixes: %p" % [ prefixes ] # Now check for rules covering the prefixes for this word, picking # the first one if one was found. if (( suffix = ((INF_SUFFIX_RULE_ORDER & prefixes.keys).first) )) rule = INF_SUFFIX_RULES[ suffix ][:rule] shortestPrefix = INF_SUFFIX_RULES[ suffix ][:word1] self.log.debug "Using rule %p (%p) for suffix %p" % [ rule, shortestPrefix, suffix ] if $DEBUG case shortestPrefix when 0 word1 = prefixes[ suffix ][ 0 ] word2 = prefixes[ suffix ][ 1 ] self.log.debug "For sp = 0: word1: %p, word2: %p" % [ word1, word2 ] if $DEBUG when -1 word1 = prefixes[ suffix ].last + INF_SUFFIX_RULES[ suffix ][:suffix1] word2 = '' self.log.debug "For sp = -1: word1: %p, word2: %p" % [ word1, word2 ] if $DEBUG when -2 word1 = prefixes[ suffix ].last + INF_SUFFIX_RULES[ suffix ][:suffix1] word2 = prefixes[ suffix ].last self.log.debug "For sp = -2: word1: %p, word2: %p" % [ word1, word2 ] if $DEBUG when -3 word1 = prefixes[ suffix ].last + INF_SUFFIX_RULES[ suffix ][:suffix1] word2 = prefixes[ suffix ].last + INF_SUFFIX_RULES[ suffix ][:suffix2] self.log.debug "For sp = -3: word1: %p, word2: %p" % [ word1, word2 ] if $DEBUG when -4 word1 = word word2 = '' self.log.debug "For sp = -4: word1: %p, word2: %p" % [ word1, word2 ] if $DEBUG else raise IndexError, "Couldn't find rule for shortest prefix %p" % shortestPrefix end # Rules 12b and 15: Strip off 'ed' or 'ing'. if rule == '12b' or rule == '15' # Do we have a monosyllable of this form: # o 0+ Consonants # o 1+ Vowel # o 2 Non-wx # Eg: tipped => tipp? # Then return tip and tipp. # Eg: swimming => swimm? # Then return swim and swimm. if /^([^aeiou]*[aeiou]+)([^wx])\22$$/ =~ word2 word1 = $1 + $2 word2 = $1 + $2 + $2 end end end end return Infinitive.new( word1, word2, suffix, rule ) end
Generated with the Darkfish Rdoc Generator 2.