我正在尝试了解nltk Verbnet API。 具体来说,请考虑:
from nltk.corpus import verbnet
verbnet.classids(lemma='add')
最后一条命令打印:['mix-22.1-2']
。
方法classids
应该“仅返回包含该引理作为成员的类的VerbNet类标识符”。
现在,如果继续the official verbnet project page并搜索动词“ add”,我将得到以下信息:
也就是说,动词add
是mix
,multiply
,say
,addict
和illustrate
的成员。而verbnet类实际上是addict
。
问题:我如何使用nltk获取与动词add
(及其他)有关的实际类?
似乎有些概念没有很明确地定义(并且我可能不太理解),它们相互冲突。感谢您的帮助! :D
答案 0 :(得分:1)
结果之间不一致的原因是由于当前版本的Verbnet 2.1使用的是NLTK,而不是更新的Verbnet 3.3。
尽管尚未得到正式支持,但可以用NLTK加载最新版本的Verbnet。为此:
首先,转到this NLTK Github page并下载文件verbnet3.zip
;
第二,将文件解压缩到NLTK文件夹数据的corpora文件夹中,通常类似于:Users/username/nltk_data/corpora/your_unzip_here
。解压缩该文件时,应该在verbnet3
文件夹中有一个名为corpora
的文件夹。这是nltk在其中寻找数据的地方;
第三,使用以下命令在Python中加载Verbnet3:
import nltk
vnet3 = nltk.corpus.util.LazyCorpusLoader('verbnet3', nltk.corpus.reader.verbnet.VerbnetCorpusReader,r'(?!\.).*\.xml')
然后,您可以使用vnet3.classids('add')
来正确恢复类mix
,multiply
和say
。