fuzzy

package
v1.1.8 Latest Latest
Warning

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

Go to latest
Published: May 9, 2023 License: MIT Imports: 5 Imported by: 242

Documentation

Overview

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(source string, targets []string) []string

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(source string, targets []string) []string

FindFold is a case-insensitive version of Find.

func FindNormalized added in v1.1.0

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

FindNormalized is a unicode-normalized version of Find.

func FindNormalizedFold added in v1.1.0

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

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 added in v1.1.0

func MatchNormalized(source, target string) bool

MatchNormalized is a unicode-normalized version of Match.

func MatchNormalizedFold added in v1.1.0

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 added in v1.1.0

func RankMatchNormalized(source, target string) int

RankMatchNormalized is a unicode-normalized version of RankMatch.

func RankMatchNormalizedFold added in v1.1.0

func RankMatchNormalizedFold(source, target string) int

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

Types

type Rank

type Rank struct {
	// Source is used as the source for matching.
	Source string

	// Target is the word matched against.
	Target string

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

	// Location of Target in original list
	OriginalIndex int
}

type Ranks added in v1.0.1

type Ranks []Rank

func RankFind

func RankFind(source string, targets []string) Ranks

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(source string, targets []string) Ranks

RankFindFold is a case-insensitive version of RankFind.

func RankFindNormalized added in v1.1.0

func RankFindNormalized(source string, targets []string) Ranks

RankFindNormalized is a unicode-normalized version of RankFind.

func RankFindNormalizedFold added in v1.1.0

func RankFindNormalizedFold(source string, targets []string) Ranks

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

func (Ranks) Len added in v1.0.1

func (r Ranks) Len() int

func (Ranks) Less added in v1.0.1

func (r Ranks) Less(i, j int) bool

func (Ranks) Swap added in v1.0.1

func (r Ranks) Swap(i, j int)

Jump to

Keyboard shortcuts

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