npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@designbycode/levenshtein

v2.0.3

Published

The Levenshtein Distance Calculator is a utility class that calculates the Levenshtein distance between two strings. The Levenshtein distance is a measure of the minimum number of single-character edits (insertions, deletions or substitutions) required to

Downloads

211

Readme

Levenshtein Distance Calculator

npm version npm NPM npm bundle size Test ts GitHub stars

The Levenshtein Distance Calculator is a utility class that calculates the Levenshtein distance between two strings. The Levenshtein distance is a measure of the minimum number of single-character edits (insertions, deletions or substitutions) required to change one word into the other.

Installation

To use this plugin

Using pnpm

pnpm add @designbycode/levenshtein

Using npm

npm install @designbycode/levenshtein

Using yarn

yarn add @designbycode/levenshtein

Usage

Importing the Class

To use the Levenshtein Distance Calculator, you need to import the Levenshtein class:

import { Levenshtein } from '@designbycode/levenshtein';

Calculating the Levenshtein Distance

To calculate the Levenshtein distance between two strings, call the calculate method and pass the two strings as arguments:

const calculate = Levenshtein.calculate('hello', 'hallo');
console.log(calculate.distance); // Output: 1

The calculate method returns the Levenshtein an object with distance between the two strings as a number. and similarity percentage.

Error Handling

If either of the input strings is not a string, the calculate method will throw a TypeError. You can catch this error using a try-catch block:

try {
  const calculate = Levenshtein.calculate(123, 'hello').distance;
} catch (error) {
  console.error(error); // Output: TypeError: Argument 1 passed to Levenshtein::calculate() must be of the type string
}

Example Use Cases

Measuring String Similarity

The Levenshtein distance can be used to measure the similarity between two strings. A lower distance indicates that the strings are more similar.

const string1 = 'kitten';
const string2 = 'sitting';
const distance = Levenshtein.calculate(string1, string2).distance;
console.log(distance); // Output: 3

Fuzzy String Matching

The Levenshtein distance can be used to implement fuzzy string matching. For example, you can use it to find strings that are similar to a given query string.

const query = 'hello';
const strings = ['hallo', 'helloo', 'hellllo', 'goodbye'];
const distances = strings.map((string) => Levenshtein.calculate(query, string).distance);
console.log(distances); // Output: [1, 1, 2, 6]

5 Real-world Examples of Levenshtein Distance

import Levenshtein from './Levenshtein'; // Assuming you have the Levenshtein class

// 1. Spell Checking/Autocorrection

const dictionary = ['apple', 'banana', 'orange', 'grape'];
const misspelledWord = 'aple';

const suggestions = dictionary
  .map(word => ({ word, distance: Levenshtein.calculate(misspelledWord, word).distance }))
  .sort((a, b) => a.distance - b.distance)
  .slice(0, 3);

console.log("Spellcheck suggestions:", suggestions);


// 2. DNA Sequencing and Bioinformatics

const sequence1 = 'GAGCCTACTAACGGGAT';
const sequence2 = 'CATCGTAATGACGGCCT';

const distance = Levenshtein.calculate(sequence1, sequence2).distance;
console.log(`DNA Sequence Distance: ${distance}`);


// 3. Information Retrieval and Search Engines

const documents = [
  { id: 1, title: "The Apple Orchard" },
  { id: 2, title: "Banana Republic" },
  { id: 3, title: "Orange County" }
];

const query = "aple orchad";

const searchResults = documents
  .map(doc => ({ doc, distance: Levenshtein.calculate(query, doc.title).distance }))
  .sort((a, b) => a.distance - b.distance)
  .slice(0, 2); // Top 2 results

console.log("Search Results:", searchResults);


// 4. Record Linkage and Data Deduplication

const records = [
  { id: 1, name: "John Smith", address: "123 Main St" },
  { id: 2, name: "Jon Smyth", address: "123 Main St" },
  { id: 3, name: "Jane Doe", address: "456 Oak Ave" }
];

const threshold = 2;
const duplicates = [];

for (let i = 0; i < records.length; i++) {
  for (let j = i + 1; j < records.length; j++) {
    if (Levenshtein.calculate(records[i].name, records[j].name).distance <= threshold) {
      duplicates.push([records[i], records[j]]);
    }
  }
}

console.log("Potential Duplicates:", duplicates);


// 5. Password Strength Meters

const commonPasswords = ["password", "123456", "qwerty"];
const newPassword = "pa55wOrd";

const isWeak = commonPasswords.some(common => Levenshtein.calculate(newPassword, common).distance <= 2);

if (isWeak) {
  console.log("Password is too similar to a common password.");
} else {
  console.log("Password seems OK.");
}

License

The Levenshtein Distance Calculator is licensed under the MIT License. See the LICENSE file for details.