获得共发现域名为指定的字(Get WordNet's domain name for the

2019-07-05 08:06发布

我知道有共发现域层次结构:如sport->足球。

1)是否有可能列出相关的所有单词,例如,在“sport->足球”的子域?

  Response: goalkeeper, forward, penalty, ball, field, stadium, referee and so on.

2)对于给定的字,如“守门员”获取域的名字吗?

 Need something like [sport->football; sport->hockey] or [football;hockey] or just 'football'.

这是为一个文件分类任务。

Answer 1:

共发现有上位词/下位词层次,但是这是不是你想要的这里,当你抬头门将可以看到:

from nltk.corpus import wordnet
s = wordnet.synsets('goalkeeper')[0]
s.hypernym_paths()

结果之一是:

[Synset('entity.n.01'),
Synset('physical_entity.n.01'),
Synset('causal_agent.n.01'),
Synset('person.n.01'),
Synset('contestant.n.01'),
Synset('athlete.n.01'),
Synset('soccer_player.n.01'),
Synset('goalkeeper.n.01')]

有两种方法称为usage_domains()topic_domains()但他们换来大多数单词的空列表:

s = wordnet.synsets('football')[0]
s.topic_domains()
>>> []
s.usage_domains()
>>> []

WordNet的域项目但可能是你在找什么。 它提供了包括普林斯顿共发现2.0同义词集及其相应的域之间的映射的文本文件。 您必须先注册你的电子邮件地址,以获得对数据的访问。 然后你就可以对应于您共发现版本(他们提供了2.0和3.2),例如与读取文件中的anydbm模块:

import anydbm
fh = open('wn-domains-2.0-20050210', 'r')
dbdomains = anydbm.open('dbdomains', 'c')
for line in fh:
    offset, domain = line.split('\t')
    dbdomains[offset[:-2]] = domain
fh.close()

然后,您可以用同义词集的偏移属性找出其领域。 也许你不得不在一开始加一个零:

dbdomains.get('0' + str(wordnet.synsets('travel_guidebook')[0].offset))
>>> 'linguistics\n'


文章来源: Get WordNet's domain name for the specified word