Nlp 获取WordNet';指定单词的域名

Nlp 获取WordNet';指定单词的域名,nlp,cluster-analysis,semantic-web,wordnet,document-classification,Nlp,Cluster Analysis,Semantic Web,Wordnet,Document Classification,我知道WordNet有多个域层次结构:例如体育->足球 1) 是否可以列出所有与“运动->足球”子域相关的单词 Response: goalkeeper, forward, penalty, ball, field, stadium, referee and so on. 2) 获取给定单词的域名,例如“守门员” Need something like [sport->football; sport->hockey] or [football;hockey] or just

我知道WordNet有多个域层次结构:例如体育->足球

1) 是否可以列出所有与“运动->足球”子域相关的单词

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

它用于文档分类任务。

WordNet具有上下义词层次结构,但这不是您想要的,因为 当你抬头看守门员时可以看到:

结果之一是:

[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\u domains()
topic\u domains()
,但它们为大多数单词返回空列表:

s = wordnet.synsets('football')[0]
s.topic_domains()
>>> []
s.usage_domains()
>>> []
然而,这可能是你正在寻找的。它提供了一个文本文件,其中包含普林斯顿WordNet 2.0语法集与其对应域之间的映射。您必须注册您的电子邮件地址才能访问数据。 然后,您可以读取与WordNet版本相对应的文件(它们提供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()
然后可以使用synset的offset属性来查找其域。也许你必须在开头加一个零:

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

谢谢你,苏珊娜!我已经下载了WordNet域,但我不清楚如何将其与WordNet集成。((我为我的WordNet 2.0获得了此版本的WordNet域,并准确复制了您的代码,但是
dbdomains.get(无论什么)
返回
None
对于我尝试过的任何
给定形式的
返回
None
dbdomains
中确实有犹太外观的密钥/域对(准确地说是99330个)但是WordNet似乎没有前导0的偏移量对应于这些键中的任何一个。有什么见解吗?亲爱的@Suzana_K,你似乎真的掌握了这个主题,你有什么想法来回答我的问题吗?我将尝试在一个查询中获取每个重要单词的域,并检测在一个给定的查询集群中是否有一个主要的公共域,但这种方法ach没有考虑到在某些查询中使用多个单词所推断出的语义上下文。你认为呢?非常感谢advance@James你找到你的问题的答案了吗?我有完全相同的问题…我的集合中没有任何单词似乎与某个域相关…可能与WordNet Domains pro的作者联系JET可能会有所帮助。可能是项目不再继续。
dbdomains.get('0' + str(wordnet.synsets('travel_guidebook')[0].offset))
>>> 'linguistics\n'