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

2021-09-23 22:13:37 +08:00
 alex321

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

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

有啥更高效的方法呢?

1378 次点击
所在节点    问与答
6 条回复
ch2
2021-09-23 23:43:42 +08:00
首先你要定义相似度的算法
mimzy
2021-09-23 23:59:26 +08:00
编辑距离是比较常用吧
rpman
2021-09-24 00:04:00 +08:00
大规模找重复可以用 MinLSH
ClericPy
2021-09-24 00:06:36 +08:00
传统的: https://github.com/seatgeek/fuzzywuzzy (move to https://github.com/seatgeek/thefuzz ) 记得开 python-Levenshtein

新兴的: https://github.com/maxbachmann/RapidFuzz 当时作者还跑我 issue 里友好提醒我他们家的证书友好而且更快
inframe
2021-09-24 00:08:14 +08:00
列表比列表的时间复杂度是 O(len(A)*len(B)),
这个只能并发 /并行,没有办法
lv2016
2021-09-24 00:21:21 +08:00
巧了,正好最近在准备这方面的 pre,大致有三种思路:
1. 如#1 所说,定义相似度,不同相似度的计算复杂度不一样,可以找个更高效的
2. 如#3 所说,用 LSH,先用低复杂度的算法去除明显不相似的,再用预先定义的相似度去找
3. 如#5 所说,并行,有不少 paper 用 GPU 来做
此外,这三种思路不互斥,完全可以一起用
一个 demo: https://github.com/SeSaMe-NUS/genie

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/803759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX