NLTK WordNetLemmatizer:未实现预期的

时间:2018-06-22 17:30:29

标签: python nltk

我正在尝试使用NLTK的WordNetLemmatizer对句子中的所有单词进行词法化。我有一堆句子,但只是使用第一句话来确保我正确地做到了。这是我所拥有的:

train_sentences[0]

"Explanation Why edits made username Hardcore Metallica Fan reverted? They vandalisms, closure GAs I voted New York Dolls FAC. And please remove template talk page since I'm retired now.89.205.38.27"

所以现在我尝试如下对每个词进行词素化:

lemmatizer = WordNetLemmatizer()
new_sent = [lemmatizer.lemmatize(word) for word in train_sentences[0].split()]
print(new_sent)

然后我回来:

['Explanation', 'Why', 'edits', 'made', 'username', 'Hardcore', 'Metallica', 'Fan', 'reverted?', 'They', 'vandalisms,', 'closure', 'GAs', 'I', 'voted', 'New', 'York', 'Dolls', 'FAC.', 'And', 'please', 'remove', 'template', 'talk', 'page', 'since', "I'm", 'retired', 'now.89.205.38.27']

几个问题:

1)为什么“编辑”不转换为“编辑”?诚然,如果我lemmatizer.lemmatize("edits")回来了,edits却让我感到惊讶。

2)为什么“故意破坏”没有转变为“故意破坏”?这是非常令人惊讶的,因为如果我lemmatizer.lemmatize("vandalisms"),我会回来vandalism ...

任何说明/指导都很棒!

2 个答案:

答案 0 :(得分:2)

TL; DR

首先标记句子,然后使用POS标记作为用于词法化的附加参数输入。

unrelated histories

有关如何以及为何需要POS标签的详细演练,请参见https://www.kaggle.com/alvations/basic-nlp-with-nltk


或者,您可以使用from nltk import pos_tag from nltk.stem import WordNetLemmatizer wnl = WordNetLemmatizer() def penn2morphy(penntag): """ Converts Penn Treebank tags to WordNet. """ morphy_tag = {'NN':'n', 'JJ':'a', 'VB':'v', 'RB':'r'} try: return morphy_tag[penntag[:2]] except: return 'n' def lemmatize_sent(text): # Text input is string, returns lowercased strings. return [wnl.lemmatize(word.lower(), pos=penn2morphy(tag)) for word, tag in pos_tag(word_tokenize(text))] lemmatize_sent('He is walking to school') 标记器+ lemmatizer,这是NLTK pywsd的包装:

安装:

WordNetLemmatizer

代码:

pip install -U nltk
python -m nltk.downloader popular
pip install -U pywsd

(主持人的注意:我不能将此问题标记为nltk: How to lemmatize taking surrounding words into context?的重复项,因为那里不接受答案,但它是重复项)。

答案 1 :(得分:1)

  1. nltk community确实可以回答这一点。
  2. 发生这种情况是由于,末尾的vandalisms,。要删除此结尾的,,可以使用.strip(',')或使用多行定界符{{3} }。