比较同义词NLTK

时间:2015-04-06 18:13:03

标签: python nlp nltk wordnet synonym

我无法想出一个陌生人的问题,猜猜你会帮助我。

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')

例如我有一个字符串:

a = 'transfer'

我希望能够识别单词&#39;更改&#39; 的所有类型的同义词,并且知道f.e. &#39; transfer&#39; 就是其中之一。我怎么能问我的程序: &#34;&#39;转移&#39;是&#39; change&#39;?&#34;

的同义词之一

4 个答案:

答案 0 :(得分:2)

首先,wordnet索引概念(又名Synsets)并为每个概念链接可能的单词,以下代码显示链接到单词&#39; change &#39;的概念:

>>> 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有几个属性,它有:

  • 身份证号码
  • 词性标签
  • 定义
  • 引理名称,即可用于实例化概念的可能单词
  • 通过N-nymy关系链接到其他synset(例如hypernym,hyponym,meronym)

以下是如何在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')]

但是,一个synset没有必要具有同义词关系。如果我们将同义词定义为具有相似含义的单词,则具有同义关系的单词(即词条)。此外,单词的上下文定义单词是否是另一个单词的同义词。一个单词的含义有限,它是&#34;概念&#34;它包含意义并通过人类的话来实现意义。至少那是典型的语义理论,参见http://goo.gl/ZHzlNF

中的第2章

所以当你想要问是&#39;转移&#39;改变&#39; 的同义词,您必须先:

  • 定义/选择您在此处引用的概念,并提供转移&#39;的背景信息。使用,谷歌Word Sense Disambiguation
  • 定义您所指的变更概念。

然后可以比较意义。

另见:

答案 1 :(得分:1)

您需要首先获取lemmas然后迭代您的引理并获取名称,然后使用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']

答案 2 :(得分:0)

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

答案 3 :(得分:0)

wn.synsets为您提供含义列表,每个含义都有一个单词列表。

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