Python excluir da lista enquanto itera
Tenho uma lista de strings e quero manter apenas as strings mais exclusivas. Aqui está como eu implementei isso (talvez haja um problema com o loop),
def filter_descriptions(descriptions):
MAX_SIMILAR_ALLOWED = 0.6 #40% unique and 60% similar
i = 0
while i < len(descriptions):
print("Processing {}/{}...".format(i + 1, len(descriptions)))
desc_to_evaluate = descriptions[i]
j = i + 1
while j < len(descriptions):
similarity_ratio = SequenceMatcher(None, desc_to_evaluate, descriptions[j]).ratio()
if similarity_ratio > MAX_SIMILAR_ALLOWED:
del descriptions[j]
j += 1
i += 1
return descriptions
Observe que a lista pode ter cerca de 110 mil itens e é por isso que reduzi a lista a cada iteraçã
lguém pode identificar o que há de errado com esta implementação atua
Edit 1:
Os resultados atuais são "muito semelhantes". Ofilter_descriptions
função @ retornou 16 itens (de uma lista de ~ 110 mil itens). Quando tentei o seguinte,
SequenceMatcher(None, descriptions[0], descriptions[1]).ratio()
A proporção era de 0,99 e comSequenceMatcher(None, descriptions[1], descriptions[2]).ratio()
era em torno de 0,98. Mas comSequenceMatcher(None, descriptions[0], descriptions[15]).ratio()
foi em torno de 0,65 (o que é melhor)
Eu espero que isso ajude