如何在 wordnet 中使用 hyper-/hyponyms 查找单词的抽象度?
How to find abstractness of a word using hyper-/hyponyms in wordnet?
我有2个词,比方说computer
和tool
。
Computer
是具体名词,而 tool
是相对抽象的名词。
我想获得反映这一点的每个词的抽象程度。
我认为最好的方法是计算每个单词的 hyper/hypo nyms 数。
- 可能吗?
- 有更好的方法吗?
谢谢!
第一个问题是computer
指的是什么意思?
在 WordNet 中,一个词有不同的 "concepts",即同义词集:
>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('computer')
[Synset('computer.n.01'), Synset('calculator.n.01')]
>>> wn.synsets('computer')[0].definition()
'a machine for performing calculations automatically'
>>> wn.synsets('computer')[1].definition()
'an expert at calculation (or at operating calculating machines)'
和hyper/hyponyms没有连接到单词computer
hyper/hyponyms 也是概念,即同义词集,因此它与 form/word 无关,而是与可能由单词 computer
表示的同义词集相关联,即
>>> type(wn.synsets('computer')[0])
<class 'nltk.corpus.reader.wordnet.Synset'>
>>> wn.synsets('computer')[0].hypernyms()
[Synset('machine.n.01')]
>>> wn.synsets('computer')[0].hyponyms()
[Synset('analog_computer.n.01'), Synset('digital_computer.n.01'), Synset('home_computer.n.01'), Synset('node.n.08'), Synset('number_cruncher.n.02'), Synset('pari-mutuel_machine.n.01'), Synset('predictor.n.03'), Synset('server.n.03'), Synset('turing_machine.n.01'), Synset('web_site.n.01')]
是的,这是很多信息,但我如何获得 hyper/hyponyms 的单词?
根据定义,单词应该有hyper/hyponyms?或者概念应该有hypo/hypernyms?
好吧,你把我带进了圈子...告诉我如何使用 hyper-/hyponyms 来查看一个词是否比另一个词更抽象!!!
好吧,那我们得做个假设。
让我们将通过 WordNet 访问的单词的所有同义词集视为任何单词形式的 "holistic" 概念
我们考虑所有 DIRECT hyper-/hyponyms 给定单词
的所有同义词集的总和
根据某种词形可以表示的所有同义词集的hyper-/hyponyms个数,我们推导出word X
比more/less抽象=17=]
但是代码中的(1)、(2)、(3)怎么做呢?
>>> hypernym_count = lambda word: sum(len(ss.hypernyms()) for ss in wn.synsets(word))
>>> hyponym_count = lambda word: sum(len(ss.hyponyms()) for ss in wn.synsets(word))
>>> hyponym_count('computer')
14
>>> hypernym_count('computer')
2
>>> hypernym_count('tool')
8
>>> hyponym_count('tool')
32
由于 (3) 是您要检验的假设,如果一个词是 more/less 基于 hyponym_count
和 [=19 的摘要,则您应该决定要推断出什么启发式方法=] 结果
等一下,DIRECT
hyper-/hyponyms 是什么?
我们只访问 hyper-/hyponyms 一级 above/below 同义词集。这就是 "direct" 在这里的意思。
然后如何获取同义词集下的所有下位词,参见
那么我应该使用直接或下面的所有下位词还是上面的所有上位词?
这是为了让您找出并告诉我们 =) 玩得开心!
我有2个词,比方说computer
和tool
。
Computer
是具体名词,而 tool
是相对抽象的名词。
我想获得反映这一点的每个词的抽象程度。
我认为最好的方法是计算每个单词的 hyper/hypo nyms 数。
- 可能吗?
- 有更好的方法吗?
谢谢!
第一个问题是computer
指的是什么意思?
在 WordNet 中,一个词有不同的 "concepts",即同义词集:
>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('computer')
[Synset('computer.n.01'), Synset('calculator.n.01')]
>>> wn.synsets('computer')[0].definition()
'a machine for performing calculations automatically'
>>> wn.synsets('computer')[1].definition()
'an expert at calculation (or at operating calculating machines)'
和hyper/hyponyms没有连接到单词computer
hyper/hyponyms 也是概念,即同义词集,因此它与 form/word 无关,而是与可能由单词 computer
表示的同义词集相关联,即
>>> type(wn.synsets('computer')[0])
<class 'nltk.corpus.reader.wordnet.Synset'>
>>> wn.synsets('computer')[0].hypernyms()
[Synset('machine.n.01')]
>>> wn.synsets('computer')[0].hyponyms()
[Synset('analog_computer.n.01'), Synset('digital_computer.n.01'), Synset('home_computer.n.01'), Synset('node.n.08'), Synset('number_cruncher.n.02'), Synset('pari-mutuel_machine.n.01'), Synset('predictor.n.03'), Synset('server.n.03'), Synset('turing_machine.n.01'), Synset('web_site.n.01')]
是的,这是很多信息,但我如何获得 hyper/hyponyms 的单词?
根据定义,单词应该有hyper/hyponyms?或者概念应该有hypo/hypernyms?
好吧,你把我带进了圈子...告诉我如何使用 hyper-/hyponyms 来查看一个词是否比另一个词更抽象!!!
好吧,那我们得做个假设。
让我们将通过 WordNet 访问的单词的所有同义词集视为任何单词形式的 "holistic" 概念
我们考虑所有 DIRECT hyper-/hyponyms 给定单词
的所有同义词集的总和
根据某种词形可以表示的所有同义词集的hyper-/hyponyms个数,我们推导出
word X
比more/less抽象=17=]
但是代码中的(1)、(2)、(3)怎么做呢?
>>> hypernym_count = lambda word: sum(len(ss.hypernyms()) for ss in wn.synsets(word))
>>> hyponym_count = lambda word: sum(len(ss.hyponyms()) for ss in wn.synsets(word))
>>> hyponym_count('computer')
14
>>> hypernym_count('computer')
2
>>> hypernym_count('tool')
8
>>> hyponym_count('tool')
32
由于 (3) 是您要检验的假设,如果一个词是 more/less 基于 hyponym_count
和 [=19 的摘要,则您应该决定要推断出什么启发式方法=] 结果
等一下,DIRECT
hyper-/hyponyms 是什么?
我们只访问 hyper-/hyponyms 一级 above/below 同义词集。这就是 "direct" 在这里的意思。
然后如何获取同义词集下的所有下位词,参见
那么我应该使用直接或下面的所有下位词还是上面的所有上位词?
这是为了让您找出并告诉我们 =) 玩得开心!