如何防止 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())
我有以下函数可以拆分单词,然后 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())