All Projects → tajmone → fuzzy-search

tajmone / fuzzy-search

Licence: CC0-1.0 license
A collection of algorithms for fuzzy search like in Sublime Text.

Programming Languages

javascript
184084 projects - #8 most used programming language
C++
36643 projects - #6 most used programming language
C#
18002 projects
PureBasic
71 projects
F#
602 projects
kotlin
9241 projects

Projects that are alternatives of or similar to fuzzy-search

Liquidmetal
💦🤘 A mimetic poly-alloy of the Quicksilver scoring algorithm, essentially LiquidMetal. </Schwarzenegger Voice>
Stars: ✭ 279 (+469.39%)
Mutual labels:  fuzzy-search, fuzzy-matching
Faint
Extensible TUI fuzzy file file explorer
Stars: ✭ 82 (+67.35%)
Mutual labels:  fuzzy-search, fuzzy-matching
Symspellpy
Python port of SymSpell
Stars: ✭ 420 (+757.14%)
Mutual labels:  fuzzy-search, fuzzy-matching
fish-fzy
fzy inegration with fish. Search history, navigate directories and more. Blazingly fast.
Stars: ✭ 18 (-63.27%)
Mutual labels:  fuzzy-search, fuzzy-matching
Tntsearch
A fully featured full text search engine written in PHP
Stars: ✭ 2,693 (+5395.92%)
Mutual labels:  fuzzy-search, fuzzy-matching
SymSpellCppPy
Fast SymSpell written in c++ and exposes to python via pybind11
Stars: ✭ 28 (-42.86%)
Mutual labels:  fuzzy-search, fuzzy-matching
Fuse Swift
A lightweight fuzzy-search library, with zero dependencies
Stars: ✭ 767 (+1465.31%)
Mutual labels:  fuzzy-search, fuzzy-matching
Fuzzywuzzy
Java fuzzy string matching implementation of the well known Python's fuzzywuzzy algorithm. Fuzzy search for Java
Stars: ✭ 506 (+932.65%)
Mutual labels:  fuzzy-search, fuzzy-matching
Fuzzysearch
Find parts of long text or data, allowing for some changes/typos.
Stars: ✭ 157 (+220.41%)
Mutual labels:  fuzzy-search, fuzzy-matching
Symspell
SymSpell: 1 million times faster spelling correction & fuzzy search through Symmetric Delete spelling correction algorithm
Stars: ✭ 1,976 (+3932.65%)
Mutual labels:  fuzzy-search, fuzzy-matching
bolt.nvim
⚡ Ultrafast multi-pane file manager for Neovim with fuzzy matching
Stars: ✭ 100 (+104.08%)
Mutual labels:  fuzzy-search, fuzzy-matching
levenshtein.c
Levenshtein algorithm in C
Stars: ✭ 77 (+57.14%)
Mutual labels:  fuzzy-search, 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 (+3436.73%)
Mutual labels:  fuzzy-search, fuzzy-matching
Fuzzball.js
Easy to use and powerful fuzzy string matching, port of fuzzywuzzy.
Stars: ✭ 225 (+359.18%)
Mutual labels:  fuzzy-search, fuzzy-matching
Yoyo-leaf
Yoyo-leaf is an awesome command-line fuzzy finder.
Stars: ✭ 49 (+0%)
Mutual labels:  fuzzy-search, fuzzy-matching
SuluArticleBundle
Bundle for managing localized content-rich entities like blog-posts in the Sulu content management system
Stars: ✭ 35 (-28.57%)
Mutual labels:  article
phonetic-algorithms
Phonetic-Algorithms for fuzzy searching | PHP
Stars: ✭ 14 (-71.43%)
Mutual labels:  fuzzy-search
FastFuzzyStringMatcherDotNet
A BK tree implementation for fast fuzzy string matching
Stars: ✭ 23 (-53.06%)
Mutual labels:  fuzzy-search
dev-log
A comprehensive list of links and resources about anything programming related
Stars: ✭ 55 (+12.24%)
Mutual labels:  article
wizard
🍳Wizardoc is a WEBAPP for managing documents and knowledge.
Stars: ✭ 57 (+16.33%)
Mutual labels:  article

