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 ¶
- func Find[T Item](source string, targets []T) []T
- func FindFold[T Item](source string, targets []T) []T
- func FindNormalized[T Item](source string, targets []T) []T
- func FindNormalizedFold[T Item](source string, targets []T) []T
- func LevenshteinDistance(s, t string) int
- func Match(source, target string) bool
- func MatchFold(source, target string) bool
- func MatchNormalized(source, target string) bool
- func MatchNormalizedFold(source, target string) bool
- func RankMatch(source, target string) int
- func RankMatchFold(source, target string) int
- func RankMatchNormalized(source, target string) int
- func RankMatchNormalizedFold(source, target string) int
- type Item
- type Rank
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Find ¶
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 FindNormalized ¶
FindNormalized is a unicode-normalized version of Find.
func FindNormalizedFold ¶
FindNormalizedFold is a unicode-normalized and case-insensitive version of Find.
func LevenshteinDistance ¶
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 ¶
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 MatchNormalized ¶
MatchNormalized is a unicode-normalized version of Match.
func MatchNormalizedFold ¶
MatchNormalizedFold is a unicode-normalized and case-insensitive version of Match.
func RankMatch ¶
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 ¶
RankMatchFold is a case-insensitive version of RankMatch.
func RankMatchNormalized ¶
RankMatchNormalized is a unicode-normalized version of RankMatch.
func RankMatchNormalizedFold ¶
RankMatchNormalizedFold is a unicode-normalized and case-insensitive version of RankMatch.
Types ¶
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 ¶
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 ¶
RankFindFold is a case-insensitive version of RankFind.
func RankFindNormalized ¶
RankFindNormalized is a unicode-normalized version of RankFind.
func RankFindNormalizedFold ¶
RankFindNormalizedFold is a unicode-normalized and case-insensitive version of RankFind.