我有2个字,假设computer
和tool
。Computer
是一个具体名词,而tool
相对抽象。我想获得每个单词的抽象程度,以反映这一点。我认为最好的方法是通过计算每个单词的高/低位假名的数量。
谢谢!
computer
的含义?在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
连接[hyper / hyponyms]是概念,也就是同义词集,因此它与形式/单词无关,但与可能由单词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 / hypernyms?
好的,那么我们必须做一些假设。
让我们将通过WordNet访问的单词的所有同义词集视为任何单词形式的“整体”概念
[我们考虑给定单词的所有同义词集的所有DIRECT超/同义词的总和
基于可以由某个单词形式表示的所有同义词集的超-/同义词的数量,我们推论出word X
比word Y
更具抽象性//不具有抽象性]] >>
>>> 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
这是供您查找并告诉我们=)玩得开心!