Py学习  »  Python

python:过滤函数不会影响列表中的所有项[重复]

gigamarr • 6 年前 • 1629 次点击  

我有一个字符串列表,我只想保留最独特的字符串。这是我如何实现的(也许循环有问题)。

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(更好)

我希望这能有帮助。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44315
文章 [ 3 ]  |  最新文章 6 年前