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