Newsgroup: it.comp.software.database
Titolo: Ricerca nomi simili in archivio relazionale

ciao
ho due archivi relazionali che contengono due anagrafiche (nome, 
cognome, datata nascita, ecc.ecc.)
 
posso accedere, scaricarli e lavorarci con VB/VBA (il linguaggio non ï¿œ 
importante)
 
questi archi contengono dei nomi duplicati ma il problema consiste nel 
fatto che alcuni nominativi NON sono stati scritti nella stessa maniera 
per errori di battitura nell'inserimento:
 
mi posso trovare un JHON o JOHN , un Rossi Mario ed un Rissi Mario
 
dovrei cercare di abbinare tra loro anche dei nomi "simili"
 
come faccio?
 
che algoritmo(metodo) usare?
 
avrei pensatoi alcune soluzioni ma mi sembrano insufficienti:
 
1) contare il numero totale di caratteri uguali e tirare fuori quelli 
che hanno almeno l'XX % (XX percentuale del 80) di caratteri uguali... 
ma non funziona bene per i nomi e cognomi corti o molto lunghi
 
2) dare un "peso" ad ogni carattere, fare l somma del nome+cognome ed 
anche qui tirare fuori quelli che hanno l'XX %  simile... boh
 
 
che ne dite?
 
 
P.S.
potreste indicarmi un forum/gruppo/sito dove chiedere?
 
grazie
 
 
 
-- 
 
Grazie
 
Red Wolf
 
--
 
  | R: Perche' incasina l'ordine con cui si legge un messaggio
  | D: Perche' quotare sotto da' cosi' fastidio?
  | R: Quotare sotto.
  | D: Qual e' la cosa piu' seccante su usenet e in e-mail?

 dovrei cercare di abbinare tra loro anche dei nomi "simili"
 
ciao.
 
Guarda se questo puo' aiutarti: 
https://en.wikipedia.org/wiki/Soundex
 
 
In che forma sono gli archivi? Se sono su un DB oracle o MSSQL
puoi usare direttamente la funzione soundex che ti danno a disposizione.
 
ciao
Giacomo


 
grazie per la risposta
 
l'archivio ï¿œ ACCESS!!!!
quell'algoritmo ï¿œ valido per la lingua inglese, l'italiano ï¿œ piï¿œ 
complesso... diverso diciamo...


 Red Wolf
 
Ciao,
mi hia messo curiositï¿œ e cosï¿œ su due piedi mi ï¿œ venuto in mente una 
sorta di trova le differenze.
Trattandosi di testo potresti trattare la stringa come un array e 
confrontare carattere per carattere, contando (ed eventualmente 
marcando) le differenze. Diventa facile a questo punto identificare 
quella che differisce di meno (o meno di un certo range impostato).
Se gli archivi sono grandi non sarï¿œ un'elaborazione velocissima, ma si 
puï¿œ sempre ottimizzare!
un saluto
 
-- 
Emanuele Desideri
 
 

 puï¿œ sempre ottimizzare!
 
 
ï¿œ un po' quello che pensavo con la soluzione 1).
in effetti forse ï¿œ la cosa + veloce da programmare....



 
Mi domandavo...deve essere una funzione del programma quella di 
ricercare i nomi simili, o devi fare un merge dei due db una tantum?
perchï¿œ nel primo caso, ci vuole qualcosa di decisamente piï¿œ 
performante, nel secondo...credo ci si possa anche adattare!
 
Altra domanda che mi sono posto, e che sicuramente anche tu avrai 
notato...va bene identificare le stringhe piï¿œ simili, ma non ï¿œ detto 
che la piï¿œ simile corrisponda ad un errore di battitura.
es. Mario Rossi e Maria Rossi
oppure Giacomo Neri e Giacomo Nero
 
e ancora come non considerare casi in cui le lettere non sono nella 
stessa cella.
es Mari Bianchi e Mario Bianchi
con la soluzione adottata la coincidenza delle lettere sarebbe 
bassissima, mentre invece ï¿œ un caso MOLTO probabile di errore di 
battitura.
 
-- 
Emanuele Desideri
 
 

 bassissima, mentre invece ï¿œ un caso MOLTO probabile di errore di battitura.
CUT
 
 
 
io trovo le "corrispondenze" probabili
le presento al cliente in un form e lui decide cosa fare, se cancellare 
uno dei due, tutti e due, nessuno...
 
l'importante ï¿œ trovarne quante piï¿œ possibili... poi a NON cancellarle ci 
pensa il cliente.



 
Usa l'algoritmo della distanza di Levenshtein, che serve proprio per 
confrontare la similarita' di due stringhe. Il numero restitutito 
rappresenta il numero minimo di spostamenti per trasformare la prima 
stringa nella seconda. Ovviamente se il numero restitutito e' zero le 
due stringhe sono uguali.
In rete si trovano spezzoni di codice gia' pronti in diversi linguaggi.
 
http://it.wikipedia.org/wiki/Distanza_di_Levenshtein
 
 
Saluti
 

 
http://it.wikipedia.org/wiki/Distanza_di_Levenshtein
 
 
 
ottimo grazie



 
 
su sql server 2012 ci sono nativamente le funzioni fuzzy logic,che trovano 
appunto stringhe simili