Skip to main content

Computing edit distance on arbitrary Python sequences

Project description

edit_distance

build PyPI version codecov

Python module for computing edit distances and alignments between sequences.

I needed a way to compute edit distances between sequences in Python. I wasn't able to find any appropriate libraries that do this so I wrote my own. There appear to be numerous edit distance libraries available for computing edit distances between two strings, but not between two sequences.

This is written entirely in Python. This implementation could likely be optimized to be faster within Python. And could probably be much faster if implemented in C.

The library API is modeled after difflib.SequenceMatcher. This is very similar to difflib, except that this module computes edit distance (Levenshtein distance) rather than the Ratcliff and Oberhelp method that Python's difflib uses. difflib "does not yield minimal edit sequences, but does tend to yield matches that 'look right' to people."

If you find this library useful or have any suggestions, please send me a message.

Installing & uninstalling

The easiest way to install is using pip:

pip install edit_distance

Alternatively you can clone this git repo and install using distutils:

git clone git@github.com:belambert/edit_distance.git
cd edit_distance
python setup.py install

To uninstall with pip:

pip uninstall edit_distance

API usage

To see examples of usage, view the difflib documentation. Additional API-level documentation is available on ReadTheDocs

This requires Python 2.7+ since it uses argparse for the command line interface. The rest of the code should be OK with earlier versions of Python

Example API usage:

import edit_distance
ref = [1, 2, 3, 4]
hyp = [1, 2, 4, 5, 6]
sm = edit_distance.SequenceMatcher(a=ref, b=hyp)
sm.get_opcodes()
sm.ratio()
sm.get_matching_blocks()

Differences from difflib

In addition to the SequenceMatcher methods, distance() and matches() methods are provided which compute the edit distance and the number of matches.

sm.distance()
sm.matches()

Even if the alignment of the two sequences is identical to difflib, get_opcodes() and get_matching_blocks() may return slightly different sequences. The opcodes returned by this library represent individual character operations, and thus should never span two or more characters.

It's also possible to compute the maximum number of matches rather than the minimum number of edits:

sm = edit_distance.SequenceMatcher(a=ref, b=hyp, 
     action_function=edit_distance.highest_match_action)

Notes

This doesn't implement the 'junk' matching features in difflib.

Hacking

To run unit tests:

python -m unittest

To deploy...

Contributing and code of conduct

For contributions, it's best to Github issues and pull requests. Proper testing and documentation required.

Code of conduct is expected to be reasonable, especially as specified by the Contributor Covenant

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

edit_distance-1.0.7.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

edit_distance-1.0.7-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file edit_distance-1.0.7.tar.gz.

File metadata

  • Download URL: edit_distance-1.0.7.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for edit_distance-1.0.7.tar.gz
Algorithm Hash digest
SHA256 607cea124391e92008816439b667b10fc3314ff4d4aecafe7b86171659773270
MD5 c67f70d10984072d44c264ef946b6744
BLAKE2b-256 fe8edaa698f4583b9074131516d0c4640277081196d820af40aeba1876c23d24

See more details on using hashes here.

File details

Details for the file edit_distance-1.0.7-py3-none-any.whl.

File metadata

  • Download URL: edit_distance-1.0.7-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for edit_distance-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 f6a8e125237815232596e7a4a24772d5a480b1f9351e59527ba0a67198265c96
MD5 8567d3328d94869ff87d5e4cdd87dc9b
BLAKE2b-256 8fdc46e2035604365948dcf102611e853905e85a439972c7e4a169d06a50c7ce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page