如何使用Nltk WordNet获取给定意义关键词的亮光?

2024-10-02 16:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我从SemCor+OMSTI得到了一组感知键,比如“long%3:00:02::”。我怎样才能得到手套?有地图文件吗?或者使用Nltk WordNet?在


Tags: 文件地图wordnet手套nltksemcoromsti
2条回答

我通过下载这个解决了这个问题。 http://wordnet.princeton.edu/glosstag.shtml 使用WordNet-3.0\glosstag\merged中的文件创建我自己的地图dic。在

TL;DR

import re
from nltk.corpus import wordnet as wn

sense_key_regex = r"(.*)\%(.*):(.*):(.*):(.*):(.*)"
synset_types = {1:'n', 2:'v', 3:'a', 4:'r', 5:'s'}

def synset_from_sense_key(sense_key):
    lemma, ss_type, lex_num, lex_id, head_word, head_id = re.match(sense_key_regex, sense_key).groups()
    ss_idx = '.'.join([lemma, synset_types[int(ss_type)], lex_id])
    return wn.synset(ss_idx)

x = "long%3:00:02::"

synset_from_sense_key(x)

很长时间内

NLTK中有一个非常迟钝的函数。但是,它不是从检测键读取的,而是从data_file_map读取的(例如”数据调整", "数据.名词“,等等):https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1355

因为在NTLK中我们已经有了一个完全可以理解的API,还有来自https://wordnet.princeton.edu/wordnet/man/senseidx.5WN.html的一些指南

^{pr2}$

我们可以使用正则表达式https://regex101.com/r/9KlVK7/1/

>>> import re
>>> sense_key_regex = r"(.*)\%(.*):(.*):(.*):(.*):(.*)"

>>> x = "long%3:00:02::" 

>>> re.match(sense_key_regex, x)
<_sre.SRE_Match object at 0x10061ad78>

>>> re.match(sense_key_regex, x).groups()
('long', '3', '00', '02', '', '')

>>> lemma, ss_type, lex_num, lex_id, head_word, head_id = re.match(sense_key_regex, x).groups()


>>> synset_types = {1:'n', 2:'v', 3:'a', 4:'r', 5:'s'}


>>> '.'.join([lemma, synset_types[int(ss_type)], lex_id])
'long.a.02'

你可以从sense key=得到NLTKSynset()对象)

>>> from nltk.corpus import wordnet as wn
>>> wn.synset(idx)
Synset('long.a.02')

相关问题 更多 >