Most individuals who reconcile messy identifiers attain for a similar method: take an edit-distance metric, decide a threshold, and merge something shut sufficient. Damerau-Levenshtein is the apparent improve over plain edit distance. The reasoning for selecting it’s sound. It treats a transposition (two swapped characters sds1001 and sds011) as one mistake as a substitute of two.
In a pull of 719 environmental sensor stations I used to be working with, one confirmed misspelling was sds1001 for sds011. Two digits have been swapped — a slip anybody may make on a keyboard. Plain edit distance treats this as two edits, the identical value it will cost for 2 completely totally different merchandise. Damerau-Levenshtein alternatively is aware of it is a single mistake and from the get-go, scores it as distance 1. So it’s a greater mannequin of how typos occur, and it actually prices nothing to undertake, making it the obvious alternative.
Nevertheless, there may be an often-overlooked draw back to the metric. Right here’s an instance: hdc1008 and hdc1080 are two actual Texas Devices humidity sensors offered on the similar time, documented on separate datasheets. Whereas plain edit distance places them at 2, Damerau-Levenshtein pulls them all the way down to 1 into the identical vary because the aforementioned typos. Be aware how the identical property that makes it higher at recognizing human errors additionally causes it to merge two totally totally different merchandise that the producer purposely numbered a digit aside.
That is Half 2 of my deep-dive sequence on entity key drift that begins with normalization. If you have not learn Half 1 but, it is price a glance first because it covers the deterministic cleanup that this piece picks up from. The code and knowledge for each are on GitHub and Zenodo, in case you wish to verify any of the numbers your self.
On this piece, I’ll stroll by what occurred after I measured 5 string-similarity metrics towards the bottom reality I verified from producer datasheets, why none of them could possibly be tuned to separate typos from actual merchandise — and what that failure means for the way the system needs to be constructed as a substitute.
That is related to anyone reconciling quick alphanumeric identifiers — half numbers, SKUs, mannequin codes — from a couple of supply, and fewer so if yours come from a single supply. Additionally, it is price saying upfront that it is a adverse consequence. Should you’re searching for a matcher to repeat, I haven’t got one, and the explanation I do not seems to matter greater than a matcher would have.
What normalization left behind
Step 1 dealt with the straightforward circumstances. Throughout 719 stations, 114 distinct sensorType strings collapsed all the way down to 99 pure keys as soon as NFKC normalization, case folding, and separator stripping have been utilized. SDS 011, SDS011 and sds011 all converged to grow to be sds011. The merge carried no danger in any respect because the variations have been purely stylistic and the perform doing the collapsing was deterministic.
99 keys remains to be much more than what the area really comprises. My finest estimate is that there are round two dozen actual {hardware} fashions represented right here (though that’s solely an estimate). Pinning down the precise quantity would require a components catalog which the dataset does not carry (extra on that later).
The form of that hole issues earlier than you attempt to shut it. 52 of the 99 keys are part-number codes like bme280 and sds011, and collectively they account for 94 p.c of the 4,301 observations, with a median size of six characters. The remainder is a mixture of descriptive phrases like gps and regenmesser, one literal “???”, and one key that jams two half numbers collectively as “tsl45315&veml6070”.
That inhabitants issues greater than it appears. Approximate string matching wasn’t actually constructed for it. Cohen, Ravikumar, and Fienberg’s 2003 comparability of string metrics benchmarks towards title matching, the place a shared prefix is proof: “Jonathan” and “Jonathon” look alike as a result of a human transcribed the identical individual. Gadget identifiers do not work that method. bme280 and bmp280 share 5 of the six characters and are nonetheless two totally different merchandise.
I went forward and constructed the matcher anyway, and tried to do it conservatively. It compares identifiers in two levels: the digit core of every key has to match precisely earlier than the alphabetic the rest will get judged on similarity in any respect. That offers the benefit of the numeric half not getting smoothed away by a tolerance setting; bme280 and bme680 keep aside by building somewhat than by a threshold {that a} tuning move may loosen later. This fashion no matter security it has is constructed into the logic somewhat than sitting in a weighted setting.
That construction nevertheless does not resolve the comparability that it nonetheless lets by. As soon as two keys share a digit core, the letters get judged by similarity, and similarity wants a threshold. So the entire design comes down to 1 query: is there a threshold on any affordable metric that catches each typo with out additionally merging two genuinely totally different merchandise?
Constructing a floor reality you may really verify
That query cannot be answered with the information available. The snapshot tells us how usually every string exhibits up, but it surely does not inform us which strings really title an actual delivery half, and that query wants answering.
So I constructed the column manually earlier than working a single similarity rating. That order was deliberate as a result of in the event you classify strings after you’ve got already seen how they rating, you are inclined to classify them to suit the scores with out even which means to.
For every of the 16 strings, I appeared up the producer’s datasheet and recorded a verdict, the official half title, supply URL, lifecycle standing, and entry date. All of that lives within the repo as ground_truth_catalog.csv, so none of it’s taken on belief.
Doing this by hand turned up three issues I did not anticipate that have been notably extra attention-grabbing than the matcher outcomes.
-
First, one of many assumptions I had turned out to be mistaken. I might assumed bmp200 was a typo of bmp280. Bosch’s strain sensor line runs BMP085, BMP180, BMP280, BMP388 — there is no BMP200 in it. However upon additional investigation, I came upon that BMP200 is a PM10 particulate analyzer from Centered Photonics, a completely totally different producer, though I could not find a spec sheet or proof of actual distribution for it. In order that pair may both be actually a typo or a collision between a Bosch strain sensor and a Chinese language air-quality analyzer; I could not inform which even after spending appreciable time on it. So I dropped the pair, which is price flagging as a result of it weakens my outcomes (taking the confirmed-typo rely from 4 pairs down to a few makes the sample more durable to exhibit), but it surely held up anyway.
-
Second, an early affirmation turned out to be incorrect. An earlier move by the information had recorded SDS 011 with an area as canonical and marked CONFIRMED, sourced from a third-party mirror web site. However Nova Health’ personal documentation reads SDS011 with out house on the quilt and in web page headers. The mirror had it mistaken, and that error had been sitting there masked with a CONFIRMED label. Mirrors aren’t producers, and that distinction ought to have been handled extra rigorously from the beginning.
-
Lastly, one half wasn’t named what everybody calls it. The dataset makes use of dht22, however Aosong’s personal technical handbook says it not as soon as. DHT22 exhibits up on each storefront and reseller mirror on-line, however within the producer’s personal paperwork it’s AM2302. The half itself is actual, so the row stands, however the title your entire area makes use of for it is not what the producer makes use of. That is the third type of failure beneath the 2 I used to be really attempting to measure.
In any case that verification, what was left? 12 strings naming actual components, 3 naming nothing, and 1 excluded — which comes out to 10 scored pairs: 3 actual typos (the explanation I used to be constructing the matcher within the first place) and seven pairs the place either side are actual merchandise {that a} merge would silently common collectively.
5 metrics, and never certainly one of them separates
A metric works if some threshold on it merges all 3 typo pairs and not one of the 7 real-product pairs. I examined 5 spanning the principle households: plain edit distance, transposition-aware (Damerau-Levenshtein), prefix-weighted (Jaro-Winkler), set-based (q-gram Jaccard), and my two-stage digit-core matcher.
Set the edge unfastened sufficient to catch all three misspellings, then rely what comes with it. Plain edit distance merges all seven actual pairs. Damerau-Levenshtein: seven. Two-stage: seven. q-gram Jaccard: three. Jaro-Winkler, one of the best of the 5, merges one.
Not certainly one of them merges none.
The pair that settles the query is hdc1008/hdc1080, the 2 actual Texas Devices components talked about earlier. They don’t seem to be variants of one another: totally different packages, totally different provide ranges, and ±4 %RH accuracy towards ±2 %RH. Subsequently, merging them would fold a sensor with twice the error into one with half of it. Jaro-Winkler scores this pair 0.971, larger than one of the best real typo scored at 0.963. q-gram Jaccard places it at 0.714, above two of the three. On plain edit distance and on the two-stage matcher, it ties the worst-scoring typo. On each metric examined, this pair of genuinely totally different merchandise scored in the identical band as at the very least one actual misspelling.
|
pair |
Lev |
D-L |
two-stage |
J-W |
q-gram |
reality |
|
sds011 / sds1001 |
2 |
2 |
refused |
0.928 |
0.375 |
typo |
|
hdc1080 / hhdc1080 |
1 |
1 |
1 |
0.963 |
0.857 |
typo |
|
hdc1080 / hc1080 |
1 |
1 |
1 |
0.957 |
0.571 |
typo |
|
bme280 / bmp280 |
1 |
1 |
1 |
0.911 |
0.429 |
distinct |
|
bme280 / bme680 |
1 |
1 |
refused |
0.922 |
0.429 |
distinct |
|
bmp085 / bmp280 |
2 |
2 |
refused |
0.876 |
0.250 |
distinct |
|
hdc1008 / hdc1080 |
2 |
1 |
refused |
0.971 |
0.714 |
distinct |
|
dht11 / dht22 |
2 |
2 |
refused |
0.813 |
0.333 |
distinct |
|
scd30 / sgp30 |
2 |
2 |
2 |
0.760 |
0.143 |
distinct |
|
sgp30 / sps30 |
2 |
2 |
2 |
0.880 |
0.143 |
distinct |
Desk 1. Each scored pair beneath all 5 metrics, towards datasheet-verified floor reality. Daring marks the row that defeats the board. Pairs use the information as-is as a substitute of the official half names: dht22 is what the information comprises, although the producer calls that half AM2302. A matcher solely ever sees the left column, and that hole is the true downside.
It is price being exact that one pair is sufficient right here. The pure objection that n=10 pairs is simply too small a pattern applies to a unique type of declare than the one made right here. If the purpose was to show {that a} metric works, a big pattern would have been required to certain its error price with any confidence. However proving that no threshold can separate the 2 teams solely requires a single pair that scores within the typo vary with the alternative floor reality. There are a number of such pairs right here, throughout each metric examined. Accumulating extra knowledge may add extra counterexamples, however not take away those already there.
The 2-stage matcher deserves honest accounting as nicely. Its digit-core rule refuses to think about sds011 and sds1001 in any respect as a result of 011 and 1001 are totally different digit strings, so it by no means even will get an opportunity to catch the typo it was constructed for. And it nonetheless merges bme280 with bmp280 at a distance of 1, as a result of they share the digit core 280. The structural security I constructed into it held the place I aimed it however failed elsewhere. It missed the typo it was designed to catch, and made the collision it was designed to forestall.
Why a sixth metric doesn’t save this
Full disclosure: there’s a model of this argument that is not falsifiable, and that model is not price a lot. I did not take a look at each doable matcher — no person may — and it is totally doable some untested metric would have appeared prefer it labored on this explicit pattern. However the declare I wish to make is not empirical in that sense. It is structural — the truth that decides id right here is not contained within the string in any respect.
Take into account the pair I scrapped earlier. If Bosch ships a BMP200 subsequent 12 months, the connection between bmp280 and bmp200 flips from typo to distinct, and neither string modifications by a single character. What does is a choice made inside an organization that has nothing to do with both string’s characters.
This isn’t only a hypothetical designed for impact — it is the precise motive that pair is not there. I could not rule out {that a} BMP200 exists, and that is precisely why I set the pair apart as a substitute of scoring it. The state of affairs turned out to be the explanation why I ended up with three confirmed typo pairs as a substitute of 4.
No perform of two strings can learn a producer’s catalog. Not the 5 metrics I examined, or a sixth one I did not strive, and never a realized mannequin both. Realized entity matching is genuinely good at what it does — Konda’s Magellan from 2016, or the pre-trained language mannequin method from Li et al. in 2020 — however each assume you could have labeled coaching knowledge and a few tolerance for fashions whose reasoning you may’t totally interrogate. A skilled mannequin would fail right here for a similar motive the hand-built ones do: the sign it will want simply is not within the enter. Should you hand it the catalog straight, you’ve got mainly rebuilt the structure described under, simply with much less transparency and no audit path, which solutions “did you strive X” for each worth of X, as soon as and for all.
A catalog isn’t a set reference both. New keys entered in yearly of the window, 15 within the first and three within the final, accumulating to 99 (Determine 2 under). So the declare that this string does not title something actual is in a particular second in time, and an element that ships subsequent quarter can flip that and not using a single saved byte altering.
Another admission, and it’s maybe the strongest level in the entire piece: to construct the ground-truth column, I needed to seek the advice of the producer datasheets — an exterior catalog checked by hand — exactly as a result of the dataset itself could not reply the query. Organising the experiment required conceding its personal conclusion earlier than I might even run it.
None of that is information to the record-linkage literature. Fellegi and Sunter formalized probabilistic linkage again in 1969; Christen’s 2012 remedy lays out the boundaries of approximate matching. That string similarity alone is inadequate is established reality for names and addresses. What this piece provides to that’s that practitioners nonetheless attain for fuzzy matching on quick alphanumeric machine codes the place the failure is of sort somewhat than diploma. Identification isn’t within the codes in any respect, and the catalog holding it’s exterior and modifications over time.
The structure that survives
When you strip out what the measurement dominated out, here’s what stays.
1. Merge solely what normalization proves equivalent. The one sound computerized merge, and Step 1 already does it, is 114 keys to 99, zero danger, zero threshold.
2. Fuzzy auto-merge is rejected by proof, not warning. Conservatism implies {that a} bolder possibility exists for the risk-tolerant. There really isn’t one: the data required is absent.
3. Every little thing else defers to a human, who consults the catalog the strings don’t carry. A human can have a look at hdc1008 and hdc1080 and accurately inform them aside and document that call as a label — one thing utilized at question time, so the id saved within the knowledge stays a pure perform of what was really noticed.
Extra than simply being a comfort for edge circumstances, the label layer is important, as a result of if a matcher may safely do that work, labels would not have to exist in any respect. Three issues have to be true of them for the system to carry collectively.
Labels have to be effective-dated
Every model carries a validity interval, and a question resolves towards the model legitimate as of its declared time. Whether or not one thing is an actual half is genuinely time-varying. The catalog picked up new keys in yearly of the window, which suggests a label will be overturned by an occasion on the earth somewhat than by new knowledge arriving within the dataset. Should you edit a label in place as a substitute, you silently regroup historical past. Aggregates from final quarter cease reproducing, and a document that was right when it was written finally ends up trying prefer it all the time stated one thing totally different. The decision is to not right the previous however so far it.
The price of that’s charged to everyone, and it is easy to let the mechanism’s tidiness disguise it. As soon as labels are dated, a query like “what number of sds011 models are deployed?” does not have one reality anymore; it has a solution as of a given date, which the caller has to produce. Interfaces that by no means wanted a temporal parameter now want one. That’s the value of reproducibility.
Labels by no means return into the matcher as coaching sign
There are three separate causes for this, and any certainly one of them can be sufficient by itself. Identification wants to remain a perform of the document’s personal content material. If a matcher will get tuned on previous labeling selections, id turns into a perform of processing historical past as a substitute, and the identical enter can cease producing the identical key over time. A matcher like that additionally stops being one thing you may level to in an audit and clarify. And a system that consumes its personal labels to enhance matching has, with out actually which means to, constructed the realized matcher that was already dominated out above.
Labels are knowledge too, and knowledge drifts
That may be a genuinely awkward end result for a chunk about identifier drift if the layer meant to repair it introduces its personal model of the identical downside. As a way to sidestep that, labels should come from a managed vocabulary, get natural-keyed and normalized with the identical Step 1 perform, and carry a document of who made the choice, when, and on what proof. A label with out an creator hooked up is only a declare with out a proof.
To make certain, I examined this rule whereas writing. My ground-truth CSV has a verdict column {that a} validation script reads as a managed vocabulary. At one level, I “improved” a row by altering it to CONFIRMED REAL, PART NAME CORRECTED. It was legitimate CSV, parsed nice, and it silently dropped that row out of the confirmed set as a result of the brand new string wasn’t within the vocabulary. So the rule caught its personal creator inside roughly 4 hours of being written.
What the deferral really prices
Deferring every little thing else to a human is sensible, supplied the ensuing queue stays small. On measuring it, right here’s what I discovered. Evaluating all 99 keys pairwise comes out to 4,851 comparisons, however no person is reviewing that many by hand. Blocking cuts that additional all the way down to 30 candidate pairs, which is just 0.62 p.c of the complete house, and after the preliminary move, it settles into roughly 4 new pairs a 12 months as new keys enter the catalog. So primarily it quantities to a morning of labor upfront, and a handful of selections yearly.
Blocking itself is not new; sorted-neighborhood blocking goes again to Hernández and Stolfo in 1995, cover clustering to McCallum et al. in 2000, locality-sensitive hashing to Broder in 1997. What’s much less normal — at the very least in my expertise — is selecting amongst these guidelines by really measuring their tradeoffs somewhat than simply choosing the one which feels acquainted.
How briskly that recurring queue grows depends upon how briskly the catalog itself grows.

