Domanda

Ho diverse fonti di tabelle con dati personali, come questa:

SOURCE 1
ID, FIRST_NAME, LAST_NAME, FIELD1, ...
1, jhon, gates ...

SOURCE 2
ID, FIRST_NAME, LAST_NAME, ANOTHER_FIELD1, ...
1, jon, gate ...

SOURCE 3
ID, FIRST_NAME, LAST_NAME, ANOTHER_FIELD1, ...
2, jhon, ballmer ...

Quindi, supponendo che i record con ID 1, provenienti dalle fonti 1 e 2, siano la stessa persona, il mio problema è come determinare se un record in ogni fonte rappresenta la stessa persona . Inoltre, assicurarsi che non tutti i record esistano in tutte le fonti. Tutti i nomi sono scritti principalmente in spagnolo.

In questo caso, l'esatta corrispondenza deve essere allentata perché supponiamo che le fonti di dati non siano state rigorosamente controllate rispetto all'ufficio ufficiale di identificazione del paese. Inoltre, dobbiamo supporre che errori di battitura siano comuni , poiché la natura dei processi per raccogliere i dati. Inoltre, la quantità di record è di circa 2 o 3 milioni in ogni fonte ...

Il nostro team aveva pensato a qualcosa del genere: in primo luogo, impone la corrispondenza esatta in campi selezionati come ID NUMBER e NAMES per sapere quanto può essere difficile il problema. Secondo, rilassare i criteri di corrispondenza e contare quanti record si possono abbinare di più, ma è qui che sorge il problema: come fare per rilassare i criteri di corrispondenza senza generare troppo rumore né limitare troppo?

Quale strumento può essere più efficace per gestirlo? Ad esempio, conosci qualche estensione specifica in qualche motore di database per supportare questa corrispondenza? Conosci algoritmi intelligenti come soundex per gestire questa corrispondenza approssimativa, ma per i testi spagnoli?

Qualsiasi aiuto sarebbe apprezzato!

Grazie.

È stato utile?

Soluzione

Il punto cruciale del problema è calcolare una o più misure di distanza tra ogni coppia di voci e quindi considerarle uguali quando una delle distanze è inferiore a una certa soglia accettabile. La chiave è impostare l'analisi e quindi variare la distanza accettabile fino a raggiungere quello che consideri il miglior compromesso tra falsi positivi e falsi negativi.

Una misurazione della distanza potrebbe essere fonetica. Un altro che potresti considerare è il Levenshtein o modificare la distanza tra gli imperi, che tenterebbe di misurare i refusi .

Se hai un'idea ragionevole di quante persone dovresti avere, allora il tuo obiettivo è quello di trovare il punto giusto in cui stai ottenendo il giusto numero di persone. Rendi il tuo abbinamento troppo sfocato e ne avrai troppo pochi. Rendilo restrittivo e ne avrai troppi.

Se sai all'incirca quante voci una persona dovrebbe avere, puoi usarla come metrica per vedere quando ti stai avvicinando. Oppure puoi dividere il numero di record nel numero medio di record per ogni persona e ottenere un numero approssimativo di persone per le quali stai girando.

Se non hai alcun numero da usare, allora rimani a scegliere gruppi di record dalla tua analisi e controlla a mano se assomigliano o meno alla stessa persona. Quindi è indovinare e controllare.

Spero che sia d'aiuto.

Altri suggerimenti

Sembra un problema Customer Data Integration . Cerca su quel termine e potresti trovare qualche informazione in più. Inoltre, dai un'occhiata all'interno di The Data Warehousing Institude e potresti trovare anche delle risposte.

Modifica: Inoltre, ecco un articolo che potrebbe interessarti sulla corrispondenza fonetica spagnola.

Prima dovevo fare qualcosa di simile e quello che ho fatto è stato usare un doppio metafono ricerca fonetica sui nomi.

Prima di confrontare i nomi, però, ho provato a normalizzare qualsiasi differenza di nome / nickname cercando il nome in una tabella dei nick che ho creato. (Ho popolato la tabella con i dati del censimento che ho trovato online) Quindi le persone chiamate Bob sono diventate Robert, Alex è diventato Alexander, Bill è diventato William, ecc.

Modifica : Double Metaphone è stato appositamente progettato per essere migliore di Soundex e funzionare in lingue diverse dall'inglese.

SSIS, prova a utilizzare la trasformazione Ricerca fuzzy

Solo per aggiungere alcuni dettagli per risolvere questo problema, ho trovato questi moduli per Postgresql 8.3

Potresti provare a canonicalizzare i nomi confrontandoli con un dizionario. Ciò ti consentirebbe di individuare alcuni errori di battitura comuni e correggerli.

Mi sembra che tu abbia un record linkage . Puoi utilizzare i riferimenti nel link.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top