59 lines
1.6 KiB
Markdown
59 lines
1.6 KiB
Markdown
|
# js-levenshtein [![Build Status](https://travis-ci.org/gustf/js-levenshtein.svg?branch=master)](https://travis-ci.org/gustf/js-levenshtein)
|
||
|
|
||
|
A very efficient JS implementation calculating the Levenshtein distance, i.e. the difference between two strings.
|
||
|
|
||
|
Based on Wagner-Fischer dynamic programming algorithm, optimized for speed and memory
|
||
|
- use a single distance vector instead of a matrix
|
||
|
- loop unrolling on the outer loop
|
||
|
- remove common prefixes/postfixes from the calculation
|
||
|
- minimize the number of comparisons
|
||
|
|
||
|
## Install
|
||
|
|
||
|
```
|
||
|
$ npm install --save js-levenshtein
|
||
|
```
|
||
|
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
```js
|
||
|
const levenshtein = require('js-levenshtein');
|
||
|
|
||
|
levenshtein('kitten', 'sitting');
|
||
|
//=> 3
|
||
|
```
|
||
|
|
||
|
|
||
|
## Benchmark
|
||
|
|
||
|
```
|
||
|
$ npm run bench
|
||
|
|
||
|
50 paragraphs, length max=500 min=240 avr=372.5
|
||
|
162 op/s » js-levenshtein
|
||
|
98 op/s » talisman
|
||
|
94 op/s » levenshtein-edit-distance
|
||
|
85 op/s » leven
|
||
|
39 op/s » fast-levenshtein
|
||
|
|
||
|
100 sentences, length max=170 min=6 avr=57.5
|
||
|
3,076 op/s » js-levenshtein
|
||
|
2,024 op/s » talisman
|
||
|
1,817 op/s » levenshtein-edit-distance
|
||
|
1,633 op/s » leven
|
||
|
800 op/s » fast-levenshtein
|
||
|
|
||
|
2000 words, length max=20 min=3 avr=9.5
|
||
|
3,119 op/s » js-levenshtein
|
||
|
2,416 op/s » talisman
|
||
|
2,141 op/s » levenshtein-edit-distance
|
||
|
1,855 op/s » leven
|
||
|
1,260 op/s » fast-levenshtein
|
||
|
```
|
||
|
|
||
|
Benchmarks was performed with node v8.12.0 on a MacBook Pro 15", 2.9 GHz Intel Core i9
|
||
|
|
||
|
## License
|
||
|
|
||
|
MIT © Gustaf Andersson
|