Which particular rule to dam on is itself a factor to measure somewhat than inherit.
|
blocking rule |
candidates |
% of all pairs |
typos surfaced |
|
edit distance ≤ 1 |
12 |
0.25% |
2 of three |
|
edit distance ≤ 2 |
46 |
0.95% |
3 of three |
|
edit distance ≤ 2, size ≥ 4 (chosen) |
30 |
0.62% |
3 of three |
|
q-gram Jaccard ≥ 0.5 |
15 |
0.31% |
2 of three |
|
similar digit signature |
18 |
0.37% |
2 of three |
Desk 2. Blocking guidelines measured towards the three verified misspellings. Three of the cheaper guidelines miss an actual typo.
Three of the foundations I examined are cheaper than the one I ended up utilizing. All three of them miss sds011/sds1001. It’s not a tuning accident; it follows straight from how digit-signature blocking works. 011 and 1001 are totally different digit strings, so these two keys by no means land in the identical block within the first place, which is the very same property that accurately retains bme280 and bme680 aside. The takeaway: the property that protects you from one type of mistake is similar one which blinds you to a different.
The quantity triage lure
There’s an optimization that can in all probability happen to anybody taking a look at this setup, and it is extra a lure than a shortcut. You can evaluation solely pairs the place each keys carry significant remark quantity on the reasoning {that a} pair affecting two observations does not deserve a lot consideration. That cuts the queue from 30 down to six, and on the floor, it appears like a free win.
It additionally removes each single verified typo from consideration.
Misspellings are uncommon nearly by definition. They’re errors sure contributors occurred to make, not one thing most individuals typed. The minority facet of my three confirmed typo pairs exhibits up 1, 2, and a couple of instances respectively. So any quantity threshold set at 5 or above would have discarded all three earlier than a human ever noticed them.
The overall model of that is price retaining in thoughts outdoors of sensors too. A frequency filter will systematically take away no matter inhabitants one is definitely looking for, any time that inhabitants is uncommon by building. On this explicit case, the queue was already sufficiently small that the shortcut wasn’t wanted anyway.
What the evaluation really buys
Right here is the uncomfortable reality. Working all 30 pairs by hand strikes a complete of 5 observations out of 4,301 — about 0.12 p.c of the information.
That naturally invitations a shortcut: why not simply merge all 30 candidates mechanically and skip the evaluation? Besides that might transfer 217 observations as a substitute of 5, as a result of a lot of the 30 pairs change into actual merchandise that simply occur to look alike. scd30 and sps30 differ by two characters and measure fully various things. The queue is generally made up of pairs that resolve to no merge. That’s the reason it wants an individual taking a look at it somewhat than a threshold deciding mechanically.
So the evaluation is affordable relative to what it protects towards, and it’s a necessity as a result of there is no technique to discover the 5 observations that do want fixing with out taking a look at all 30.
This reframes what the evaluation is definitely shopping for. Earlier than it, 2,430 observations (56 p.c of the dataset) sit on a key that has an unresolved neighbor, which suggests there is no technique to say with confidence whether or not the counts for that key are full. Following the evaluation, that query has a solution.
What you get out of this course of is not corrected knowledge precisely. It is figuring out that the information is right.
The sincere limits
This structure does not shut the hole it opened with. 99 keys went in, the area in all probability has round two dozen actual fashions, and the evaluation course of resolves 30 pairs and confirms three typos. These numbers do not reconcile, and it will be simple to let a reader come away pondering in any other case.
The reason being per every little thing else right here. Blocking solely ever surfaces pairs which are already shut collectively in string house. Each rule in Desk 2 is a few model of a distance or overlap rule, so every one finds near-duplicates and nothing past that. Two keys that title the identical half however share no characters in any respect by no means make it into the queue within the first place.
My very own floor reality provides an instance of this. dht22 and AM2302 title the identical sensor beneath two fully totally different names, sharing nothing as strings — an edit distance of 5, zero bigrams in frequent, and totally different digit signatures totally. Run each by each rule in Desk 2 and none of them proposes the pair. So the one who may resolve it in a second by no means will get requested the query.
Precision issues right here, since that’s the complete level. AM2302 by no means really seems on this explicit snapshot, whereas dht22 exhibits up 22 instances. This isn’t an noticed miss. It’s what the foundations do when handed each spellings, which is what occurs the second a second gateway reviews the producer’s title as a substitute of the market one. On this dataset, the pair is not simply failing to get flagged; it’s lacking totally from the all-pairs comparability house. There are two unbiased causes {that a} human reviewer by no means will get requested, and no threshold adjustment fixes them both. The alias downside is genuinely more durable than the typo downside, and this structure does not resolve it. It declines to guess — which is healthier than guessing mistaken — but it surely is not the identical as being completed. Closing that hole would wish a catalog with alias tables in it, not a greater blocking rule.
Two smaller limitations price naming listed below are: the scope is identifier fields solely, not the free-text descriptions of what a sensor measures, which is a associated however separate downside; and that is one snapshot of 1 crowdsourced community whose open submission kind in all probability produces extra variations than a managed schema would. The mechanism ought to generalize fairly nicely. The precise percentages in all probability should not be handled as a benchmark.
Six issues to remove
-
Construct floor reality from outdoors the information, earlier than you rating. Should you classify after scoring, you are inclined to classify to suit the scores you have already got. Mine ended up killing certainly one of my very own claims and correcting two others, which is the strategy working somewhat than a setback
-
The subtle metric is the extra harmful one. Damerau-Levenshtein’s consciousness of transpositions is precisely the type of tolerance actual product households exploit as a result of producers usually quantity associated merchandise by permuting a digit.
-
For brief alphanumeric codes, the deciding reality is outdoors the string. Whether or not two codes title the identical product is settled by a producer’s catalog, which is exterior, modifications over time, and is not reachable from the characters themselves. No metric, and no realized mannequin both will get round that.
-
A frequency filter tends to delete the precise uncommon inhabitants you’re looking for. Typos are uncommon, so quantity triage appears like an apparent win and it finally ends up eradicating each actual one.
-
Date your labels; don’t retrofit them. Whether or not one thing is actual is usually solely true as of a selected second. So efficient relationship lets a label change over time and not using a sealed historic document quietly turning into false. The tradeoff is that each downstream client of that label now has to offer an as-of date.
-
The deliverable is just not corrected knowledge. It’s figuring out that the information is right. The evaluation moved 5 observations out of 4,301, and took 56% of the information from probably fragmented to verifiably complete. The second is what’s price paying an individual for.
Abstract
This matcher was initially constructed with the intention to complete what normalization began. Nevertheless, the measurement says that it can not exist in a protected kind. 5 totally different metrics overlap as soon as checked towards the datasheet-verified floor reality and one pair of actual TI components ended up trying extra like a typo than precise typos do. The underlying motive is structural: the truth that decides id right here lives in a producer’s catalog, as a substitute of the characters of the string. What’s left? Automated merging solely the place normalization proves it protected, plus a human-adjudicated, effective-dated label layer that stays out of the mannequin totally — at 30 pairs upfront and roughly 4 a 12 months afterward.
Half 3 covers dynamic cadence and noise filtering — how briskly new identifiers present as much as be judged. Following that, Half 4 covers idempotent storage and immutable snapshots, the place versioned labels meet sealed information.
The reference implementation is anchorkey, Apache-2.0, sitting beneath device-identity layers like Eclipse Ditto and Eclipse Hono, each of which assume {that a} steady machine id already exists.
If in case you have fought this in your individual pipelines — particularly in the event you discovered a matcher that did maintain up on quick codes — I might genuinely like to listen to about it.
Reproducing the information
Each quantity comes from one re-runnable seize of the general public openSenseMap API, launched beneath the Public Area Dedication and License 1.0:
The seize is 719 bins taken at 2026-06-26 UTC, yielding 114 distinct sensorType strings and 4,301 observations. Dwell counts drift, which is the topic of this sequence; so each determine derives from the archived snapshot, deposited at DOI 10.5281/zenodo.20989076.
4 scripts regenerate each quantity quoted above, every cross-checking its output towards the values asserted right here and exiting non-zero on a mismatch: collapse_sample.py (the 114 → 99 discount), keyshape_sample.py (inhabitants figures), separability_sample.py (each rating in Desk 1), and review_queue_sample.py (queue, blocking, value, and the alias blind spot). A fifth, make_figures.py, attracts Figures 1 and a couple of.
The bottom reality is a checked-in artifact, not an appendix declare. ground_truth_catalog.csv information for every of the 16 strings — the producer, official half title, datasheet URL, lifecycle standing, entry date and verdict — together with the string I couldn’t resolve, and the three rows whose solely obtainable datasheet is a mirror somewhat than a manufacturer-hosted copy. These limits are recorded per row somewhat than smoothed over as a result of a catalog assertion sourced from a mirror is precisely the error this text is about.
References
Each entry is cited at a particular declare above, with the part bracketed.
-
I. Fellegi and A. Sunter, A Concept for Document Linkage, JASA 64(328), 1969. [Why a sixth metric doesn’t save this]
-
W. Cohen et al., A Comparability of String Distance Metrics for Identify-Matching Duties, IIWeb, 2003. [What normalization left behind]
-
P. Christen, Knowledge Matching, Springer, 2012. [Why a sixth metric doesn’t save this]
-
P. Konda et al., Magellan: Towards Constructing Entity Matching Administration Methods, PVLDB 9(12), 2016. [Why a sixth metric doesn’t save this]
-
Y. Li et al., Deep Entity Matching with Pre-Educated Language Fashions, PVLDB 14(1), 2020. [Why a sixth metric doesn’t save this] Additionally known as Ditto; unrelated to Eclipse Ditto under.
-
M. Hernández and S. Stolfo, The Merge/Purge Downside for Massive Databases, SIGMOD, 1995. [What the deferral actually costs]
-
A. McCallum et al., Environment friendly Clustering of Excessive-Dimensional Knowledge Units with Utility to Reference Matching, KDD, 2000. [What the deferral actually costs]
-
A. Broder, On the Resemblance and Containment of Paperwork, SEQUENCES, 1997. [What the deferral actually costs]
-
Unicode Standard Annex #15, Unicode Normalization Forms [What normalization left behind]
-
Eclipse Ditto · Eclipse Hono [Summary]
-
Producer datasheets for the categorised components (Bosch Sensortec, TI, Sensirion, Aosong, Nova Health), per row in ground_truth_catalog.csv. [Building a ground truth]
-
openSenseMap, public citizen-science sensor community. [Reproducing the data]
Net sources accessed 2026-08-14. Producer datasheets carry per-row entry dates in ground_truth_catalog.csv.

