fuzzy

package
v0.0.0-...-c12185e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2024 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package fuzzy searching allows for flexibly matching a string with partial input, useful for filtering data very quickly based on lightweight user input.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Find

func Find[T Item](source string, targets []T) []T

Find will return a list of strings in targets that fuzzy matches source.

Example
fmt.Print(Find("whl", []string{"cartwheel", "foobar", "wheel", "baz"}))
Output:

[cartwheel wheel]

func FindFold

func FindFold[T Item](source string, targets []T) []T

FindFold is a case-insensitive version of Find.

func FindNormalized

func FindNormalized[T Item](source string, targets []T) []T

FindNormalized is a unicode-normalized version of Find.

func FindNormalizedFold

func FindNormalizedFold[T Item](source string, targets []T) []T

FindNormalizedFold is a unicode-normalized and case-insensitive version of Find.

func LevenshteinDistance

func LevenshteinDistance(s, t string) int

LevenshteinDistance measures the difference between two strings. The Levenshtein distance between two words is the minimum number of single-character edits (i.e. insertions, deletions or substitutions) required to change one word into the other.

This implemention is optimized to use O(min(m,n)) space and is based on the optimized C version found here: http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance#C

func Match

func Match(source, target string) bool

Match returns true if source matches target using a fuzzy-searching algorithm. Note that it doesn't implement Levenshtein distance (see RankMatch instead), but rather a simplified version where there's no approximation. The method will return true only if each character in the source can be found in the target and occurs after the preceding matches.

Example
fmt.Print(Match("twl", "cartwheel"))
Output:

true

func MatchFold

func MatchFold(source, target string) bool

MatchFold is a case-insensitive version of Match.

func MatchNormalized

func MatchNormalized(source, target string) bool

MatchNormalized is a unicode-normalized version of Match.

func MatchNormalizedFold

func MatchNormalizedFold(source, target string) bool

MatchNormalizedFold is a unicode-normalized and case-insensitive version of Match.

func RankMatch

func RankMatch(source, target string) int

RankMatch is similar to Match except it will measure the Levenshtein distance between the source and the target and return its result. If there was no match, it will return -1. Given the requirements of match, RankMatch only needs to perform a subset of the Levenshtein calculation, only deletions need be considered, required additions and substitutions would fail the match test.

Example
fmt.Print(RankMatch("twl", "cartwheel"))
Output:

6

func RankMatchFold

func RankMatchFold(source, target string) int

RankMatchFold is a case-insensitive version of RankMatch.

func RankMatchNormalized

func RankMatchNormalized(source, target string) int

RankMatchNormalized is a unicode-normalized version of RankMatch.

func RankMatchNormalizedFold

func RankMatchNormalizedFold(source, target string) int

RankMatchNormalizedFold is a unicode-normalized and case-insensitive version of RankMatch.

Types

type Item

type Item interface {
	FilterValue() string
}

type Rank

type Rank[T Item] struct {
	// Source is used as the source for matching.
	Source string

	// Target is the word matched against.
	Target T

	// Distance is the Levenshtein distance between Source and Target.
	Distance int

	// Location of Target in original list
	OriginalIndex int
}

func RankFind

func RankFind[T Item](source string, targets []T) []Rank[T]

RankFind is similar to Find, except it will also rank all matches using Levenshtein distance.

Example
fmt.Printf("%+v", RankFind("whl", []string{"cartwheel", "foobar", "wheel", "baz"}))
Output:

[{Source:whl Target:cartwheel Distance:6 OriginalIndex:0} {Source:whl Target:wheel Distance:2 OriginalIndex:2}]

func RankFindFold

func RankFindFold[T Item](source string, targets []T) []Rank[T]

RankFindFold is a case-insensitive version of RankFind.

func RankFindNormalized

func RankFindNormalized[T Item](source string, targets []T) []Rank[T]

RankFindNormalized is a unicode-normalized version of RankFind.

func RankFindNormalizedFold

func RankFindNormalizedFold[T Item](source string, targets []T) []Rank[T]

RankFindNormalizedFold is a unicode-normalized and case-insensitive version of RankFind.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL