-
Notifications
You must be signed in to change notification settings - Fork 0
Text overlap similarity
Development build. This page describes
main, not a released package. The latest published Lodestar.Text is 0.4.0 — read its documentation.
Computes the overlap coefficient of two inputs: shared q-grams over the smaller of the two bags.
public static double Similarity(ReadOnlySpan<char> a, ReadOnlySpan<char> b, int qval = 1, TextElement element = TextElement.Utf16Unit)Parameters — a and b are the two inputs to compare; a string converts implicitly, and
swapping them does not change the answer. qval is how many characters make one gram, 1 by
default; it must be at least 1. element says what counts as one character:
TextElement.Utf16Unit by default, or TextElement.CodePoint to match Python outside the Basic
Multilingual Plane.
Returns — double in [0, 1]. 1 when the smaller bag is wholly contained in the larger,
0 when they share no gram.
Exceptions — ArgumentOutOfRangeException when qval is below 1.
Example — containment scores full marks, and a disjoint pair scores nothing.
using Lodestar.Text.Similarity;
double contained = Overlap.Similarity("apple", "pineapple"); // => 1
double nothing = Overlap.Similarity("abc", "xyz"); // => 0Remarks — 1 here does not mean the two inputs are alike. It means one bag holds every
gram of the other, which "apple" against "pineapple" satisfies while
Jaccard.Similarity reads the same pair as 0.5555…. Anything ranked by
this measure will place a short candidate above a longer, better one whenever the short one
happens to be contained, so a cutoff on Overlap alone is rarely the filter it looks like.
Where the containment has a direction — "is the query inside the document", not "is either inside
the other" — Tversky.Similarity with alpha: 1, beta: 0 is the measure
that says so, because Overlap takes the smaller bag whichever argument it arrived in.
Two empty inputs give 1; one empty input against a non-empty one gives 0.
Applies to — net10.0, netstandard2.0.
See also — Cosine.Similarity,
Tversky.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