WplAi.ExerciseMatcher (WPL-AI v1.7.0)

Copy Markdown View Source

Fuzzy matching for exercise references in WPL-AI.

Provides "Did you mean?" suggestions when unknown exercise references are encountered during parsing. Uses Jaro-Winkler distance for similarity matching, which is effective for typo detection.

Examples

iex> ExerciseMatcher.suggest("pushup")
["push_up"]

iex> ExerciseMatcher.suggest("squats")
["squat"]

iex> ExerciseMatcher.suggest("benchpress")
["bench_press"]

Summary

Functions

Get all known exercise references.

Find the best match for an unknown reference, if similarity is high enough.

Get exercises by category.

Check if an exercise reference is known.

Suggest similar exercise references for an unknown reference.

Validate an exercise reference, returning suggestions if unknown.

Functions

all_exercises()

Get all known exercise references.

best_match(unknown_ref)

Find the best match for an unknown reference, if similarity is high enough.

Returns {:ok, match} if similarity > 0.85, otherwise :no_match. This is useful for auto-correction.

Examples

iex> ExerciseMatcher.best_match("pushup")
{:ok, "push_up"}

iex> ExerciseMatcher.best_match("xyz")
:no_match

exercises_by_category()

Get exercises by category.

known?(exercise_ref)

Check if an exercise reference is known.

Examples

iex> ExerciseMatcher.known?("push_up")
true

iex> ExerciseMatcher.known?("pushup")
false

suggest(unknown_ref)

Suggest similar exercise references for an unknown reference.

Returns up to 3 suggestions sorted by similarity (best match first). Only returns suggestions with similarity > 0.7 to avoid noise.

Examples

iex> ExerciseMatcher.suggest("pushup")
["push_up"]

iex> ExerciseMatcher.suggest("squats")
["squat"]

iex> ExerciseMatcher.suggest("xyz123")
[]

validate(exercise_ref)

Validate an exercise reference, returning suggestions if unknown.

Returns :ok if known, or {:unknown, suggestions} if not.

Examples

iex> ExerciseMatcher.validate("push_up")
:ok

iex> ExerciseMatcher.validate("pushup")
{:unknown, ["push_up"]}