首页 > 解决方案 > NLTK 词性问题

问题描述

我在使用 NLTK 时遇到了一些问题。我使用了一个词性标签列表,我希望当我使用 VBD 运行这段代码时,我会得到这些词:(浸入、恳求、浸泡)

lines = ("ask, Assemble, assess, dipped, pleaded, soaked, languished, panelized, used, sue, cure, 
lengthen")
tokenized = nltk.word_tokenize(lines)
verbs = [word for (word, pos) in nltk.pos_tag(tokenized) if(pos[:2] == 'VBD')]
print(verbs)

我得到的是:[]

当我运行相同的代码但使用 VB 词性标签时,我希望得到(询问、组装、评估)

lines = ("ask, Assemble, assess, dipped, pleaded, soaked, languished, panelized, used, sue, cure, 
lengthen")
tokenized = nltk.word_tokenize(lines)
verbs = [word for (word, pos) in nltk.pos_tag(tokenized) if(pos[:2] == 'VB')]
print(verbs)

我得到的是:[dipped', 'pleaded', 'soaked', 'languished', 'panelized', 'used]

这个输出是VBN和VBD,不是VB。

标签: pythonnltkpart-of-speech

解决方案


pos[:2]返回 的前 2 个字符pos,对于 VBD 和 VBN,它们是... VB。如果您想要一个特定的 POS 标签,只需匹配整个标签。

verbs = [word for (word, pos) in nltk.pos_tag(tokenized) if(pos == 'VBD')]

仅当您想匹配更通用的标签集时才匹配前几个字符(在这种情况下startswith更习惯用语)。


推荐阅读