@themathkoch/leven-search

1.1.3 • Public • Published

LEVEN SEARCH

Leven Search is a Search algorithmen used for string based objects, or strings itself.

Installation

To install the package simply write the following in the terminal.


npm i @themathkoch/leven-search

To use the package check that you are using "commonjs" as your package type. Then you can get the module via the following.


const levenSearch = require("@themathkoch/leven-search");

Functions

The package gives the following three functions to work with.

function dist(str1, str2) ~ levenSearch.dist

function pass(input, compare, threshold = 0.5, Leven = false, ...attr) ~ levenSearch.pass

function search(input, data, threshold = 0.5, Leven = false, ...attr) ~ levenSearch.search

The first function calculates the so called levenshtein distance for two strings. This distance describes the number of transformation needed to get to one string to the other. This distance will be calculated in O(nm), where n,m are the respective string lengths.

The second function checks if the input and compare value fits the threshold. There we use the following properties:

property datatype usecase standardValue
input Obj/String first Obj/String to Compare none
compare Obj/String second Obj/String to Compare none
threshold number threshold which must be exceeded 0.5
Leven bool true, threshold in [0,∞). false, threshold in [0,1) false
attr Obj[]/String[] which attr to compare empty

This function is in O(nm), with n,m the respectiv lengths of input and compare.

The third function is the search algorithmen to use for in Arrays. There we use the following properties:

property datatype usecase standardValue
input Obj/String Obj/STring to search none
data Obj[]/String[] Dataset to search in none
threshold number threshold which must be exceeded 0.5
Leven bool true, threshold in [0,∞). false, threshold in [0,1) false
attr Obj[]/String[] which attributes to compare to empty

In the case, that threshold < 0, the function will return []. In the case of threshold ≥ 1 (to be ignored when Leven = true), the result will be data.

Search value in multiply attributes

Short explanation

Sometimes it is the case, that you want to search one string inside two attr. of an array of obj. e.g. you have an array of obj. with attr. name1, and name2, but all you got is a string called name. You can know search inside both attr. simultaneously via the following input in attr.

let attr = [
    {
        Search: "name",
        In: ["name1","name2"]
    }
]
levenSearch.search(input, data, threshold, leven, ...attr)

Formal structure

let attr = [
    {
        Search: "attr-to-search",
        In: ["attr-to-search-in"]
    },
    ...add as many cond. as you like
]

Exceptions

The pass function throws 2 exceptions when using no string in a search, or missing an attr. in an object.

function TypeException(message) {
    this.message = message;
    this.name = "TypeException";
}

function UndefinedException(message) {
    this.message = message;
    this.name = "UndefinedException";
}

Examples

Here we have 4 short examples of usecases for the package.

1. Example


const levenSearch = require("@themathkoch/leven-search");

let str1 = "OneWord"
let str2 = "ÖneWord"
let str3 = "ThirdWord"

console.log(levenSearch.dist(str1,str2),levenSearch.dist(str2,str3),levenSearch.dist(str1,str3));
//Output 1 5 5

console.log(levenSearch.pass(str1,str2)); //ref. to Functions for the standard values
//Output true
console.log(levenSearch.pass(str2,str3))
//Output false

2. Example


const levenSearch = require("@themathkoch/leven-search");

let input = "Apple";

let data = ["Apple", "Grapple", "Banana", "Appletree", "pple"];

let threshold = 3;

let leven = true;

console.log(levenSearch.search(input, data, threshold, leven));
//Output [ 'Apple', 'Grapple', 'pple' ]

threshold = 0.6;

leven = false

console.log(levenSearch.search(input, data, threshold, leven));
//Output [ 'Apple', 'Grapple', 'Appletree', 'pple' ]

3. Example


const levenSearch = require("@themathkoch/leven-search");

let input = {1: "Apple", 2: "Euro", 3: "Tree"};

let data = [{1: "Grapple", 2: "Dollar", 3: "Forest"},{1: "Grapple", 2: "Eüro", 3: "Tre", 4: "Ignored"}, input];

let threshold = 3;

let leven = true;

console.log(levenSearch.search(input, data, threshold, leven, "1", "2", "3")); //Attribute 4 is ignored
/* Output
    [
        { '1': 'Grapple', '2': 'Eüro', '3': 'Tre' , '4': 'Ignored'},
        { '1': 'Apple', '2': 'Euro', '3': 'Tree' }
    ]
*/

console.log(levenSearch.search(input, data, threshold, leven, "1")); //Use only one attribute
/* Output
    [
        { '1': 'Grapple', '2': 'Dollar', '3': 'Forest' },
        { '1': 'Grapple', '2': 'Eüro', '3': 'Tre', '4': 'Ignored' },
        { '1': 'Apple', '2': 'Euro', '3': 'Tree' }
    ]
*/


4. Example


const levenSearch = require("@themathkoch/leven-search");

let input = {
    1: "Apple",
    2: "Euro",
    3: "Tree"
};

let data = [
    {
        1: "Grapple",
        2: "Dollar",
        3: "Forest"
    }, {
        1: "NooooApple",
        2: "Apple",
        3: "Tre"
    },
    input, {
        1: "NooooApple",
        2: "NoooooApple",
        3: "Tre"
    }
];

let threshold = 3;

let leven = true;

let attr = [
    {
        Search: "1",
        In: ["1"]
    }, {
        Search: "2",
        In: ["2"]
    }, {
        Search: "3",
        In: ["3"]
    }
]

console.log(levenSearch.search(input, data, threshold, leven, ...attr));
/* Output
    [ { '1': 'Apple', '2': 'Euro', '3': 'Tree' } ]
*/

attr = [
    {
        Search: "1",
        In: ["1","2"]
    }
]

console.log(levenSearch.search(input, data, threshold, leven, ...attr));
/* Output
    [
        { '1': 'Grapple', '2': 'Dollar', '3': 'Forest' }, close enough to Grapple
        { '1': 'NooooApple', '2': 'Apple', '3': 'Tre' }, not close enough to NooooApple, but to Apple
        { '1': 'Apple', '2': 'Euro', '3': 'Tree' }, that is just the input itself :)
    ]
    { 1: "NooooApple", 2: "NoooooApple", 3: "Tre"}, did not pass, because both attr. do not fit the distance 
*/


Package Sidebar

Install

npm i @themathkoch/leven-search

Weekly Downloads

15

Version

1.1.3

License

ISC

Unpacked Size

11.5 kB

Total Files

3

Last publish

Collaborators

  • kiliankoch