Most individuals who reconcile messy identifiers attain for a similar strategy: take an edit-distance metric, choose a threshold, and merge something shut sufficient. Damerau-Levenshtein is the plain 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 had been swapped — a slip anybody may make on a keyboard. Plain edit distance treats this as two edits, the identical worth it could cost for 2 completely totally different merchandise. Damerau-Levenshtein however 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.
Nonetheless, 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. Observe how the identical property that makes it higher at recognizing human errors additionally causes it to merge two solely 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 need to examine any of the numbers your self.
On this piece, I’ll stroll by what occurred after I measured 5 string-similarity metrics in opposition to the bottom fact I verified from producer datasheets, why none of them might 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 destructive consequence. When you’re in search of 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 simple 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 had been utilized. SDS 011, SDS011 and sds011 all converged to develop into sds011. The merge carried no danger in any respect because the variations had been purely stylistic and the perform doing the collapsing was deterministic.
99 keys continues to be much more than what the area really incorporates. My greatest 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 % 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 seems. Approximate string matching wasn’t actually constructed for it. Cohen, Ravikumar, and Fienberg’s 2003 comparability of string metrics benchmarks in opposition to identify 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 manner. 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 development somewhat than by a threshold {that a} tuning cross may loosen later. This manner no matter security it has is constructed into the logic somewhat than sitting in a weighted setting.
That construction nevertheless does not clear up 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 at least one 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 fact you may really examine
That query cannot be answered with the info readily available. The snapshot tells us how usually every string reveals up, but it surely does not inform us which strings really identify an actual delivery half, and that query wants answering.
So I constructed the column manually earlier than operating a single similarity rating. That order was deliberate as a result of if you happen to classify strings after you have already seen how they rating, you are inclined to classify them to suit the scores with out even that means to.
For every of the 16 strings, I seemed up the producer’s datasheet and recorded a verdict, the official half identify, 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 had been notably extra fascinating than the matcher outcomes.
-
First, one of many assumptions I had turned out to be fallacious. I might assumed bmp200 was a typo of bmp280. Bosch’s stress sensor line runs BMP085, BMP180, BMP280, BMP388 — there isn’t any BMP200 in it. However upon additional investigation, I came upon that BMP200 is a PM10 particulate analyzer from Targeted Photonics, a wholly 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 stress 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 depend from 4 pairs down to 3 makes the sample more durable to show), but it surely held up anyway.
-
Second, an early affirmation turned out to be incorrect. An earlier cross by the info 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 fallacious, 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 reveals 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 identify the complete area makes use of for it is not what the producer makes use of. That is the third form 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 each side are actual merchandise {that a} merge would silently common collectively.
5 metrics, and never one in every 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 brink free sufficient to catch all three misspellings, then depend what comes with it. Plain edit distance merges all seven actual pairs. Damerau-Levenshtein: seven. Two-stage: seven. q-gram Jaccard: three. Jaro-Winkler, the perfect of the 5, merges one.
Not one in every of them merges none.
The pair that settles the query is hdc1008/hdc1080, the 2 actual Texas Devices components talked about earlier. They are not variants of one another: totally different packages, totally different provide ranges, and ±4 %RH accuracy in opposition to ±2 %RH. Due to this fact, merging them would fold a sensor with twice the error into one with half of it. Jaro-Winkler scores this pair 0.971, greater than the perfect 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 no less than one actual misspelling.
|
pair |
Lev |
D-L |
two-stage |
J-W |
q-gram |
fact |
|
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 below all 5 metrics, in opposition to datasheet-verified floor fact. Daring marks the row that defeats the board. Pairs use the info as-is as a substitute of the official half names: dht22 is what the info incorporates, although the producer calls that half AM2302. A matcher solely ever sees the left column, and that hole is the true drawback.
It is price being exact that one pair is sufficient right here. The pure objection that n=10 pairs is just too small a pattern applies to a distinct form 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 fee 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 fact. 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 solely doable some untested metric would have seemed prefer it labored on this explicit pattern. However the declare I need 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.
Contemplate the pair I scrapped earlier. If Bosch ships a BMP200 subsequent yr, the connection between bmp280 and bmp200 flips from typo to distinct, and neither string modifications by a single character. What does is a call 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 purpose 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 situation 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 strategy from Li et al. in 2020 — however each assume you’ve got labeled coaching knowledge and a few tolerance for fashions whose reasoning you may’t absolutely interrogate. A skilled mannequin would fail right here for a similar purpose the hand-built ones do: the sign it could want simply is not within the enter. When you hand it the catalog straight, you have principally 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 hard and fast 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 identify 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.
Yet one more 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. Establishing 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 bounds of approximate matching. That string similarity alone is inadequate is established truth for names and addresses. What this piece provides to that’s that practitioners nonetheless attain for fuzzy matching on quick alphanumeric gadget codes the place the failure is of form somewhat than diploma. Id 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 automated 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 choice exists for the risk-tolerant. There really isn’t one: the data required is absent.
3. All the things 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 must exist in any respect. Three issues should be true of them for the system to carry collectively.
Labels should be effective-dated
Every model carries a validity interval, and a question resolves in opposition to 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 could be overturned by an occasion on the planet somewhat than by new knowledge arriving within the dataset. When 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 appropriate when it was written finally ends up trying prefer it at all times mentioned one thing totally different. The decision is to not appropriate the previous however up to now it.
The price of that’s charged to all people, and it is easy to let the mechanism’s tidiness conceal it. As soon as labels are dated, a query like “what number of sds011 models are deployed?” does not have one fact 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 worth of reproducibility.
Labels by no means return into the matcher as coaching sign
There are three separate causes for this, and any one in every of them can be sufficient by itself. Id wants to remain a perform of the document’s personal content material. If a matcher will get tuned on previous labeling choices, 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 that means to, constructed the realized matcher that was already dominated out above.
Labels are knowledge too, and knowledge drifts
That will be a genuinely awkward consequence for a chunk about identifier drift if the layer meant to repair it introduces its personal model of the identical drawback. To be able 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 sure, 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 effective, 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 part else to a human is sensible, offered 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 simply 0.62 % of the complete house, and after the preliminary cross, it settles into roughly 4 new pairs a yr as new keys enter the catalog. So primarily it quantities to a morning of labor upfront, and a handful of choices 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 customary — no less than 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 is dependent 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 in opposition to the three verified misspellings. Three of the cheaper guidelines miss an actual typo.
Three of the principles 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 form of mistake is similar one which blinds you to a different.
The quantity triage lure
There’s an optimization that may in all probability happen to anybody this setup, and it is extra a lure than a shortcut. You would evaluation solely pairs the place each keys carry significant statement 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 seems 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 aspect of my three confirmed typo pairs reveals up 1, 2, and a pair of occasions 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 holding 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 development. 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 truth. Working all 30 pairs by hand strikes a complete of 5 observations out of 4,301 — about 0.12 % of the info.
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 transform actual merchandise that simply occur to look alike. scd30 and sps30 differ by two characters and measure utterly various things. The queue is usually made up of pairs that resolve to no merge. That’s the reason it wants an individual it somewhat than a threshold deciding mechanically.
So the evaluation is reasonable relative to what it protects in opposition to, and it is necessary as a result of there isn’t any solution to discover the 5 observations that do want fixing with out all 30.
This reframes what the evaluation is definitely shopping for. Earlier than it, 2,430 observations (56 % of the dataset) sit on a key that has an unresolved neighbor, which suggests there isn’t any solution 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 understanding that the info is appropriate.
The trustworthy 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 could be simple to let a reader come away considering in any other case.
The reason being per every part else right here. Blocking solely ever surfaces pairs which might be already shut collectively in string house. Each rule in Desk 2 is a few model of a distance or overlap rule, so each finds near-duplicates and nothing past that. Two keys that identify 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 fact provides an instance of this. dht22 and AM2302 identify the identical sensor below two utterly totally different names, sharing nothing as strings — an edit distance of 5, zero bigrams in frequent, and totally different digit signatures solely. Run each by each rule in Desk 2 and none of them proposes the pair. So the one that may resolve it in a second by no means will get requested the query.
Precision issues right here, since that’s the entire level. AM2302 by no means really seems on this explicit snapshot, whereas dht22 reveals up 22 occasions. This isn’t an noticed miss. It’s what the principles do when handed each spellings, which is what occurs the second a second gateway stories the producer’s identify as a substitute of the market one. On this dataset, the pair is not simply failing to get flagged; it’s lacking solely 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 drawback is genuinely more durable than the typo drawback, and this structure does not clear up it. It declines to guess — which is healthier than guessing fallacious — 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 drawback; 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 moderately nicely. The precise percentages in all probability should not be handled as a benchmark.
Six issues to remove
-
Construct floor fact from outdoors the info, earlier than you rating. When you classify after scoring, you are inclined to classify to suit the scores you have already got. Mine ended up killing one in every of my very own claims and correcting two others, which is the strategy working somewhat than a setback
-
The delicate metric is the extra harmful one. Damerau-Levenshtein’s consciousness of transpositions is strictly the form 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 truth is outdoors the string. Whether or not two codes identify 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 seems 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 commonly solely true as of a specific 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 isn’t corrected knowledge. It’s understanding that the info is appropriate. The evaluation moved 5 observations out of 4,301, and took 56% of the info from presumably fragmented to verifiably entire. The second is what’s price paying an individual for.
Abstract
This matcher was initially constructed with the intention to complete what normalization began. Nonetheless, the measurement says that it can not exist in a secure kind. 5 totally different metrics overlap as soon as checked in opposition to the datasheet-verified floor fact and one pair of actual TI components ended up trying extra like a typo than precise typos do. The underlying purpose 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 secure, plus a human-adjudicated, effective-dated label layer that stays out of the mannequin solely — at 30 pairs upfront and roughly 4 a yr 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} secure gadget id already exists.
You probably have fought this in your individual pipelines — particularly if you happen to discovered a matcher that did maintain up on quick codes — I’d genuinely like to listen to about it.
Reproducing the info
Each quantity comes from one re-runnable seize of the general public openSenseMap API, launched below the Public Area Dedication and License 1.0:
The seize is 719 containers taken at 2026-06-26 UTC, yielding 114 distinct sensorType strings and 4,301 observations. Stay 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 in opposition to 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 pair of.
The bottom fact is a checked-in artifact, not an appendix declare. ground_truth_catalog.csv information for every of the 16 strings — the producer, official half identify, 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 strictly 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 Principle 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 Title-Matching Duties, IIWeb, 2003. [What normalization left behind]
-
P. Christen, Information Matching, Springer, 2012. [Why a sixth metric doesn’t save this]
-
P. Konda et al., Magellan: Towards Constructing Entity Matching Administration Techniques, 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 Information Units with Software 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 Normal Annex #15, Unicode Normalization Varieties [What normalization left behind]
-
Eclipse Ditto · Eclipse Hono [Summary]
-
Producer datasheets for the labeled 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.















