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

标签 python string python-3.x levenshtein-distance

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

我想比较平均大小为 10kb 的字符串,但我不能采取任何捷径,比如逐行比较,我需要比较整个字符串。我并不关心具体使用什么指标,只要结果合理且计算速度快即可。这是我到目前为止所尝试过的:

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

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

最佳答案

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

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

关于python - 最有效的字符串相似度度量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583871/

相关文章:

Python:从视频中截取屏幕截图

python - 如何在Python中按间隔时间重置循环

python - 使用 PEP 563 检查签名

c - 如何在 C 中递归地查找另一个字符串中的字符串位置?

c++ - C++ 中的 string[length()] 可以吗?

python - 如何压缩根据输入选择多少并发任务的代码?

python - 为什么你可以在 for 循环中循环一个隐式元组,而不是 Python 中的一个理解?

string - 如何在 Perl 中反转一串数字?

python-3.x - 我可以在 Pandas 数据框上应用 Groupby 并计算所有列的平均值吗?

python - 如何在 papermill 中参数化 Python 字典?