Fuzzy Search

A collection of algorithms to implement fuzzy search like in Sublime Text, in various languages, based on Forrest Smith's fts_fuzzy_match algorithms, as well as an authorized AsciiDoc reproduction (Live HTML Preview) of the original Reverse Engineering Sublime Text’s Fuzzy Match article by Forrest Smith, 2016.

Project created by Tristano Ajmone in July 19, 2019.


Table of Contents


Project Contents

Introduction

In March 2016, Forrest Smith published an inspiring article entitled Reverse Engineering Sublime Text’s Fuzzy Match, with the following premise:

One of my favorite features of Sublime Text is it’s [sic] fuzzy search algorithm. It’s blistering fast at navigating to files and functions. Many people on the internet have asked how it works. None of the answers were satisfying. So I decided to figure it out myself.

Along with the article, Forrest also published fts_fuzzy_match, a sample implementation of the algorithm (in C++ and JavaScript) in his lib_fts collection of single-file public domain libraries.

The article and fts_fuzzy_match sparkled a wave of interest on the topic, which led to numerous improvement suggestions from various authors — including Sublime Text author Jon Skinner — and a number of ports of fts_fuzzy_match to other languages.

In June, 2021, Forrest Smith kindly granted me permission to reproduce in this repository his Reverse Engineering Sublime Text’s Fuzzy Match article, in AsciiDoc format, which you'll now find inside the /article/ folder.

About This Project

The goal of this project is to gather resources and sample implementations of fuzzy search algorithms aimed at building fuzzy search controls like those found in Sublime Text, VS Code and other modern editors — hence the choice of the more colloquial "fuzzy search" term, instead of "fuzzy matching" or "approximate string matching", in an attempt to delimit the scope of a wide field of algorithms which find application in a variety of other contexts, like spell-checking.

I chose to build the project around Forrest Smith's fts_fuzzy_match and his article because they offer a good starting point to understand how fuzzy search algorithms work. Both his article and the code are easy to understand and written for educational purposes, making accessible to anyone what usually belongs to the domain of academia initiates.

Also, because Forrest generously released his fts_fuzzy_match code under public domain, third parties have ported the code to various other languages, which further simplifies studying the code and implementing it in new languages — and turning fts_fuzzy_match into the Rosetta Stone of fuzzy search.

I decided to gather into a single repository the various implementations of fts_fuzzy_match available in different languages, and separating in different folders implementations of v0.1.0 and v0.2.0 of the algorithm — the latter being an improved version, based on the feedback from Sublime Text author Jon Skinner to the Reverse Engineering Sublime Text’s Fuzzy Match article.

From here, the next goal is to start looking into how various open source editors have implemented fuzzy search functionality, compare them to Forrest's algorithm and discover how to improve and optimize it, both in general as well as for specific use case scenarios. Forrest's article was followed by many constructive comments which are worth exploring, to optimize the code or discover alternative approaches to fuzzy search.

I hope that in the course of time this repository and its Wiki might become a language-agnostic point of reference for anyone wishing to learn fuzzy search algorithms, offering documentation and code examples that range from the simple proof of concept implementation to more advanced techniques and approaches.

License

Any third party assets included in this project are governed by their original license — which is always indicated in the relevant README file or by a license file inside the asset folder.

As for the various assets created by Tristano Ajmone (the project maintainer), they are released under Creative Commons Zero v1.0 Universal license:

Unless otherwise specified, the above license applies to all markdown documents, README files, project configuration files and all other assets created by Tristano Ajmone, including source code.

All third party assets originally published into the public domain are hereby released under the CC0 license governing the project, to ensure permissibility of use in those countries that don't recognize public domain.

Any third party contribution to existing assets shall fall under the same license of the asset being updated or modified.

This project values Copyright status and third party licenses, and strives hard to credit third parties and honour the license terms of their works; so, please, read thoroughly the documentation before reusing any third party asset from this project, to ensure you get its license right, and always double check before submitting to this project resources created by others.

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].