Corpus integration#

The Levenshtein facade is independently importable. Corpus integration is an optional adapter created by make_corpus_scorer.

Create a scorer#

from scikitplot.levenshtein import make_corpus_scorer

scorer = make_corpus_scorer(
    backend="auto",
    score_cutoff=0.6,
)

The import of scikitplot.corpus happens only when scorer is called.

Use Corpus documents#

from scikitplot.corpus import CorpusDocument, RetrievalConfig
from scikitplot.levenshtein import make_corpus_scorer

docs = [
    CorpusDocument.create("a.txt", 0, "kitten"),
    CorpusDocument.create("b.txt", 0, "sitting"),
    CorpusDocument.create("c.txt", 0, "bitten"),
]

scorer = make_corpus_scorer(backend="python")
hits = scorer("kitten", docs, RetrievalConfig(top_k=2))

assert [hit.doc.text for hit in hits] == ["kitten", "bitten"]

Retrieval metadata#

The adapter records:

  • match_mode="levenshtein";

  • normalized similarity as the score;

  • the actual Levenshtein backend in backend;

  • native_metric="normalized_levenshtein_similarity".

Normalized versus original text#

By default the scorer prefers doc.normalized_text when present and falls back to doc.text.

Pass use_normalized_text=False when the original document text is the retrieval contract.

When to use it#

Levenshtein retrieval is useful for:

  • short names and identifiers;

  • misspelling-tolerant lookup;

  • small/medium candidate sets;

  • deterministic local matching.

It is usually not the best first-stage retriever for large natural-language corpora. Use lexical/vector retrieval to narrow the candidate set, then edit distance as a reranker when appropriate.