您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Python中使用WordNet获取单词域?

如何在Python中使用WordNet获取单词域?

普林斯顿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()

python 2022/1/1 18:38:12 有246人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