如果单词已经在列表中,则不要追加
Don't append if word already is in list
我制作了一个单词 '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']
有人知道为什么会这样吗?
您可以使用 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))
您的测试是在 l 而不是 l.name() 上进行的,即使它是您想要的列表。相反,使用:
if l.name() not in synonyms:
synonyms.append(l.name())
我认为这是因为代码使用 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)
变量 l 可能附加了一些唯一 ID。
你应该试试:
if str(l.name()) not in synonyms:
我制作了一个单词 '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']
有人知道为什么会这样吗?
您可以使用 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))
您的测试是在 l 而不是 l.name() 上进行的,即使它是您想要的列表。相反,使用:
if l.name() not in synonyms:
synonyms.append(l.name())
我认为这是因为代码使用 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)
变量 l 可能附加了一些唯一 ID。
你应该试试:
if str(l.name()) not in synonyms: