def _morphy(form, pos=NOUN): pos = normalizePOS(pos) section = {NOUN: NOUN, VERB: VERB, ADJECTIVE: ADJECTIVE, ADVERB: ADVERB}[pos] excfile = open(nltk.data.find('corpora/wordnet/%s.exc' % section)) substitutions = MORPHOLOGICAL_SUBSTITUTIONS[pos] dictionary=dictionaryFor(pos) collection=[] def trySubstitutions(form, # reduced form substitutions): # remaining substitutions if dictionary.has_key(form): yield form for n,(old,new) in enumerate(substitutions): if form.endswith(old): new_form = form[:-len(old)] + new for f in trySubstitutions(new_form, substitutions[:n] + substitutions[n+1:]): yield f exceptions = binarySearchFile(excfile, form) if exceptions: forms = exceptions[exceptions.find(' ')+1:-1].split() for f in forms: yield f if pos == NOUN and form.endswith('ful'): suffix = 'ful' form = form[:-3] else: suffix = '' for f in trySubstitutions(form, substitutions): yield f + suffix
def trySubstitutions(form, substitutions, lookup=True, dictionary=dictionaryFor(pos)): if lookup and form in dictionary: return dictionary[form] elif substitutions: (old, new) = substitutions[0] substitute = string.replace(form, old, new) and substitute != form if substitute and substitute in dictionary: return dictionary[substitute] return trySubstitutions(form, substitutions[1:], lookup=False) or \ (substitute and trySubstitutions(substitute, substitutions[1:]))