Skip to content

Text Similarity Checker

Compare two texts with five lexical similarity metrics, computed exactly in your browser, with the words each one has and the other lacks.

Character trigram Dice
0.448

The most forgiving of the five metrics below, and the one that behaves best on typos, inflections and reordered words. 1.0 is identical; below about 0.4 the two texts have little surface in common.

metricvaluewhat it sees
Jaccard, word sets0.333shared words ÷ total distinct words
Cosine, term frequency0.608like Jaccard but counts repeats
Dice, character trigrams0.448survives typos and word endings
Levenshtein similarity0.2891 − edits ÷ length; order matters
Containment0.571is the shorter one inside the longer?
Words in A / in B
17 / 19
Distinct words shared
8
Only in A
6
Only in B
10
Edit distance
69
words
Sharedaccount, and, at, billing, invoice, of, the, to
Only in Aemailed, end, generated, is, owner, period
Only in Ban, close, cycle, each, it, owns, produce, send, we, whoever

First 40 of each. This list is usually more diagnostic than any of the scores.

Nothing about these two texts undermines the scores above.
What this checked: this computes five lexical similarity metrics exactly, on the text you pasted, in this tab. No embedding model runs on this page and no vectors are produced — that would require a network call, and these tools do not make any. So what is measured here is shared surface: words, word counts, character trigrams and edit operations. What is not measured is meaning. Two sentences that say the same thing in different words will score near zero on every row above, and a language model would put them at 0.9. Read the "only in A / only in B" lists before you conclude anything from a low number.
What this assumes: words are split on anything that is not a letter or a digit, so punctuation and hyphens are separators. No stemming and no stop-word removal: "run" and "running" are different words here, and so are "the" and "a" — which is why word-level scores on short texts are so volatile. Edit distance is skipped above 3,000 characters because the algorithm is quadratic and the honest options are a cap or a frozen tab.

Everything on this page runs in your browser. Nothing you paste is uploaded, logged, or put in the URL — only the settings above the input are, so a configured tool can be linked to.

Which metric to trust for what

Character trigram Dice is the workhorse. It is insensitive to word order, tolerant of typos and inflection, and it degrades smoothly — two near-identical paragraphs land around 0.9, two on the same topic around 0.4, two unrelated ones near 0.05. Use it for near-duplicate detection, fuzzy matching of names and titles, and for catching a caching bug that returns the wrong-but-similar entry.

Jaccard and cosine over words are stricter and more interpretable, and they are the right choice when the vocabulary is controlled — product codes, tags, error strings. Levenshtein is the only one here that cares about order, which makes it right for short strings (a slug, an ID, a command) and wrong for prose, where moving one clause costs a fortune in edits. Containment answers a different question entirely: whether one text is essentially contained in the other, which is what you want when checking whether a model's answer was copied from a retrieved chunk.

The gap this page cannot cross

Every metric above is a proxy for meaning, not a measure of it. That proxy holds up remarkably well for duplicates and remarkably badly for paraphrase, and knowing which case you are in is the whole skill. If your task is "did the model repeat itself", lexical is fine and free. If it is "did the model answer the question", lexical will mislead you in both directions — punishing a correct answer in different words, and rewarding a wrong one that reuses the question's vocabulary.

Text Similarity Checker · Multigrid