Skip to content

chrisdew/levenshtein-deltas

Repository files navigation

Levenshtein Deltas

Calculate Levenshtein deltas, not just distances.

These can be used to keep state in sync between distributed systems, in a most efficient manner.

Updating an array of objects from deltas is illustrated in the lib/client.js file.

Example Usage

chris@proliant:~$ node 
> var ld = require('levenshtein-deltas');
undefined
> lev = new ld.Lev(['a', 'b', 'c', 'd', 'e'], ['a', 'd', 'e', 'f', 'g', 'h'])
{ src: 
   [ 'a',
     'b',
     'c',
     'd',
     'e' ],
  tgt: 
   [ 'a',
     'd',
     'e',
     'f',
     'g',
     'h' ] }
> lev.distance();
5
> lev.actions();
[ { op: 'insert', pos: 1, val: 'd' },
  { op: 'replace', pos: 2, val: 'e' },
  { op: 'replace', pos: 3, val: 'f' },
  { op: 'replace', pos: 4, val: 'g' },
  { op: 'replace', pos: 5, val: 'h' } ]
> ld.resultDelta([{id: 0, foo: 'zero'},
...                    {id: 1, foo: 'one'},
...                    {id: 2, foo: 'two'},
...                    {id: 3, foo: 'three'},
...                    {id: 42, foo: 'forty-two'},
...                    {id: 43, foo: 'forty-three'},
...                    {id: 44, foo: 'forty-four'},
...                ], [{id: 1, foo: 'one'},
...                    {id: 2, foo: 'two'},
...                    {id: 3, foo: 'crowd'},
...                    {id: 4, foo: 'four'},
...                    {id: 42, foo: 'meaning of life'},
...                    {id: 100, foo: 'one hundred'},
...                    {id: 44, foo: 'forty-four'},
...                ]);
[ { op: 'delete',
    pos: 0,
    val: { id: 0, foo: 'zero' } },
  { op: 'insert',
    pos: 3,
    val: { id: 4, foo: 'four' } },
  { op: 'replace',
    pos: 5,
    val: { id: 100, foo: 'one hundred' } },
  { op: 'update',
    pos: 2,
    val: { id: 3, foo: 'crowd' } },
  { op: 'update',
    pos: 4,
    val: { id: 42, foo: 'meaning of life' } } ]
> 

About

A levenshtein delta calculator.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published