Skip to main content

快速实现编辑距离(Levenshtein distance)

项目描述

快速实现编辑距离(Levenshtein 距离)。

该库仅使用 C++ 和 Cython实现Levenshtein 距离。

该库中使用的算法由 Heikki Hyyrö 提出,“解释和扩展 Myers 的位并行近似字符串匹配算法”,(2001 年)

二元轮

感谢joerick/cibuildwheel,在 Linux、Mac OS 和 Windows 上有二进制轮子。

安装

您可以通过 pip 安装:

pip install editdistance

用法

这很简单:

import editdistance
editdistance.eval('banana', 'bahama')
# 2L

简单基准

使用 IPython,我尝试了几个库:

在 Python 2.7.5 上:

a = 'fsffvfdsbbdfvvdavavavavavava'
b = 'fvdaabavvvvvadvdvavavadfsfsdafvvav'
import pylev
timeit pylev.levenshtein(a, b)
# 100 loops, best of 3: 7.48 ms per loop

from pyxdameraulevenshtein import damerau_levenshtein_distance
timeit damerau_levenshtein_distance(a, b)
# 100000 loops, best of 3: 11.4 µs per loop

timeit editdistance.eval(a, b)  # my library
# 100000 loops, best of 3: 3.5 µs per loop

import Levenshtein

timeit Levenshtein.distance(a, b)
# 100000 loops, best of 3: 3.21 µs per loop

与任何物体的距离

以上库仅支持字符串。但有时其他类型的对象,如字符串列表(单词)。我支持任何可迭代的,只需要它的可散列对象:

Levenshtein.distance(['spam', 'egg'], ['spam', 'ham'])
# ---------------------------------------------------------------------------
# TypeError                                 Traceback (most recent call last)
# <ipython-input-22-3e0b30d145ac> in <module>()
# ----> 1 Levenshtein.distance(['spam', 'egg'], ['spam', 'ham'])
#
# TypeError: distance expected two Strings or two Unicodes

editdistance.eval(['spam', 'egg'], ['spam', 'ham'])
# 1L

因此,如果对象的哈希相同,则它是相同的。您可以为您的对象实例提供__hash__方法。

享受!

执照

它是在 MIT 许可下发布的。

版权所有 (c) 2013 Hiroyuki Tanaka

特此免费授予任何人获得本软件和相关文档文件(“软件”)的副本,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。

本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同、侵权或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

editdistance-0.6.0.tar.gz (29.5 kB 查看哈希

已上传 source

内置发行版

editdistance-0.6.0-pp37-pypy37_pp73-win32.whl (24.8 kB 查看哈希

已上传 pp37

editdistance-0.6.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl (24.5 kB 查看哈希

已上传 pp37

editdistance-0.6.0-pp37-pypy37_pp73-manylinux1_x86_64.whl (24.5 kB 查看哈希

已上传 pp37

editdistance-0.6.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (18.8 kB 查看哈希

已上传 pp37

editdistance-0.6.0-pp36-pypy36_pp73-win32.whl (24.8 kB 查看哈希

已上传 pp36

editdistance-0.6.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl (24.5 kB 查看哈希

已上传 pp36

editdistance-0.6.0-pp36-pypy36_pp73-manylinux1_x86_64.whl (24.5 kB 查看哈希

已上传 pp36

editdistance-0.6.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl (18.8 kB 查看哈希

已上传 pp36

editdistance-0.6.0-cp39-cp39-win_amd64.whl (24.1 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-win32.whl (25.9 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-manylinux2014_aarch64.whl (263.1 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-manylinux2010_x86_64.whl (286.1 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-manylinux2010_i686.whl (260.5 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-manylinux1_x86_64.whl (286.1 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-manylinux1_i686.whl (260.5 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-macosx_11_0_arm64.whl (19.7 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl (21.3 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp39-cp39-macosx_10_9_universal2.whl (36.7 kB 查看哈希

已上传 cp39

editdistance-0.6.0-cp38-cp38-win_amd64.whl (24.2 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-win32.whl (26.0 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-manylinux2014_aarch64.whl (263.5 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-manylinux2010_x86_64.whl (286.4 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-manylinux2010_i686.whl (260.8 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-manylinux1_x86_64.whl (286.4 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-manylinux1_i686.whl (260.8 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl (21.3 kB 查看哈希

已上传 cp38

editdistance-0.6.0-cp37-cp37m-win_amd64.whl (24.0 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-win32.whl (25.7 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-manylinux2014_aarch64.whl (262.7 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-manylinux2010_x86_64.whl (285.6 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-manylinux2010_i686.whl (260.0 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-manylinux1_x86_64.whl (285.6 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-manylinux1_i686.whl (260.0 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl (21.2 kB 查看哈希

已上传 cp37

editdistance-0.6.0-cp36-cp36m-win_amd64.whl (23.9 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-win32.whl (25.6 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-manylinux2014_aarch64.whl (261.5 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-manylinux2010_x86_64.whl (284.5 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-manylinux2010_i686.whl (258.5 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-manylinux1_x86_64.whl (284.4 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-manylinux1_i686.whl (258.5 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl (21.2 kB 查看哈希

已上传 cp36

editdistance-0.6.0-cp35-cp35m-win_amd64.whl (23.9 kB 查看哈希

已上传 cp35

editdistance-0.6.0-cp35-cp35m-win32.whl (25.6 kB 查看哈希

已上传 cp35

editdistance-0.6.0-cp35-cp35m-manylinux2014_aarch64.whl (260.9 kB 查看哈希

已上传 cp35

editdistance-0.6.0-cp35-cp35m-manylinux2010_x86_64.whl (283.8 kB 查看哈希

已上传