-
Notifications
You must be signed in to change notification settings - Fork 0
Text jarowinkler similarity
Development build. This page describes
main, not a released package. The latest published Lodestar.Text is 0.4.0 — read its documentation.
Computes Jaro.Similarity and then raises it in proportion to how many of the first four
characters the two strings share.
public static double Similarity(ReadOnlySpan<char> a, ReadOnlySpan<char> b, double prefixWeight = 0.1, TextElement element = TextElement.Utf16Unit)Parameters — a and b are the two strings to compare. prefixWeight is how much each
shared
leading character is worth, 0.1 by default, which is jellyfish's value and is also available as
the constant JaroWinkler.DefaultPrefixWeight. element says what counts as one character; pass
TextElement.CodePoint for parity with jellyfish outside the Basic Multilingual Plane.
Returns — double, normally in [0, 1] and larger meaning more alike — see the trap below
for
when it is not.
Example — a shared DI prefix lifts a middling Jaro score.
using Lodestar.Text.Distances;
double s = JaroWinkler.Similarity("DIXON", "DICKSONX"); // => 0.8133…Remarks — prefer this to plain Jaro for names, and to Levenshtein for both: people
mistype and abbreviate the ends of names far more often than the beginnings, so agreement on the
first few characters really is evidence. It is the standard choice for surname matching in record
linkage, which is what it was built for.
Two behaviours regularly surprise a caller, and both are jellyfish's, kept on purpose. The boost
is
applied only when the underlying Jaro score is already above 0.7, so a pair that shares a prefix
but little else gets no lift at all and reads as identical to plain Jaro. And only the first
four
characters ever count, however long the shared prefix runs.
The trap is prefixWeight itself: it is not validated. The default of 0.1 with a four-character
cap keeps the result at or below 1, and 0.25 is the largest value that still does — pass 0.5
and JaroWinkler.Similarity("MARTHA", "MARHTA") returns 1.0277…, which will quietly break
anything downstream that assumes a [0, 1] score.
Applies to — net10.0, netstandard2.0.
See also — JaroWinkler.Distance, Jaro.Similarity,
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