2017-07-29 4 views
0

J'essaie de lemmater des mots dans un texte. Comme par exemple 'décapés' devrait se tourner vers 'cornichon', 'couru' à 'run', 'raisins secs' à 'raisin sec', etc.Le lemmatiseur wordnet de Nltk ne lemme pas tous les mots

J'utilise WordNet Lemmatizer de NLTK comme suit:

from nltk.stem import WordNetLemmatizer 
>>> 
>>> lem = WordNetLemmatizer() 
>>> print(lem.lemmatize("cats")) 
cat 
>>> print(lem.lemmatize("pickled")) 
pickled 
>>> print(lem.lemmatize("ran")) 
ran 

Ainsi, comme vous pouvez le voir pour 'pickled' et 'ran', la sortie ne se produit pas comme prévu. Comment obtenir 'pickle' et 'run' pour ceux-ci sans avoir à spécifier 'v' (verbe) etc pour les mots.

+0

Que diriez-vous [POS tagging] (http://www.nltk.org/api/nltk.tag.html#nltk.tag.pos_tag)? – lenz

Répondre

1

Vous pouvez obtenir la forme de base de la fonction lemmatize() pour un nom ou un verbe en obtenant le résultat le plus courant de la fonction entre le passage d'un paramètre 'v' ou 'n' et rien qui passe.

pas un moyen direct de le faire, mais vous pouvez essayer le code suivant pour obtenir la forme de base d'un nom ou un verbe:

def most_common(lst): 
    return max(set(lst), key=lst.count) 
words = ['ran','pickled','cats',"crying","died","raisins","had"] 
for word in words: 
    checkList=[WordNetLemmatizer().lemmatize(word,'v'),WordNetLemmatizer().lemmatize(word,'n'),WordNetLemmatizer().lemmatize(word,'n')] 
    print most_common(checkList) 

Vous obtenez la forme de base:

ran 
pickled 
cat 
cry 
died 
raisin 
had 
+0

Comme je l'ai mentionné, je ne veux pas intput 'v', parce que c'est un texte énorme et je ne peux pas le faire pour chaque mot. Ou probablement y a-t-il un moyen? – akrama81

+0

Fait une mise à jour à la réponse. J'espère que cela fonctionne pour vous – Sriram