gpt4 book ai didi

nlp - 获取指定单词的 WordNet 域名

转载 作者:行者123 更新时间:2023-12-04 22:03:29 28 4
gpt4 key购买 nike

我知道 WordNet 有域层次结构:例如运动->足球。

1) 是否可以列出所有与“sport->football”子域相关的单词?

  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 有一个上位词/下位词层次结构,但这不是你想要的,因为你
当你查找守门员时可以看到:

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()
>>> []

The WordNet Domains project但是可能是您正在寻找的东西。它提供了一个文本文件,其中包含普林斯顿 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()

然后,您可以使用同义词集的偏移属性来找出它的域。也许您必须在开头添加一个零:
dbdomains.get('0' + str(wordnet.synsets('travel_guidebook')[0].offset))
>>> 'linguistics\n'

关于nlp - 获取指定单词的 WordNet 域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881425/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com