我有一个字符串列表,我只想保留最独特的字符串。这是我如何实现的(也许循环有问题)。
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
请注意名单上可能有
110 K项目
这就是为什么我每次迭代都要缩短列表。
有人能指出目前的实施有什么问题吗?
编辑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(更好)
我希望这能有帮助。