使用 NLTK 的 Lemmainser

Lemmainser using NLTK

我目前有这样一句话:

text = "This is a car."

然后我使用一个分词器,然后像这样阻止它:

ps = PorterStemmer()
text = word_tokenize(text)
stemmed_words = []
for w in words:
    stemmed_words.append(ps.stem(w))

但是,我现在希望使用 NLTK 的 lemmainser 来代替它。要使用它,我需要像这样(在循环内)给它词的词性:

lemmatizer = WordNetLemmatizer()
word = lemmatizer.lemmatize(w, pos=pos)

但是,我不确定如何获取 pos 参数。我知道我可以用它来获得演讲的一部分,但这不被接受为一个论点:

pos = nltk.pos_tag(text)

您需要字典才能将 NLTK POS 标签翻译成 WordNet 标签:

pos_translate = {'J':'a', 'V':'v', 'N':'n', 'R':'r'}

现在,提取 POS 标签,翻译每个标签,如果可能(如果不能,选择一个默认标签,比如 "n",然后进行词形还原:

text = ['This', 'is', 'a', 'car', '.']
[lemmatizer.lemmatize(w,\
       pos=pos_translate[pos[0]] if pos[0] in pos_translate else 'n')\
       for w,pos in nltk.pos_tag(text)]
# ['This', 'be', 'a', 'car', '.']