【发布时间】:2021-03-04 21:33:13
【问题描述】:
我有一个字符串列表,我只想保留最独特的字符串。以下是我的实现方式(可能循环有问题),
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
请注意,该列表可能包含大约 110K 项,这就是我每次迭代都缩短列表的原因。
谁能指出当前的实现有什么问题?
编辑 1:
目前的结果“太相似了”。 filter_descriptions 函数返回 16 项(来自约 110K 项的列表)。当我尝试以下操作时,
SequenceMatcher(None, descriptions[0], descriptions[1]).ratio()
比率为 0.99,SequenceMatcher(None, descriptions[1], descriptions[2]).ratio() 约为 0.98。但是SequenceMatcher(None, descriptions[0], descriptions[15]).ratio() 大约是 0.65(更好)
我希望这会有所帮助。
【问题讨论】:
-
我无法理解您在第一次实施时遇到的问题?你能清楚地解释它有什么问题吗? “最终的字符串太相似”是什么意思?并帮助我们了解这是怎么回事
-
@JohnDoe 请参阅编辑 1
标签: python