come riconoscere parole simili con differenze di ortografia

Voglio filtrare i nomi dei clienti duplicati da un database. Un singolo cliente può avere più di una voce nel sistema con lo stesso nome ma con una piccola differenza nell’ortografia. Quindi ecco un esempio: un cliente di nome Brook può avere tre voci nel sistema con queste variazioni:

  1. Brook Berta
  2. Bruck Berta
  3. Biruk Berta

Supponiamo di mettere questo nome in una colonna del database. Vorrei conoscere i diversi meccanismi per identificare tali duplicazioni sotto forma di 100.000 record. Potremmo usare le espressioni regolari in C # per scorrere tutti i record o qualche altra tecnica di abbinamento dei pattern oppure possiamo esportare questi record in base a ciò che si adatta meglio a tali query (SQL con funzionalità di espressione regolare)).

Questo è quello che ho pensato come soluzione

  • Scrivi un codice C # per scorrere ogni record
  • Ricevi solo le lettere della consonante in ordine (nel caso precedente: BrKBrt)
  • Cerca lo stesso pattern Consonant dagli altri record considerando le stesse lettere sonore come (C, K) (C, S), (F, PH)

Quindi per favore inoltrare eventuali idee.

    L’algoritmo Double Metaphone , pubblicato nel 2000, è una versione nuova e migliorata dell’algoritmo Soundex che è stato brevettato nel 1918.

    L’articolo contiene collegamenti alle implementazioni di Double Metaphone in molte lingue.

    Dai un’occhiata a Soundex

    Esiste una funzione Soundex in Transact-SQL (vedere http://msdn.microsoft.com/en-us/library/ms187384.aspx ):

    SELECT SOUNDEX('brook berta'), SOUNDEX('Bruck Berta'), SOUNDEX('Biruk Berta') 

    restituisce lo stesso valore B620 per ciascuno dei valori di esempio

    Gli algoritmi ovvi, consolidati (e ben documentati) per trovare la similarità delle stringhe sono:

    • Distanza Levenstein
    • Soundex

    Prenderò in considerazione la possibilità di scrivere qualcosa come il “famoso” correttore ortografico di Python.

    http://norvig.com/spell-correct.html

    Questo prenderà una parola e troverà tutte le possibili alternative in base alle lettere mancanti, aggiungendo lettere, scambiando lettere, ecc.

    Potresti voler google per phonetic similarity algorithm e troverai molte informazioni a riguardo. Compreso questo articolo su Codeproject sull’implementazione di una soluzione in C #.

    Guarda in soundex. È una libreria piuttosto standard nella maggior parte delle lingue che fa ciò che richiede, cioè identifica algoritmicamente la somiglianza fonetica. http://en.wikipedia.org/wiki/Soundex

    C’è un ottimo R (basta cercare “R” in Google) per Record Linkage. Gli esempi standard riguardano esattamente il tuo problema: R RecordLinkage

    Il codice C per Soundex ecc. È preso direttamente da PostgreSQL!

    Suggerirei Soundex e algoritmi derivati ​​oltre la distanza di Lev per questa soluzione. La distanza di Levenstein è più appropriata per le soluzioni di controllo ortografico.