Menu

Matchen van landnamen en aliassen: definieer eerst een canonieke naam

Het matchen van landnamen en aliassen werkt alleen wanneer één naam als canoniek is aangewezen. Zonder die beslissing wordt elke vergelijking een kwestie van beoordelen.

Gepubliceerd

  • dataopschoning
  • matchen
  • landendata

Het matchen van landnamen en aliassen klinkt als een probleem van een opzoektabel. In de praktijk is de tabel het makkelijke deel; de moeilijkheid is beslissen tegen welke naam alle andere worden vergeleken.

Zonder die beslissing wordt matchen een reeks lokale beoordelingen. De ene component beschouwt twee spellingen als dezelfde, de andere niet, en het verschil komt aan het licht als een dubbel record of een mislukte join. De canonieke naam is het anker dat de rest van het werk mechanisch maakt.

Wat betekent canoniek hier?

Het betekent één aangewezen vorm per land, bewust gekozen en overal gebruikt waar een naam moet worden vergeleken, gesorteerd of als sleutel opgeslagen.

Canoniek betekent niet correct, en het betekent niet dat iedereen het verkiest. Het betekent dat één vorm als referentie is aangewezen, zodat elke andere vorm een vastgestelde relatie tot die vorm heeft. Een land kan meerdere wijdverbreide namen hebben en toch precies één canonieke vermelding.

De keuze hoort met haar reden te worden gedocumenteerd. Een team kan de vorm kiezen die in een internationale standaard wordt gebruikt omdat die stabiel is, de vorm die het meest vertrouwd is in de hoofdmarkt van het product omdat die supportcontacten vermindert, of de lokale vorm omdat die respecteert hoe inwoners hun eigen land noemen. Elk van die keuzes is verdedigbaar; een ongedocumenteerd mengsel van alle drie niet.

Waarom normaliseren voordat je vergelijkt?

Omdat twee tekenreeksen die er voor een lezer identiek uitzien kunnen verschillen op het niveau van de bytes die een computer vergelijkt. Tekens met een accent hebben meer dan één geldige codering, en tekst die op het scherm hetzelfde leest kan een gelijkheidstest tegen ruwe tekens niet doorstaan.

Beide kanten voor de vergelijking normaliseren verwijdert die hele klasse van valse mismatches. Het is een goedkope bewerking, ze is deterministisch, en ze hoort op precies één plek te gebeuren in plaats van in elke component die namen vergelijkt.

Drie verdere stappen horen ernaast. Vouw de hoofdlettergevoeligheid weg, zodat alleen een verschil in hoofdletters nooit een verschil veroorzaakt. Verwijder en vloei witruimte samen, want voorloop- en volgspatie komen binnen uit imports en uit geplakte invoer. En beslis expliciet wat je met leestekens doet, inclusief de tekens die delen van een naam scheiden, want ze weglaten verandert welke tekenreeksen overeenkomen.

Wat normalisatie niet moet doen, is tekens verwijderen of herschrijven die betekenis dragen. Een normalisatieronde die accenten uit opgeslagen gegevens haalt, verandert de gegevens; dezelfde ronde die alleen op vergelijkingsmoment wordt toegepast niet.

Wanneer helpen aliassen en wanneer misleiden ze?

Een alias verdient haar plek wanneer er een echte alternatieve vorm bestaat die anders niet zou matchen. Een voormalige officiële naam, een lokaal gebruikte naam, een gangbare afkorting en een vertaling in een wijdverbreide taal zijn allemaal legitieme vermeldingen.

Het risico is dat aliassen zich vermenigvuldigen. Elke alias die voor het gemak wordt toegevoegd is een bewering dat twee tekenreeksen naar hetzelfde land verwijzen, en een verkeerde bewering is erger dan een ontbrekende, want ze voegt stilzwijgend twee records samen tot één die over beide fout is.

Twee vangrails houden de tabel eerlijk. Ten eerste hoort elke alias een genoemde reden en een bron te hebben, zodat de bewering kan worden herzien in plaats van voor altijd te worden geërfd. Ten tweede horen aliassen niet te worden gegenereerd door een regel die plausibel lijkt maar niet waar is — een mechanische transformatie toegepast op de naam van het ene land levert tekenreeksen op die lijken op namen van andere landen.

