如何使用WordNet中的上位词/下位词来查找单词的抽象性?

3

我有两个词,假设是computertoolComputer是一个具体名词,而tool相对抽象。 我想要得到每个单词的抽象度水平,以反映这一点。 我认为最好的方法是计算每个单词的上下位词数量。

  1. 这可能吗?
  2. 有更好的方法吗?
1个回答

2

第一个问题是你想要引用哪个意思的计算机

在WordNet中,一个单词有不同的“概念”,也称为同义词集:

>>> 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)'

超/下位词与单词computer无关

超/下位词是概念,也是同义词集,因此它们与形式/单词无关,而是与可能由单词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')]

是的,这是很多信息,但我如何获取单词的上位词/下位词?

根据定义,单词应该有上位词/下位词吗?还是概念应该有下位词/上位词?

好的,你让我打转圈...告诉我如何使用上位词/下位词来判断一个词是否比另一个词更抽象!!!

好的,那么我们需要做一些假设。

  1. 我们将通过WordNet访问的一个单词的所有同义词集视为任何单词形式的"整体"概念

  2. 我们考虑给定单词的所有同义词集的所有直接上位词/下位词的总和

  3. 基于所有同义词集的上位词/下位词的数量可以由某个单词形式表示,我们推断出word X是否比word Y更抽象

但是如何在代码中实现(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)是您要测试的假设,因此您应该决定根据 hyponym_count hypernym_count 结果推断一个单词是否更/少抽象的启发式方法。

等等,什么是DIRECT超/下义词?

我们只访问同义词上方/下方的一级超/下义词。这就是这里“直接”的含义。

那么如何获取同义词下面的所有下义词,请参见https://stackoverflow.com/a/42012001/610569

那我应该使用直接的还是所有下面的下义词或所有上面的上位词?

这取决于您自己去发现并告诉我们 =)玩得开心!


1
非常感谢你的出色回答!你能否再详细解释一下“直接”超/下位词的含义,以及间接超/下位词是什么? - Cranjis
1
想一想这三个层次的概念:交通工具 -> 汽车 -> 四轮驱动。交通工具的直接下义词只有汽车,但是所有汽车的下义词包括汽车和四轮驱动,请参考https://stackoverflow.com/a/42012001/610569。 - alvas
所以我认为“抽象程度”意味着“某个对象在树中的高度”,即离叶子(或离根)的距离,假设一个对象越靠近根部,它就越抽象。你觉得呢? - Cranjis
似乎hypernym_paths()返回的是从根节点的距离,而不是从叶子节点的距离。是否有可能获取从叶子节点的距离? - Cranjis
抱歉,我不理解函数闭包(在这里也查看了,但真的没有帮助https://www.nltk.org/howto/wordnet.html)。 - Cranjis
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接