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,pos) in nltk.pos_tag(tokenized) if(pos[:2] == 'VB')]
print(verbs)

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

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

解决方法

pos[:2] 返回 pos 的前 2 个字符,在 VBD 和 VBN 的情况下,它是... VB。如果您想要特定的 POS 标签,只需匹配整个标签即可。

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

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