比较同义词 NLTK

4

我遇到了一个比较奇怪的问题,希望你能帮我解决。

for p in wn.synsets('change'):<br>
    print(p)

获取:

Synset('change.n.01')
Synset('change.n.02')
Synset('change.n.03')
Synset('change.n.04')
Synset('change.n.05')
Synset('change.n.06')
Synset('change.n.07')
Synset('change.n.08')
Synset('change.n.09')
Synset('variety.n.06')
Synset('change.v.01')
Synset('change.v.02')
Synset('change.v.03')
Synset('switch.v.03')
Synset('change.v.05')
Synset('change.v.06')
Synset('exchange.v.01')
Synset('transfer.v.06')
Synset('deepen.v.04')
Synset('change.v.10')

For example I have an a string:

a = 'transfer'

我希望能够识别单词'change'的所有同义词,例如'transfer'。我该如何询问我的程序:"'transfer'是否是'change'的同义词之一?"

4个回答

3
首先,WordNet索引概念(也称为Synsets),并链接每个概念可能的单词,以下代码显示了与单词“change”相关联的概念:
>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('change')
[Synset('change.n.01'), Synset('change.n.02'), Synset('change.n.03'), Synset('change.n.04'), Synset('change.n.05'), Synset('change.n.06'), Synset('change.n.07'), Synset('change.n.08'), Synset('change.n.09'), Synset('variety.n.06'), Synset('change.v.01'), Synset('change.v.02'), Synset('change.v.03'), Synset('switch.v.03'), Synset('change.v.05'), Synset('change.v.06'), Synset('exchange.v.01'), Synset('transfer.v.06'), Synset('deepen.v.04'), Synset('change.v.10')]

一个synset具有几个属性,它有:

  • ID号
  • 词性标签
  • 定义
  • 词元名称,即可用于实例化概念的可能单词
  • 通过N-nymy关系(例如上位词、下位词、成分)链接到其他synset

以下是如何在NLTK中与上述属性进行交互:

>>> wn.synsets('change')[0]
Synset('change.n.01')
>>> wn.synsets('change')[0].offset()
7296428
>>> wn.synsets('change')[0].pos()
u'n'
>>> wn.synsets('change')[0].definition()
u'an event that occurs when something passes from one state or phase to another'
>>> wn.synsets('change')[0].lemma_names()
[u'change', u'alteration', u'modification']
>>> wn.synsets('change')[0].hypernyms()
[Synset('happening.n.01')]

但是一个同义词集并不一定有同义词关系。如果我们把同义词定义为意思相似的单词,那么就是单词(即词形)具有同义词关系。此外,单词的上下文定义了一个词是否是另一个词的同义词。一个单词的含义很有限,是“概念”包含了含义,并通过人类语言实例化含义。至少这是语义学的典型理论,请参见http://goo.gl/ZHzlNF第2章。
因此,当您想问“'transfer'是'change'的同义词吗?”时,您首先必须:
- 定义/选择您在此处引用的概念,并提供“transfer”使用的上下文,google Word Sense Disambiguation - 定义您所指的“change”的哪个概念。
然后才能进行含义比较。
另请参阅:
- Python中单词的所有同义词? - 如何从nltk WordNet Python获取同义词

2

您需要首先获取词形,然后遍历您的词形并获取名称,然后使用in操作检查成员身份:

>>> a in [j.name() for i in wn.synsets('change') for j in i.lemmas()]
True

>>> [j.name() for i in wn.synsets('change') for j in i.lemmas()]
[u'change', u'alteration', u'modification', u'change', u'change', u'change', u'change', u'change', u'change', u'change', u'change', u'variety', u'change', u'change', u'alter', u'modify', u'change', u'change', u'alter', u'vary', u'switch', u'shift', u'change', u'change', u'change', u'exchange', u'commute', u'convert', u'exchange', u'change', u'interchange', u'transfer', u'change', u'deepen', u'change', u'change']

0

wn.synsets 给出了意义列表,每个意义都有一个单词列表。

for sense in wn.synsets('change'):
    if "transfer" in sense.lemma_names:
        print "'transfer' is synonym to 'change'"
        break

0
那些是该单词的不同意义。您可以使用 synset('xxx').lemma_names 获取每个意义的同义词。然后,您可以比较该单词是否存在于其中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接