Skip to main content

Fuzzy Name Matching Sample Dataset: Hard-Case Corpus for Person and Organization Name Matching

This 300-row corpus covers the name-matching cases a naive string-distance matcher gets wrong: transliteration, hyphenated surnames, married-name changes, OCR artifacts, DBA trade names, legal suffix toggles, merger prefixes, subsidiary suffixes, and hard negatives (distinct entities that share an identical name). Each row carries a Master ID and a variant-class label.

300 rows across 100 groups · free sample, no signup

License: As of 2026-08-02, no public license has been published for this sample dataset. License metadata is omitted until a license is published.

What this corpus covers

Twelve variant classes across PERSON and ORG entity types. Unlike the fuzzy matching test data, full guide easy-class download, every class here is one where a naive Levenshtein or Soundex matcher typically fails. For full-customer-record resolution (name plus address, email, phone), see the duplicate customer records for name matching.

Preview

Fuzzy name matching sample preview
record_idmaster_identity_typeduplicate_typename_originalname_variantgenerator_scenario
11PERSONMASTERMaría GarcíaMaría García
21PERSONTRANSLITERATIONMaría GarcíaMaria Garciascenario_transliteration
31PERSONHYPHENATED_SURNAMEMaría GarcíaMaría García-Lopezscenario_hyphenated_surname
42PERSONMASTERCatherine SmithCatherine Smith
52PERSONMARRIED_NAME_CHANGECatherine SmithCatherine Williamsscenario_married_name_change
62PERSONOCR_SCANCatherine SmithCATHERINE SMYTHscenario_ocr_scan
73ORGMASTERAcme Technologies Inc.Acme Technologies Inc.
83ORGLEGAL_SUFFIX_TOGGLEAcme Technologies Inc.Acme Technologies LLCscenario_legal_suffix_toggle
93ORGDBA_TRADE_NAMEAcme Technologies Inc.Acme Technologies Inc. dba Acme Solutionsscenario_dba_trade_name
29555PERSONHARD_NEGATIVEMaría GarcíaMaría García

Data dictionary

Data dictionary
ColumnTypeDescription
record_idintegerUnique row identifier, 1 to N.
master_idintegerCanonical identity ID. Primary groups: 1 to 50. Hard-negative identities: 51 to 100.
entity_typeenumPERSON or ORG.
duplicate_typeenumPage-authored variant class. See variant class reference.
name_originalstringCanonical name form the matcher should resolve to.
name_variantstringVariant name form on this row. Equals name_original on MASTER and HARD_NEGATIVE.
generator_scenariostring (nullable)Scenario function key from scenarios_person.py or scenarios_org.py. Empty on MASTER and HARD_NEGATIVE.

Variant class reference

Variant classes and naive-matcher failure modes
duplicate_typeEntity typeDefinitionWhy naive fails
MASTERPERSON or ORGCanonical reference record.Baseline
TRANSLITERATIONPERSONDiacritics stripped or ASCII-folded.UTF-8 byte Levenshtein inflates distance
TRANSLITERATION_PARTIALPERSONTransliteration plus a blanked contact field.False non-match after blocking on missing field
HYPHENATED_SURNAMEPERSONHyphenated second surname component added.Raw last-name edit distance equals appended length
DOUBLE_SURNAME_REORDERPERSONTwo-part last name components swapped.Concatenated Levenshtein fails; token-set works
MARRIED_NAME_CHANGEPERSONLast name fully replaced; first name unchanged.Whole-name distance high; only first name agrees
LEGAL_NAME_CHANGEPERSONLast name replaced; address also changes.Name and address both diverge
OCR_SCANPERSON or ORGUppercased with 0 to 2 character noise edits.Case-sensitive match fails at tight thresholds
DBA_TRADE_NAMEORGDBA or shortened trade name form.Large whole-string distance to legal name
LEGAL_SUFFIX_TOGGLEORGLegal suffix swapped (Inc ↔ LLC, etc.).Suffix-sensitive exact match fails
MERGER_PREFIXORGAcquirer name prepended with dba separator.Original name is a suffix token only
SUBSIDIARY_SUFFIXORGDivision label appended with an em dash.Prefix-unaware Levenshtein fails on length
HARD_NEGATIVEPERSON or ORGDistinct entity sharing an exact name.Name-only exact match returns false MATCH

