# module Levenshtein

##
Overview

Levenshtein distance methods.

NOTE To use `Levenshtein`, you must explicitly import it with `require "levenshtein"`

##
Defined in:

levenshtein.cr

##
Class Method Summary

- .distance(string1 : String, string2 : String) : Int32

  Computes the levenshtein distance of two strings.

- .find(name, tolerance = nil, &) : String | Nil

  Finds the best match for name among strings added within the given block.

- .find(name, all_names, tolerance = nil) : String | Nil

  Finds the best match for name among strings provided in all_names.

##
Class Method Detail

def self.distance(string1 : String, string2 : String) : Int32 #

Computes the levenshtein distance of two strings.

    require "levenshtein"

    Levenshtein.distance("algorithm", "altruistic") # => 6
    Levenshtein.distance("hello", "hallo")          # => 1
    Levenshtein.distance("こんにちは", "こんちは")           # => 1
    Levenshtein.distance("hey", "hey")              # => 0

def self.find(name, tolerance = nil, &) : String | Nil #

Finds the best match for name among strings added within the given block. tolerance can be used to set maximum Levenshtein distance allowed.

    require "levenshtein"

    best_match = Levenshtein.find("hello") do |l|
      l.test "hulk"
      l.test "holk"
      l.test "halka"
      l.test "ello"
    end
    best_match # => "ello"

def self.find(name, all_names, tolerance = nil) : String | Nil #

Finds the best match for name among strings provided in all_names. tolerance can be used to set maximum Levenshtein distance allowed.

    require "levenshtein"

    Levenshtein.find("hello", ["hullo", "hel", "hall", "hell"], 2) # => "hullo"
    Levenshtein.find("hello", ["hurlo", "hel", "hall"], 1)         # => nil