Fast implementation of the edit distance(Levenshtein distance)
Fast implementation of the edit distance(Levenshtein distance)
Fast implementation of the edit distance (Levenshtein distance).
This library simply implements Levenshtein distance with C++ and Cython.
The algorithm used in this library is proposed by Heikki Hyyrö, "Explaining and extending the bit-parallel approximate string matching algorithm of Myers", (2001)
Thanks to pypa/cibuildwheel There are binary wheels on Linux, Mac OS, and Windows.
You can install via pip:
pip install editdistanceIt's quite simple:
import editdistance
editdistance.eval('banana', 'bahama')
# 2LWith IPython, I tried several libraries:
On 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 loopAbove libraries only support strings. But Sometimes other type of objects such as list of strings(words). I support any iterable, only requires hashable object of it:
Levenshtein.distance(['spam', 'egg'], ['spam', 'ham'])
# ---------------------------------------------------------------------------
# TypeError Traceback (most recent call last)
# in ()
# ----> 1 Levenshtein.distance(['spam', 'egg'], ['spam', 'ham'])
#
# TypeError: distance expected two Strings or two Unicodes
editdistance.eval(['spam', 'egg'], ['spam', 'ham'])
# 1LSo if object's hash is same, it's same.
You can provide __hash__ method to your object instances.
Enjoy!
It is released under the MIT license.
…No open issues yet, or sync has not completed.