使用nltk和wordnet将复数名词词典化

use*_*er0 3 python nltk wordnet lemmatization

我想用lemmatize

from nltk import word_tokenize, sent_tokenize, pos_tag
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.corpus import wordnet
lmtzr = WordNetLemmatizer()
POS = pos_tag(text)

def get_wordnet_pos(treebank_tag):
        #maps pos tag so lemmatizer understands
        from nltk.corpus import wordnet
        if treebank_tag.startswith('J'):
            return wordnet.ADJ
        elif treebank_tag.startswith('V'):
            return wordnet.VERB
        elif treebank_tag.startswith('N'):
            return wordnet.NOUN
        elif treebank_tag.startswith('R'):
            return wordnet.ADV
        else:
            return wordnet.NOUN
 lmtzr.lemmatize(text[i], get_wordnet_pos(POS[i][1]))
Run Code Online (Sandbox Code Playgroud)

问题是POS标记器得到"procaspases"是'NNS',但是如何将NNS转换为wordnet,因为即使在词形变换器之后"procaspases"仍然是"procaspaseS".

Cha*_*els 5

我可以轻松地使用wordnet.morphy对事物进行词法化:

>>> from nltk.corpus import wordnet
>>> wordnet.morphy('cats')
u'cat'
Run Code Online (Sandbox Code Playgroud)

请注意,procaspases不在WordNet中(但是caspases是,形态将使caspase成为引理),而lemmatizer可能只是无法识别它。如果您在用别的词来形容时没有问题,则可能对实现来说是陌生的。


小智 5

NLTK负责大多数复数,而不仅仅是删除一个结尾.

import nltk
from nltk.stem.wordnet import WordNetLemmatizer

Lem = WordNetLemmatizer()

phrase = 'cobblers ants women boys needs finds binaries hobbies busses wolves'

words = phrase.split()
for word in words :
  lemword = Lem.lemmatize(word)
  print(lemword)
Run Code Online (Sandbox Code Playgroud)

输出:补鞋匠蚂蚁女人男孩需要找到二元爱好公共汽车狼