2012-11-06 16 views
7

Sto provando a mettere in atto un algoritmo che esegue la correzione degli errori nei nomi. Il mio approccio è avere un database con i nomi corretti, calcolare la distanza di modifica tra ognuno di essi e il nome inserito e quindi suggerire il 5 o il 10 più vicino.Correzione dell'errore nei nomi

Questa attività è significativamente diversa dalla correzione degli errori standard nelle parole poiché alcuni nomi potrebbero essere sostituiti dalle iniziali. Ad esempio "Jonathan Smith" e "J. Smith" sono in realtà abbastanza vicini e potrebbero facilmente essere considerati lo stesso nome, quindi la distanza di modifica dovrebbe essere veramente piccola se non 0. Un'altra sfida è che alcuni nomi potrebbero essere scritti in modo diverso mentre si suona il stesso. Ad esempio, Shnaider e Schneider sono versioni con lo stesso nome scritte da persone con diverse impostazioni locali (ci sono esempi migliori per quello che immagino). E un altro caso: immagina tutti gli errori possibili nella scrittura Jawaharlal Nehru molti dei quali non hanno nulla a che fare con il vero nome. Anche in questo caso probabilmente la maggior parte di essi sarà simile foneticamente.

Ovviamente l'algoritmo di correzione degli errori di Lucene non mi aiuterà qui poiché non gestisce i casi sopra descritti.

Quindi la mia domanda è: conosci qualche libreria in grado di eseguire la correzione degli errori nei nomi? Puoi proporre qualche algoritmo per gestire i casi sopra menzionati?

Sono interessato alle librerie in C++ o java. Per quanto riguarda le proposte dell'algoritmo, qualsiasi linguaggio o pseudo codice funzionerà.

+0

Vedo 2 possibili approcci qui: 1. Avere un dizionario di sinonimi e includerlo quando si calcola la distanza. 2. Utilizza un modulo AI con la logica che hai descritto. – SomeWittyUsername

+0

Credo che solo l'opzione 2 sia possibile per me dato che ho milioni di nomi, localizzazioni diverse, sinonimi diversi. Il problema qui è ** come ** per implementare la logica che descrivo specificamente la parte di somiglianza fonetica. Inoltre volevo assicurarmi che nulla di simile non sia già là fuori. –

+0

Stai molto attento a farlo. Ho appena finito un argomento di più settimane con UCSD, dove sono stato uno studente per alcuni anni che termina nel 2009. Mi stavano facendo pagare per un assegno restituito. È stato risolto solo quando alla fine ho ottenuto loro di scovare l'immagine dell'assegno, piuttosto che limitarsi a guardare i loro dischi. L'assegno è stato effettivamente scritto da qualcuno con lo stesso nome e cognome, ma con una iniziale di mezzo. Il reparto contabilità aveva ipotizzato che appartenesse al mio account in base al nome quasi-partita. Anche le corrispondenze di nomi esatte non sono molto utili per determinare se i dati riguardano la stessa persona. –

risposta

6

Per la corrispondenza fonetica, vedere Soundex.

Penso che modificare un algoritmo di distanza di Levenshtein per trattare "abbreviare a un iniziale" e "espandersi da un iniziale", come le modifiche a distanza singola dovrebbero essere semplici, ma i dettagli sono al di fuori di me al momento.

+0

Soundex è sicuramente qualcosa che posso usare. Grazie per questo :) –

Problemi correlati