MCPcopy Create free account
hub / github.com/driangle/taskmd / calculateSimilarity

Function calculateSimilarity

apps/cli/internal/cli/get.go:281–302  ·  view source on GitHub ↗

calculateSimilarity returns a similarity score between 0.0 and 1.0. Substring containment scores 0.7-1.0; otherwise Levenshtein distance is used.

(query, target string)

Source from the content-addressed store, hash-verified

279// calculateSimilarity returns a similarity score between 0.0 and 1.0.
280// Substring containment scores 0.7-1.0; otherwise Levenshtein distance is used.
281func calculateSimilarity(query, target string) float64 {
282 lowerQuery := strings.ToLower(query)
283 lowerTarget := strings.ToLower(target)
284
285 if lowerQuery == lowerTarget {
286 return 1.0
287 }
288 if strings.Contains(lowerTarget, lowerQuery) {
289 return 0.7 + 0.3*float64(len(lowerQuery))/float64(len(lowerTarget))
290 }
291
292 maxLen := len(lowerQuery)
293 if len(lowerTarget) > maxLen {
294 maxLen = len(lowerTarget)
295 }
296 if maxLen == 0 {
297 return 1.0
298 }
299
300 dist := levenshtein(lowerQuery, lowerTarget)
301 return 1.0 - float64(dist)/float64(maxLen)
302}
303
304// levenshtein computes the edit distance between two strings.
305func levenshtein(a, b string) int {

Callers 2

TestCalculateSimilarityFunction · 0.85
bestFuzzyScoreFunction · 0.85

Calls 1

levenshteinFunction · 0.85

Tested by 1

TestCalculateSimilarityFunction · 0.68