我知道有共发现域层次结构:如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'.
这是为一个文件分类任务。
共发现有上位词/下位词层次,但是这是不是你想要的这里,当你抬头门将可以看到:
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'