普林斯顿WordNet和NLTK的WN API中没有明确的域信息。
我建议您获取WordNet域资源的副本,然后使用域链接您的同义词集,请参见http://wndomains.fbk.eu/
注册并完成下载后,您将看到一个wn-domains-3.2-20070223
文本文件,该文件是一个制表符分隔的文件,第一列的offset- PartofSpeech标识符,第二列包含以空格分隔的域标记,例如
00584282-v military pedagogy
00584395-v military school university
00584526-v animals pedagogy
00584634-v pedagogy
00584743-v school university
00585097-v school university
00585271-v pedagogy
00585495-v pedagogy
00585683-v psychological_features
然后,使用以下脚本访问同义词集的域:
from collections import defaultdict
from nltk.corpus import wordnet as wn
# Loading the Wordnet domains.
domain2synsets = defaultdict(list)
synset2domains = defaultdict(list)
for i in open('wn-domains-3.2-20070223', 'r'):
ssid, doms = i.strip().split('\t')
doms = doms.split()
synset2domains[ssid] = doms
for d in doms:
domain2synsets[d].append(ssid)
# Gets domains given synset.
for ss in wn.all_synsets():
ssid = str(ss.offset).zfill(8) + "-" + ss.pos()
if synset2domains[ssid]: # not all synsets are in WordNet Domain.
print ss, ssid, synset2domains[ssid]
# Gets synsets given domain.
for dom in sorted(domain2synsets):
print dom, domain2synsets[dom][:3]
还要寻找对wn-affect
消除WordNet域资源中的情感词非常有用的。
在更新的NLTK v3.0中,它带有开放式多语言WordNet(http://compling.hss.ntu.edu.sg/omw/),并且由于法语同义词集共享相同的偏移ID,因此您可以简单地使用WND作为一种跨语言资源。可以使用以下方式访问法语引文名称:
# Gets domains given synset.
for ss in wn.all_synsets():
ssid = str(ss.offset()).zfill(8) + "-" + ss.pos()
if synset2domains[ssid]: # not all synsets are in WordNet Domain.
print ss, ss.lemma_names('fre'), ssid, synset2domains[ssid]
请注意,NLTK的最新版本将同义词集属性更改为“获取”功能:Synset.offset
->Synset.offset()