SimplePythonWER
The purpose of this repo is to provide a well tested basic python implementation of levenshein / WER so it can be shared across projects. It's based on this with a couple of minor changes.
Getting Started
- Install with:
pip install simplepythonwer - Import with:
from simplepythonwer import wer - Use with:
>>> wer("the cat sat on the mat", "the mat sat on the cat")
0.3333333333333333
Features
- Simple, minimal and only in python with 0 external dependencies
- It is versioned and can be pip installed
- Provide examples with tests to ensure it's working correctly
Caveats and Gotchas
- Providing an empty string or filled with whitespace ground-truth will intentionally raise a divide by zero.
- It's possible to have greater than 100% WER if the ASR result is many times larger than the ground-truth, this is normal.
It's sometimes a good idea to cap the results at a 100% with min function e.g.
min(wer(ground_truth, new_asr_string), 1.0), otherwise you could be exposed to unlimited error rate that could skew your averages.
Change Log
- v1.0.0 - First release - Minor ~15% speed improvements compared to original
- v1.0.1 - Fixed pip packaging and added install steps. Exclude tests from pip
- v1.0.2 - Fixed pip packaging issue
- v1.0.3 - Fixed divide by zero error when the ground truth is zero length (including evaluates to zero length since it's just whitespace)
Tests
Run with: PYTHONPATH=$(pwd) python3 -m unittest discover .
Results:
rob@rob-T480s:~/projects/SimplePythonWER (master)$ PYTHONPATH=$(pwd) python3 -m unittest discover .
..
----------------------------------------------------------------------
Ran 9 tests in 0.001s
OK
Speed Improvements
from simplepythonwer.simplepythonwer import *
import timeit
sentence = "the cat sat on the mat"*5
print(timeit.timeit('levenshtein(sentence, sentence[::-1])', number=10000, globals=globals()))
print(timeit.timeit('levenshtein_original(sentence, sentence[::-1])', number=10000, globals=globals()))
38.16882774699479
44.751817572047
Release files for simplepythonwer 1.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simplepythonwer-1.0.3.tar.gz | 4.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simplepythonwer-1.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.0 kB
Release files / simplepythonwer-1.0.3.tar.gz
| Download URL | simplepythonwer-1.0.3.tar.gz |
|---|---|
| Size | 4.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db79d1b52af523ba657270a30a8a1355261703bd217f5d73fe896481754e46ba
|
|
BLAKE2b-256 checksum How to use checksums |
76ab1182a3e234239af88235319e3ad5f49d8ead28395c161704ec2f38977069
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/56.1.0 requests-toolbelt/0.8.0 tqdm/4.47.0 CPython/3.8.5
|
Release files / simplepythonwer-1.0.3-py3-none-any.whl
| Download URL | simplepythonwer-1.0.3-py3-none-any.whl |
|---|---|
| Size | 5.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
69d827d7c678636d2054d9768e8aa440c65b448fe6c8027bd255f640aedbba83
|
|
BLAKE2b-256 checksum How to use checksums |
d026fdc27ef32532432b84b612f6514688c7f9c5b1254f33228baa28978efdcc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/56.1.0 requests-toolbelt/0.8.0 tqdm/4.47.0 CPython/3.8.5
|