-
Notifications
You must be signed in to change notification settings - Fork 0
Text indel normalizedsimilarity
Development build. This page describes
main, not a released package. The latest published Lodestar.Text is 0.4.0 — read its documentation.
1 - NormalizedDistance, and — multiplied by 100 — exactly rapidfuzz's fuzz.ratio.
public static double NormalizedSimilarity(ReadOnlySpan<char> a, ReadOnlySpan<char> b, TextElement element = TextElement.Utf16Unit)Parameters — a and b are the two strings to compare; element says what counts as one
character. rapidfuzz works on code points, so TextElement.CodePoint is what reproduces its
numbers on text outside the Basic Multilingual Plane.
Returns — double in [0, 1], larger meaning more alike. Two empty inputs give 1.
Example — four of the five letters survive in order, so fuzz.ratio on this pair is 80.
using Lodestar.Text.Distances;
double s = Indel.NormalizedSimilarity("state", "taste"); // => 0.8Remarks — this is the member that ports fuzz.ratio: multiply by 100 and the numbers agree.
Lodestar.Fuzzy's Fuzz.Ratio is literally this call times 100, so use that if you want the 0-100
scale and the rest of the fuzz.* family alongside it, and this if you want the [0, 1] score on
its own.
What separates this from RatcliffObershelp, the other measure this page recommends for longer
text, is the one thing worth reading twice: this counts every character the two share in order,
however scattered, and RatcliffObershelp counts only characters sitting inside a shared unbroken
run. On the pair above the shared material is tate — four characters, but never more than two
of
them adjacent — so this scores 0.8 where RatcliffObershelp.Similarity scores 0.6. On text
whose overlap comes in a few solid passages the two agree exactly; the more interleaved the
overlap,
the further apart they drift, and ("conversation", "voicesranton") splits them 0.5833… to
0.25.
The trap is that neither of them preprocesses anything. rapidfuzz's fuzz functions are routinely
called with a processor that lowercases and strips punctuation, and fuzzywuzzy did that by
default; here the comparison is on exactly the characters given, so "Kitten" and "kitten"
score
below 1. Normalize the strings yourself before the call.
Applies to — net10.0, netstandard2.0.
See also — Indel.NormalizedDistance, Levenshtein.NormalizedSimilarity,
the migrating-from-rapidfuzz guide,
the Python equivalence table.
- 0001-target-framework
- 0002-unicode-comparison-unit
- 0003-provenance-and-licensing
- 0004-levenshtein-myers-backlog
- 0005-hamming-jellyfish-divergence
- 0006-ratcliff-autojunk
- 0007-metaphone-scope
- 0008-italian-enza-nltk-divergence
- 0009-sample-consumes-a-local-feed
- 0010-stop-word-list-provenance
- 0011-persistence-format
- 0012-per-package-versioning
- 0013-sentencepiece-parity-scope
- 0014-precompiled-normalizer
- 0015-sonar-rules-in-the-build
- 0016-metrics-package-placement
- 0017-bpe-parity-scope
- 0018-multiclass-roc-auc-parallelism-is-opt-in
- 0019-the-net-analysers-run-in-the-build-too
- 0020-normalize-is-a-projection-not-a-parameter
- 0021-multioutput-is-a-method-not-an-enum
- 0022-added-token-matching-flags
- 0023-byte-level-decode-substitutes
- 0024-weighted-median-averages-within-scikit-learns-epsilon
- 0025-quickselect-replaces-a-full-sort-for-the-median
- 0026-r2-and-explainedvariance-split-their-undefined-cases-differently
- 0027-r2-and-explainedvariance-vectorize-only-a-single-output
- 0028-log1p-is-kahans-identity-not-math-log-1-plus-x
- 0029-balanced-accuracy-adjusted-is-left-to-ieee-754-at-the-edge
- 0030-cohen-kappa-keeps-scikit-learns-expected-matrix-orientation
- 0031-nosamplecorrect-mirrors-numpys-float64-upcast
- 0032-fbeta-substitutes-tp-predicted-and-support-algebraically
- 0033-compensated-sum-is-neumaiers-variant
- 0034-dropout-is-refused-for-want-of-a-user
- 0035-a-null-pre-split-is-removed-with-invert-not-isolated
- 0036-a-member-may-ship-without-an-oracle-if-it-says-so
- 0037-the-guards-run-before-the-commit
- 0038-the-gate-confronts-an-exception-tag-with-the-page-that-documents-it
- 0039-mutual-information-returns-zero-on-an-empty-input
- 0040-a-curve-is-a-sealed-class-per-curve
- 0041-one-sample-file-per-public-class
- 0042-phonetic-encoders-refuse-a-null-word
- 0043-the-equality-table-is-sized-to-the-pattern
- 0044-compression-belongs-to-the-caller
- 0045-a-console-call-carries-its-reason-on-the-line
- 0046-check-adr-immutable-runs-in-ci-only
- 0047-one-gate-per-kernel-not-one-per-alphabet
- 0048-the-gate-depends-on-the-kernel-and-the-alphabet
- 0049-two-gates-per-kernel-tested-where-the-width-is-known
- 0050-the-sentencepiece-bpe-lineage-stays-a-bpe-model
- benchmark_latest
- decisions
- equivalence
- matplotlib
- migration
- nightly_run
- numpy
- pandas
- performance
- pytorch
- seaborn
- sklearn
- statsmodels