我无法想出一个陌生人的问题,猜猜你会帮助我。
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;
的同义词之一答案 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有几个属性,它有:
以下是如何在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; 的同义词,您必须先:
然后可以比较意义。
另见:
答案 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