Houd de aliastabel klein en auditabel. Een tabel van een paar honderd vermeldingen die iemand kan lezen is meer waard dan een grote gegenereerde die niemand kan controleren.

Wat gaat er mis wanneer fuzzy matching het eerste redmiddel is?

Fuzzy matching is aantrekkelijk omdat het het probleem lijkt op te lossen zonder enig datawerk. Het levert ook zelfverzekerde, stille fouten op, en dat is de moeilijkst te vinden soort.

Twee mechanismen veroorzaken de meeste schade. Namen van verschillende landen die een kleine bewerkingsafstand van elkaar verschillen, matchen op elkaar. En een typefout die toevallig dichter bij een verkeerd land ligt dan bij het juiste, wordt in de verkeerde richting gecorrigeerd.

Strategie Wat ze oplost Wat ze kost
Exacte match op een canonieke vorm Niets buiten de vorm zelf Mist elke variant
Normaliseren en dan matchen Verschillen in codering, hoofdletters en witruimte Mist echte varianten
Canonieke vorm plus samengestelde aliassen Bekende variantnamen en vertalingen Vereist onderhoud
Fuzzy matching overal Onbekende typefouten Stille samenvoegingen van verschillende landen

De praktische volgorde is die van de tabel van boven naar beneden, met fuzzy matching als laatste, op het restant, en alleen waar een verkeerd antwoord goedkoop terug te draaien is. Een fuzzy match die een suggestie voor een mens oplevert om te bevestigen is een andere functie dan een fuzzy match die een waarde wegschrijft.

Moeten namen überhaupt worden opgeslagen?

Sla de code op, en behandel de naam als iets dat voor een lezer wordt weergegeven in plaats van als de identiteit van een record.

Namen veranderen; codes worden juist onderhouden zodat de identiteit de verandering overleeft. Een record waarvan de identiteit een naam is, wordt dubbelzinnig op het moment dat die naam wordt herzien of vertaald, en de dubbelzinnigheid is onzichtbaar tot twee records die er één zouden moeten zijn naast elkaar verschijnen.

Een weergavenaam moet nog steeds worden opgeslagen of gegenereerd, en ze hoort te worden gelabeld als wat ze is. Een veld dat name heet en zowel als label als als joinsleutel wordt gebruikt, zal uiteindelijk als de verkeerde worden gebruikt.

Voor ontwikkelaars: zet de vergelijking achter één functie

Centraliseer de vergelijking in plaats van haar te herhalen. Eén plek die normaliseert, de aliastabel toepast en de uitkomst bepaalt, betekent dat de regels één keer kunnen worden herzien en één keer gewijzigd, en dat elke aanroeper hetzelfde gedrag erft.

Waar de uitkomst onzeker is, geef dan liever een gerangschikte suggestie terug dan een beslissing. De landen- en regiorgids presenteert namen naast hun codes, wat de combinatie is die een verkeerde match zichtbaar maakt in plaats van plausibel, en voor de taalkundige achtergrond van hoe namen zich per taal gedragen behandelt de gids over naamgegevens per locale de taalkant die dit artikel bewust weglaat. Het gedrag op het niveau van het besturingselement van een kiezer die deze matches gebruikt, wordt behandeld in de gids over het testen van landselectievelden.

De aliasvermeldingen en spellingsvarianten die hierboven als voorbeeld worden gebruikt, zijn verzonnen ter illustratie. Ze zijn geen echte aliastabel, ze weerspiegelen geen gepubliceerde naamgevingsconventie, en geen voorbeeld in dit artikel mag worden behandeld als een officiële of voorkeursnaam voor enig land.

Volgende stappen

Schrijf je canonieke vorm voor één land op en de reden dat die is gekozen, en tel dan hoeveel plekken in je systeem namen vergelijken zonder een gedeelde stap te doorlopen. De gids over land versus taal legt uit waarom een vertaalde naam een zorg van de taallaag is in plaats van een verandering van identiteit.

Verder lezen

Handleidingen over Adres- en identiteitsgegevensformaten voor 86 landen