【问题标题】:Don't append if word already is in list [duplicate]如果单词已经在列表中,请不要附加[重复]
【发布时间】:2019-08-09 10:54:02
【问题描述】:

我列出了单词“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']

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

【问题讨论】:

  • 您正在测试str(l) 是否不在您的同义词中,但是您正在附加l.name() 可能是str(l)!=l.name() 的情况吗?为什么不测试 l.name() 是否在您的同义词列表中?

标签: python list wordnet


【解决方案1】:

您可以使用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))

【讨论】:

  • 既然不需要做任何检查,不如去理解版synonyms = {l.name() for syn in wordnet.synsets("good") for l in syn.lemmas()}
  • 虽然这是一种替代解决方案,但这并不能回答 OP 的问题,即如果列表中已经存在,为什么他会在列表中获得重复项。
  • 这不会保留列表的顺序。不回答 OP 问题(这是一个经典的重复)
【解决方案2】:

你的测试是在 l 而不是 l.name() 上,即使它是你想要的。相反,使用:

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

【讨论】:

    【解决方案3】:

    我认为这是因为代码使用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)
    

    【讨论】:

      【解决方案4】:

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

      你应该试试:

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

      【讨论】:

        猜你喜欢
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 2018-05-29
        • 1970-01-01
        相关资源
        最近更新 更多