Skip to content

momingse/fzearch

Repository files navigation

Fzeach

Fzearch is a fuzzy search library for Javascript/Typescript. It is base on Smith-Waterman algorithm and provides a simple and easy-to-use API for fuzzy search.

How to use

import { Fzeach } from 'fzeach';

const fzeach = new Fzeach();

const list = [
	'apple',
	'banana',
	'orange',
	'grape',
	'kiwi',
	'mango',
	'melon',
	'peach',
	'pear',
	'plum',
	'strawberry',
	'watermelon',
];

const keyword = 'apple';

// create a class instance
const result = fzeach.search(list, keyword, 'levenshtein');
// or use the static method
const result = Fzeach.search(list, keyword, 'damerau-levenshtein');

API

Fzearch.search(query: string, db: string[], options?: FzearchOptions): any[]

  • query: The keyword to search.
  • db: The list of strings to search.
  • options: The options for the search.
    • maxResults: The maximum number of results to return. Default is 5.
    • getPenalty: The function to calculate the penalty for the given characters.
    • getScore: The function to calculate the score for the given characters.
    • showScore: Whether to show the score in the result. Default is false.
    • caseSensitive: Whether to consider the case sensitivity. Default is false.
    • levelPenalty: The penalty for the level of the keyword in the object. Default is 1 (which is mean no penalty).
    • dropoutRate: The threshold for the dropout. Default is 0.8 (higher means less dropout).

Algorithms

I want to base on smith-waterman algorithm and modify some of the mark calculation to achieve some of the following goals:

  • Keyword appears earlier in the string, it should have a higher score. For example, if we search react in the list ['react hooks', 'common react mistakes'], 'react hooks' should and a higher order.

  • Case sensitivity should be considered. The weighting of case matching should be higher than the weighting of case mismatching.

Example

let fzearch: Fzearch;

const db = [
	'Algorithm of Searching Agentsz',
	'Debounce and Throttle',
	'React Hooks',
	'Persisting State in React',
	'Deep Copy and Shadow Copy in Javascript',
	'Common React Mistakes',
];

fzearch = new Fzearch(db);

console.log(fzearch.search('co', 5));
// [
//   'Common React Mistakes',
//   'Deep Copy and Shadow Copy in Javascript',
//   'Persisting State in React',
//   'React Hooks',
//   'Algorithm of Searching Agentsz'
// ]

Reference

About

Fuzzy search library base on Smith-Waterman algorithm.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published