Verbnet : vn.classids() returns 2 个列表,但我需要删除其中的 1 个
Verbnet : vn.classids() returns 2 lists but I need to remove 1 of them
metaphor1 = " I run a race"
from nltk.corpus import verbnet as vn
for word in metaphor1.split():
if vn.classids(word) != []:
start = set(vn.classids(word))
print (start)
上面的代码会打印出来
['meander-47.7', 'preparing-26.3-1', 'run-51.3.2', 'swarm-47.5.1-1']
['run-51.3.2']
第一个是 "run" 的所有动词含义列表,但第二个列表是给出句子中使用的含义的列表。我想删除第一个列表,我尝试使用
metaphor1 = " I run a race"
from nltk.corpus import verbnet as vn
for word in metaphor1.split():
if vn.classids(word) != []:
start = set(vn.classids(word))
remove = set(vn.classids('run'))
final = list(set(vn.classids(word))-set(vn.classids('run')))
print (final)
然而这 returns
[]
[]
到底是什么导致了这个问题,我该如何解决。
循环return是一个空列表,[]
,因为一个集合与其自身的对称差是一个空集。
您想删除同义词集的第三个元素,run-51.3.2
。您错误地将变量 remove
分配给了 run
的整个同义词集,而不仅仅是一个元素。
试试这个
import nltk
metaphor1 = STRING HERE
for word,pos in nltk.pos_tag(nltk.word_tokenize(metaphor1):
if 'V in pos: #Another way to focus on only verbs
return [sense for sense in vn.classids(word) if 'run' not in sense]
我用pos_tag
来表示明确的动词。 VerbNet 可能 return 一个空列表,即使该词不在 VerbNet 数据库中,即使该词用作动词。
我使用 word_tokenize
使代码更通用。
代码return是一个列表。如果您只想将变量打印到控制台,请将 return
更改为 print
。
metaphor1 = " I run a race"
from nltk.corpus import verbnet as vn
for word in metaphor1.split():
if vn.classids(word) != []:
start = set(vn.classids(word))
print (start)
上面的代码会打印出来
['meander-47.7', 'preparing-26.3-1', 'run-51.3.2', 'swarm-47.5.1-1']
['run-51.3.2']
第一个是 "run" 的所有动词含义列表,但第二个列表是给出句子中使用的含义的列表。我想删除第一个列表,我尝试使用
metaphor1 = " I run a race"
from nltk.corpus import verbnet as vn
for word in metaphor1.split():
if vn.classids(word) != []:
start = set(vn.classids(word))
remove = set(vn.classids('run'))
final = list(set(vn.classids(word))-set(vn.classids('run')))
print (final)
然而这 returns
[]
[]
到底是什么导致了这个问题,我该如何解决。
循环return是一个空列表,[]
,因为一个集合与其自身的对称差是一个空集。
您想删除同义词集的第三个元素,run-51.3.2
。您错误地将变量 remove
分配给了 run
的整个同义词集,而不仅仅是一个元素。
试试这个
import nltk
metaphor1 = STRING HERE
for word,pos in nltk.pos_tag(nltk.word_tokenize(metaphor1):
if 'V in pos: #Another way to focus on only verbs
return [sense for sense in vn.classids(word) if 'run' not in sense]
我用pos_tag
来表示明确的动词。 VerbNet 可能 return 一个空列表,即使该词不在 VerbNet 数据库中,即使该词用作动词。
我使用 word_tokenize
使代码更通用。
代码return是一个列表。如果您只想将变量打印到控制台,请将 return
更改为 print
。