最有效的字符串相似度度量函数

kla*_*ann 3 python string python-3.x levenshtein-distance

我正在寻找 Python 中字符串相似度度量函数的有效实现(或提供 Python 绑定的库)。

我想比较平均大小为 10kb 的字符串,我不能采取任何捷径,例如逐行比较,我需要比较整个内容。我并不在乎将使用什么确切的度量标准,只要结果合理且计算速度快即可。这是我迄今为止尝试过的:

  • difflib.SequenceMatcher来自标准库。ratio()给出了很好的结果,但对于 10kb 文本需要 >100 毫秒。quick_ratio()只需要一半的时间,但结果有时与真正的价值相差甚远。
  • python-Levenshtein: levenshtein 对于我的用例来说是一个可以接受的指标,但Levenshtein.ratio('foo', 'bar')并不比SequenceMatcher.

在我开始对 pypi 上提供测量字符串相似度函数的每个库进行基准测试之前,也许您可​​以指出我正确的方向?如果可能的话,我很想将单次比较的时间减少到不到 10 毫秒(在商品硬件上)。

kla*_*ann 5

edlib 对于我的用例来说似乎足够快。

它是一个带有 Python 绑定的 C++ 库,可以在不到 10 毫秒的时间内(在我的机器上)计算 <100kb 的文本的 Levehnstein 距离。10kb 文本在 ~1ms 内完成,比difflib.SequenceMatcher.