All Projects → lotabout → fuzzy-matcher

lotabout / fuzzy-matcher

Licence: MIT license
Fuzzy Matching Library for Rust

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to fuzzy-matcher

React Command Palette
An accessible browser compatible javascript command palette
Stars: ✭ 140 (+0%)
Mutual labels:  fuzzy-matching
spaczz
Fuzzy matching and more functionality for spaCy.
Stars: ✭ 215 (+53.57%)
Mutual labels:  fuzzy-matching
zingg
Scalable identity resolution, entity resolution, data mastering and deduplication using ML
Stars: ✭ 655 (+367.86%)
Mutual labels:  fuzzy-matching
Fuzzymatcher
Record linking package that fuzzy matches two Python pandas dataframes using sqlite3 fts4
Stars: ✭ 173 (+23.57%)
Mutual labels:  fuzzy-matching
sticker-finder
⚡ A telegram bot for searching all the stickers (just like @gif).
Stars: ✭ 90 (-35.71%)
Mutual labels:  text-search
fuzzywuzzy
Fuzzy string matching for PHP
Stars: ✭ 60 (-57.14%)
Mutual labels:  fuzzy-matching
Leaderf
An efficient fuzzy finder that helps to locate files, buffers, mrus, gtags, etc. on the fly for both vim and neovim.
Stars: ✭ 1,733 (+1137.86%)
Mutual labels:  fuzzy-matching
fish-fzy
fzy inegration with fish. Search history, navigate directories and more. Blazingly fast.
Stars: ✭ 18 (-87.14%)
Mutual labels:  fuzzy-matching
levenshtein.c
Levenshtein algorithm in C
Stars: ✭ 77 (-45%)
Mutual labels:  fuzzy-matching
soda-for-java
SODA (Simple Oracle Document Access) for Java is an Oracle library for writing Java apps that work with JSON (and not only JSON!) in the Oracle Database. SODA allows your Java app to use the Oracle Database as a NoSQL document store.
Stars: ✭ 61 (-56.43%)
Mutual labels:  text-search
Data Matching Software
A list of free data matching and record linkage software.
Stars: ✭ 206 (+47.14%)
Mutual labels:  fuzzy-matching
Fuzzball.js
Easy to use and powerful fuzzy string matching, port of fuzzywuzzy.
Stars: ✭ 225 (+60.71%)
Mutual labels:  fuzzy-matching
Yoyo-leaf
Yoyo-leaf is an awesome command-line fuzzy finder.
Stars: ✭ 49 (-65%)
Mutual labels:  fuzzy-matching
Fuzzysearch
Find parts of long text or data, allowing for some changes/typos.
Stars: ✭ 157 (+12.14%)
Mutual labels:  fuzzy-matching
stringdistance
A fuzzy matching string distance library for Scala and Java that includes Levenshtein distance, Jaro distance, Jaro-Winkler distance, Dice coefficient, N-Gram similarity, Cosine similarity, Jaccard similarity, Longest common subsequence, Hamming distance, and more..
Stars: ✭ 60 (-57.14%)
Mutual labels:  fuzzy-matching
Symspell
SymSpell: 1 million times faster spelling correction & fuzzy search through Symmetric Delete spelling correction algorithm
Stars: ✭ 1,976 (+1311.43%)
Mutual labels:  fuzzy-matching
GoGPUtils
Enhance productivity and avoid to reinvent the wheel every time that you start a Go project
Stars: ✭ 29 (-79.29%)
Mutual labels:  text-search
bolt.nvim
⚡ Ultrafast multi-pane file manager for Neovim with fuzzy matching
Stars: ✭ 100 (-28.57%)
Mutual labels:  fuzzy-matching
fuzzy-match
Library and command line utility to do approximate string matching of a source against a bitext index and get matched source and target.
Stars: ✭ 31 (-77.86%)
Mutual labels:  fuzzy-matching
fuzzychinese
A small package to fuzzy match chinese words
Stars: ✭ 50 (-64.29%)
Mutual labels:  fuzzy-matching

Crates.io

Fuzzy Matcher

Fuzzy matching algorithm(s) in Rust!

Usage

In your Cargo.toml add the following:

[dependencies]
fuzzy-matcher = "*"

Here are some code example:

use fuzzy_matcher::FuzzyMatcher;
use fuzzy_matcher::skim::SkimMatcherV2;

let matcher = SkimMatcherV2::default();
assert_eq!(None, matcher.fuzzy_match("abc", "abx"));
assert!(matcher.fuzzy_match("axbycz", "abc").is_some());
assert!(matcher.fuzzy_match("axbycz", "xyz").is_some());

let (score, indices) = matcher.fuzzy_indices("axbycz", "abc").unwrap();
assert_eq!(indices, [0, 2, 4]);
  • fuzzy_match only return scores while fuzzy_indices returns the matching indices as well.
  • Both function return None if the pattern won't match.
  • The score is the higher the better.

More example

echo "axbycz" | cargo run --example fz "abc" and check what happens.

About the Algorithm

Skim

The skim is currently used by skim, a fuzzy finder.

Skim V2

  • Just like fzf v2, the algorithm is based on Smith-Waterman algorithm which is normally used in DNA sequence alignment
  • Also checkout https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/gaps.pdf for more details
  • The time complexity is O(mn) where m, n are the length of the pattern and input line.
  • Space complexity is O(mn) for fuzzy_indices and O(2n) for fuzzy_match which will compress the table for dynamic programming.
  • V2 matcher has an option to set the max element of the score matrix, if m*n exceeded the limit, it will fallback to a linear search.

Skim V1

Clangd

  • The algorithm is based on clangd's FuzzyMatch.cpp.
  • Also checkout lewang/flx#98 for some variants.
  • The algorithm is O(mn) where m, n are the length of the pattern and input line.
  • Space complexity is O(mn) for fuzzy_indices and O(2n) for fuzzy_match which will compress the table for dynamic programming.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].