如何防止 Wordnet 同义词返回重复结果?

How to prevent Wordnet synonyms from returning duplicate results?

我有以下函数可以拆分单词,然后 returns 它的同义词,我想知道为什么它会返回这么多重复值?我怎样才能防止这种情况发生,以便它只显示唯一值,同时保持相同格式的结果?

from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet

string = 'Crime Count'

syns = {w : [] for w in string.split(" ")}
for k, v in syns.items():
    for synset in wordnet.synsets(k):
        for lemma in synset.lemmas():
            if lemma.name() not in syns:
                v.append(lemma.name())

syns

结果:

{'Crime': ['crime',
  'offense',
  'criminal_offense',
  'criminal_offence',
  'offence',
  'law-breaking',
  'crime'],
 'Count': ['count',
  'count',
  'counting',
  'numeration',
  'enumeration',
  'reckoning',
  'tally',
  'count',
  'count',
  'number',
  'enumerate',
  'numerate',
  'count',
  'matter',
  'weigh',
  'consider',
  'count',
  'weigh',
  'count',
  'count',
  'number',
  'count',
  'count',
  'count',
  'bet',
  'depend',
  'look',
  'calculate',
  'reckon',
  'reckon',
  'count']}

在您的示例中,您写道:

if lemma.name() not in syns:

这会检查同义词是否作为键而不是值存在于 syn 中。你可以改为:

if lemma.name() not in v:

得到你想要的结果。

或者,您可以使用 set 来防止添加重复项。

syns = {w : set() for w in string.split(" ")}
for k, v in syns.items():
    for synset in wordnet.synsets(k):
        for lemma in synset.lemmas():
            v.add(lemma.name())