如何在WordN中找到两个语法集之间的语义关系

2024-09-22 16:31:37 发布

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

我正在使用WordNet3.0。 我想知道如何在WordNet层次结构中找到两个语法集之间的语义关系。 例如,给定两个单词作为输入,我想找出它们之间的关系,即它们是否是同义词、上下位词、上下义词等

有没有python或perl模块来实现这一点?在


Tags: 模块层次结构关系语义语法单词wordnetperl
2条回答

使用Python NLTK:

>>> from nltk.corpus import wordnet as wn
>>> 
>>> synset1 = wn.synset('adornment.n.01')
>>> synset2 = wn.synset('jewelry.n.01')
>>> 
>>> synset1.lowest_common_hypernyms(synset2)
[Synset('adornment.n.01')]
>>> 
>>> synset1.hyponyms()
[Synset('frill.n.03'), Synset('rosette.n.01'), Synset('frontlet.n.01'), Synset('cordon.n.03'), Synset('fob.n.02'), Synset('beauty_spot.n.01'), Synset('sequin.n.01'), Synset('war_paint.n.01'), Synset('boutonniere.n.01'), Synset('trimming.n.02'), Synset('pendant.n.01'), Synset('pompon.n.01'), Synset('band.n.04'), Synset('bangle.n.02'), Synset('jewelry.n.01'), Synset('epaulet.n.01'), Synset('circlet.n.02'), Synset('frog.n.03'), Synset('tassel.n.01'), Synset('plume.n.02'), Synset('pectoral.n.02')]
>>> synset2.hypernyms()
[Synset('adornment.n.01')]

要获取同义词:

^{pr2}$

NLTK是Python最常用的NLP库。 所述操作如下:

from nltk.corpus import wordnet

house = wordnet.synset('house.n.01')
station = wordnet.synset('station.n.01')

然后您可以按如下方式使用类Synset的方法:

^{pr2}$

要确定它们是否是同义词:

common_lemmas = len(set(house.lemma_names).intersection(set(station.lemma_names)))

它将返回这两个集合中常见引理的数目。在

您还可以使用像Neo4j这样的图形数据库来加载wordnet数据集,并寻找节点之间的最短路径,这是一个讨论的问题here。在

相关问题 更多 >