如果列表中已经有单词,请不要添加

时间:2019-08-09 10:54:02

标签: python list wordnet

我列出了单词“ good”的同义词,甚至告诉程序不要添加单词(如果已经在列表中)。不幸的是,我仍然有重复题。这是我的代码:

import nltk
from nltk.corpus import wordnet
synonyms = []
for syn in wordnet.synsets("good"):
    for l in syn.lemmas():
        if str(l) not in synonyms:
            synonyms.append(l.name())
print(synonyms)

输出如下

['good', 'good', 'goodness', 'good', 'goodness', 'commodity', 'trade_good', 
'good', 'good', 'full', 'good', 'good', 'estimable', 'good', 'honorable', 
'respectable', 'beneficial', 'good', 'good', 'good', 'just', 'upright', 
'adept', 'expert', 'good', 'practiced', 'proficient', 'skillful', 'skilful',
 'good', 'dear', 'good', 'near', 'dependable', 'good', 'safe', 'secure', 
'good', 'right', 'ripe', 'good', 'well', 'effective', 'good', 'in_effect', 
'in_force', 'good', 'good', 'serious', 'good', 'sound', 'good', 'salutary', 
'good', 'honest', 'good', 'undecomposed', 'unspoiled', 'unspoilt', 'good', 
'well', 'good', 'thoroughly', 'soundly', 'good']

有人知道为什么会这样吗?

4 个答案:

答案 0 :(得分:4)

您可以使用set对象来防止重复。

例如:

import nltk
from nltk.corpus import wordnet
synonyms = set()
for syn in wordnet.synsets("good"):
    for l in syn.lemmas():
        synonyms.add(l.name())

print(synonyms)  #If you need it as a list print(list(synonyms))

答案 1 :(得分:0)

您的测试位于l而不是l.name()上,即使您要在列表中进行。而是使用:

if l.name() not in synonyms:
            synonyms.append(l.name())

答案 2 :(得分:0)

我认为是因为代码使用str(l)查找重复项,然后存储l.name()

以下应该可以工作

import nltk
from nltk.corpus import wordnet
synonyms = []
for syn in wordnet.synsets("good"):
    for l in syn.lemmas():
        if l.name() not in synonyms:
            synonyms.append(l.name())
print(synonyms)

答案 3 :(得分:-1)

变量l可能附加了一些唯一的ID。

您应该尝试:

if str(l.name()) not in synonyms: