NLTK 使用列表理解进行词形还原

NLTK Lemmatizing with list comprehension

如何验证我是否在此列表理解中正确使用了 NLTK 词形还原器,特别是它是否考虑了 POS 标签?

clean_article_string = (article_db.loc[0,'clean_text']) # pandas dataframe cell containing string.
tokens = word_tokenize(clean_article_string)
treebank_tagged_tokens = tagger.tag(tokens)
wordnet_tagged_tokens = [(w,get_wordnet_pos(t)) for (w, t) in treebank_tagged_tokens]
lemmatized_tokens = [(lemmatizer.lemmatize(w).lower(),t) for (w,t) in wordnet_tagged_tokens]
print(len(set(wordnet_tagged_tokens)),(len(set(lemmatized_tokens))))
423 384

我正在使用我在 Whosebug 上找到的转换器从 treebank 切换到 Wordnet 令牌,它工作正常。我的问题是对于 lemmatized_tokens 词形还原器是否实际上同时考虑了我的 (w,t) 元组的单词和标签,或者它是否只是查看 w 并基于它进行词形还原(假设一切都是名词)。我试过了...

lemmatized_tokens = [(lemmatizer.lemmatize(w,t)) for (w,t) in wordnet_tagged_tokens]

lemmatized_tokens = [(lemmatizer.lemmatize(w, pos=t)) for (w,t) in wordnet_tagged_tokens]

在 Wordnet 词形还原函数中生成 KeyError: ''。所以最初的代码确实有效,但我不知道它是否使用了 POS 标签。有谁知道 lemmmatizer 是否会在工作代码中考虑它,and/or 如果我可以验证它是什么?

ewcz 在评论中回答。标记为社区维基。这对我有帮助,可能对其他人也有帮助。


你使用 lemmatizer.lemmatize(w),那么它会使用默认的 POS 标签 n,错误表明一些标签是空的 - 在这种情况下,也许可以使用名词的回退,即采用 lemmatizer.lemmatize(w, pos=t if t else 'n')