alex321
V2EX  ›  问与答

Python 怎么高效批量对比字符串相似度

  •  
  •   alex321 · Sep 23, 2021 · 1901 views
    This topic created in 1729 days ago, the information mentioned may be changed or developed.

    有两个长度均为几千的字符串列表 A 和 B,其中 B 是对比列。现需要遍历 A,检查其中的每个字符串在 B 中是否存在相似。

    我现在是按照这个批量遍历的: https://www.cnblogs.com/hforevery0/p/14375286.html

    有啥更高效的方法呢?

    6 replies    2021-09-24 00:21:21 +08:00
    ch2
        1
    ch2  
       Sep 23, 2021   ❤️ 1
    首先你要定义相似度的算法
    mimzy
        2
    mimzy  
       Sep 23, 2021   ❤️ 1
    编辑距离是比较常用吧
    rpman
        3
    rpman  
       Sep 24, 2021 via iPhone   ❤️ 1
    大规模找重复可以用 MinLSH
    ClericPy
        4
    ClericPy  
       Sep 24, 2021   ❤️ 3
    传统的: https://github.com/seatgeek/fuzzywuzzy (move to https://github.com/seatgeek/thefuzz ) 记得开 python-Levenshtein

    新兴的: https://github.com/maxbachmann/RapidFuzz 当时作者还跑我 issue 里友好提醒我他们家的证书友好而且更快
    inframe
        5
    inframe  
       Sep 24, 2021   ❤️ 1
    列表比列表的时间复杂度是 O(len(A)*len(B)),
    这个只能并发 /并行,没有办法
    lv2016
        6
    lv2016  
       Sep 24, 2021   ❤️ 2
    巧了,正好最近在准备这方面的 pre,大致有三种思路:
    1. 如#1 所说,定义相似度,不同相似度的计算复杂度不一样,可以找个更高效的
    2. 如#3 所说,用 LSH,先用低复杂度的算法去除明显不相似的,再用预先定义的相似度去找
    3. 如#5 所说,并行,有不少 paper 用 GPU 来做
    此外,这三种思路不互斥,完全可以一起用
    一个 demo: https://github.com/SeSaMe-NUS/genie
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2307 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 00:37 · PVG 08:37 · LAX 17:37 · JFK 20:37
    ♥ Do have faith in what you're doing.