最有效的字符串相似度度量函数
Most efficient string similarity metric function
我正在 Python(或提供 Python 绑定的库)中寻找字符串相似性度量函数的有效实现。
我想比较平均大小为 10kb 的字符串,但我不能采取逐行比较等任何捷径,我需要比较整个字符串。我真的不在乎,将使用什么确切的指标,只要结果合理且计算速度快即可。到目前为止,这是我尝试过的方法:
difflib.SequenceMatcher
来自标准库。 ratio()
给出了很好的结果,但对于 10kb 的文本需要 >100ms。 quick_ratio()
只用了一半的时间,但结果有时与真实价值相去甚远。
python-Levenshtein
:levenshtein 是我的用例可接受的指标,但 Levenshtein.ratio('foo', 'bar')
并不比 SequenceMatcher
. 快
在我开始对 pypi 上提供用于测量字符串相似性的函数的每个库进行基准测试之前,也许您可以指出正确的方向?如果可能的话,我希望将单次比较的时间减少到不到 10 毫秒(在商用硬件上)。
edlib
对于我的用例来说似乎足够快了。
这是一个带有 Python 绑定的 C++ 库,可以在不到 10 毫秒的时间内(在我的机器上)计算小于 100kb 的文本的 Levehnstein 距离。 10kb 的文本在 ~1 毫秒内完成,比 difflib.SequenceMatcher
.
快 100 倍
我在 RapidFuzz, I don't know how it compares to the others but it was much faster than thefuzz/fuzzywuzzy 方面运气不错。
不知道它是否适用于您的 use-case,但这是您在 google fast string similarity python
时发现的第一件事
我正在 Python(或提供 Python 绑定的库)中寻找字符串相似性度量函数的有效实现。
我想比较平均大小为 10kb 的字符串,但我不能采取逐行比较等任何捷径,我需要比较整个字符串。我真的不在乎,将使用什么确切的指标,只要结果合理且计算速度快即可。到目前为止,这是我尝试过的方法:
difflib.SequenceMatcher
来自标准库。ratio()
给出了很好的结果,但对于 10kb 的文本需要 >100ms。quick_ratio()
只用了一半的时间,但结果有时与真实价值相去甚远。python-Levenshtein
:levenshtein 是我的用例可接受的指标,但Levenshtein.ratio('foo', 'bar')
并不比SequenceMatcher
. 快
在我开始对 pypi 上提供用于测量字符串相似性的函数的每个库进行基准测试之前,也许您可以指出正确的方向?如果可能的话,我希望将单次比较的时间减少到不到 10 毫秒(在商用硬件上)。
edlib
对于我的用例来说似乎足够快了。
这是一个带有 Python 绑定的 C++ 库,可以在不到 10 毫秒的时间内(在我的机器上)计算小于 100kb 的文本的 Levehnstein 距离。 10kb 的文本在 ~1 毫秒内完成,比 difflib.SequenceMatcher
.
我在 RapidFuzz, I don't know how it compares to the others but it was much faster than thefuzz/fuzzywuzzy 方面运气不错。
不知道它是否适用于您的 use-case,但这是您在 google fast string similarity python