共發現有上位詞/下位詞層次,但是這是不是你想要的這裏,因爲你 可以看到,當你仰望門將:
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然而,可能是你在找什麼。它提供了一個文本文件,其中包含Princeton WordNet 2.0 synsets與其相應域之間的映射。您必須註冊您的電子郵件地址才能訪問數據。 然後你可以用anydbm
模塊對應於您的WordNet的版本(他們提供了2.0和3.2)的文件中讀取,例如:
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'
謝謝Suzana! ((( – gmlvsv
我已經添加了一個代碼示例到我的答案。 –
我得到了這個版本的WordNet領域爲我的WordNet 2.0和複製您的WordNet域名代碼是完全正確的,但是'dbdomains.get(whatever)'返回'None'對於每個'whatever'我已經試過了,它是給定的形式。'dbdomains'確實有看起來像是看起來看上去很奇妙的鍵/域對(99330精確地說),但似乎沒有WordNet抵消與領先0對應任何這些密鑰。任何見解? – James