Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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:]))
Exemplo n.º 3
0
 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:]))