Worked example test cases

Expected verdicts per variant class
duplicate_typename_originalname_variantExpected verdictWhy naive fails
TRANSLITERATIONMaría GarcíaMaria GarciaMATCHByte-level exact match fails; NFD + ASCII fold needed
TRANSLITERATION_PARTIALMaría GarcíaMaria Garcia (contact blank)MATCHSame as transliteration, plus missing blocking field
HYPHENATED_SURNAMEGarcíaGarcía-LopezMATCHEdit distance equals appended component length
DOUBLE_SURNAME_REORDERGarcía LópezLópez GarcíaMATCHSorted-token comparison resolves; raw Levenshtein does not
MARRIED_NAME_CHANGECatherine SmithCatherine WilliamsMATCHOnly first-name token agrees
LEGAL_NAME_CHANGECatherine SmithCatherine JohnsonMATCHName and address both change
OCR_SCANJonathan ReyesJONATHAN REYESMATCHCase-sensitive exact match fails
DBA_TRADE_NAMEAcme Technologies Inc.Acme Technologies Inc. dba Acme SolutionsMATCHTrade name distance is large
LEGAL_SUFFIX_TOGGLEAcme Technologies Inc.Acme Technologies LLCMATCHNeeds strip-suffix normalization
MERGER_PREFIXAcme TechnologiesGlobalCo dba Acme TechnologiesMATCHOriginal name is a suffix token
SUBSIDIARY_SUFFIXAcme TechnologiesAcme Technologies: A DivisionMATCHPrefix match / token-subset needed
HARD_NEGATIVEMaría García (master_id 1)María García (master_id 55)NO MATCHExact name, distinct entities

Organization-name variation and hard-negative collisions

Four ORG classes (DBA_TRADE_NAME, LEGAL_SUFFIX_TOGGLE, MERGER_PREFIX, SUBSIDIARY_SUFFIX) cover legal-name versus trade-name and suffix/prefix noise. HARD_NEGATIVE rows share an exact name_original with a primary group but use master_id 51 to 100: the correct verdict is NO MATCH. Name-only matchers cannot resolve that case without non-name context, which is intentionally absent here.

Generate a larger version

Need more rows, a different variant mix, or additional entity types? Open the Generate-Data schema builder, add Name fields, switch on duplicate generation mode, set your variation-type mix, and export in CSV, JSON, XML, Parquet, XLSX, JSONL, or HuggingFace Datasets format. Anonymous use is free with no signup, capped at 100 rows, 6 fields, 3 exports, and CSV only. Sign in for larger exports and the full format menu.

Synthetic data: no real people, no real organizations, no real PII. No accuracy claim is made about any matching algorithm. Seed recorded as 20260801 for reproducibility.

Frequently asked questions

What makes this dataset different from the existing fuzzy-matching-test-data download?

The existing /fuzzy-matching-test-data file covers 7 easy-class variants where Levenshtein or Soundex usually gets the right answer. This corpus covers 12 hard-case classes where naive string distance fails, adds organization-name variants, and introduces hard negatives: distinct entities that share an exact name.

What is a hard negative in name matching?

A hard negative is a record pair where the names are exactly identical but the entities are distinct. A naive name-only matcher returns MATCH; the correct verdict is NO MATCH. In this corpus, hard-negative rows carry master_id values in range 51 to 100 and duplicate_type HARD_NEGATIVE.

Why does transliteration break string-distance matching?

Raw Levenshtein on UTF-8 multi-byte codepoints inflates edit distance for accented characters. The correct technique is Unicode NFD normalization followed by ASCII folding before comparison.

How do I use the master_id column as an answer key?

All rows sharing the same master_id represent the same synthetic entity. HARD_NEGATIVE rows use master_id 51 to 100 and are distinct entities despite sharing a name with a primary group. Compare your matcher output against this key to compute precision and recall.

Can I generate a larger version of this corpus with my own field set?

Yes. The Generate-Data schema builder supports duplicate generation mode with a configurable variant-type mix. Anonymous use is free with no signup, capped at 100 rows, 6 fields, 3 exports, and CSV only. Sign in for larger exports and the full format menu.