Rank fuzzy matches#

Use stable normalized-similarity ranking with a semantic cutoff.

kitten                 distance=0 similarity=1.000
bitten                 distance=1 similarity=0.833
written                distance=2 similarity=0.714
sitting                distance=3 similarity=0.571
closest: Levenshtein

from scikitplot.levenshtein import closest, rank

choices = ["kitten", "bitten", "sitting", "written", "completely different"]

matches = rank(
    "kitten",
    choices,
    backend="python",
    limit=4,
    score_cutoff=0.5,
)

assert [item.choice for item in matches] == [
    "kitten",
    "bitten",
    "written",
    "sitting",
]
assert all(item.backend == "python" for item in matches)

for item in matches:
    print(
        f"{item.choice:22s} "
        f"distance={item.distance} "
        f"similarity={item.similarity:.3f}"
    )

best = closest("levnshtein", ["Levenshtein", "Hamming", "Jaccard"], backend="python")
assert best is not None
print("closest:", best.choice)

Total running time of the script: (0 minutes 0.002 seconds)

Related examples

Sequences and explicit normalization

Sequences and explicit normalization

Use Levenshtein distance with Corpus retrieval

Use Levenshtein distance with Corpus retrieval

Levenshtein basics

Levenshtein basics

Backend discovery and safe fallback

Backend discovery and safe fallback

Gallery generated by Sphinx-Gallery