我有2个词,比方说 computer
和 tool
.Computer
是一个具体的名词,而 tool
是比较抽象的.我想得到每个词的抽象程度,以反映这一点.我想最好的方法是通过计算每个词的超抽象名词的数量。
computer
你会指的是什么?在WordNet中,一个词有不同的 "概念",也就是synsets。
>>> 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')]
根据定义,单词应该有超拟声词?还是概念应该有超拟声词?
好吧,那我们得做一些假设。
让我们把通过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.coma42012001610569。
这就需要你自己去发现并告诉我们了=)祝你玩得开心!