2012-12-03 12 views
10

Ho una vasta collezione di nomi di persone (ad esempio "john smith"). Voglio cercare persone per nome in esso. Tuttavia, alcune delle query verranno errate (ad es. "Jon smth", "johnsm ith"). Esistono librerie di correzione ortografica con collegamenti Python che potrebbero trovare corrispondenze corrette per la correzione ortografica?Correzione ortografica per nomi di persone (Python)

Sono a conoscenza di Whoosh e Python-aspell. La correzione ortografica di Whoosh non funziona per me perché scrive la raccolta di ortografie corrette su disco invece di memorizzarle in memoria. Ciò rende le ricerche troppo lente per la mia applicazione. Non sembra essere banale cambiare questo comportamento, a causa di come il codice è strutturato. Anche Whoosh non appesantisce diversamente le diverse modifiche dei caratteri anche se, per esempio, una 'y' è molto più probabile che venga confusa con una 'i' ("jim kazinsky" -> "jim kazinski") che è una 'z' .

Aspell non funziona bene con i nomi delle persone, poiché i nomi contengono in genere spazi bianchi - Aspell considera la parola come l'unità fondamentale di correzione. Inoltre, a quanto ho capito, Aspell utilizza un modello n-gram di correzione ortografica, piuttosto che un modello di distanza di modifica del personaggio. Mentre un modello n-gram ha senso per le parole del dizionario, non funziona altrettanto bene per i nomi: le persone "bob ruzatoxg" e "joe ruzatoxg" hanno in comune un sacco di trigrammi rari, poiché hanno lo stesso raro cognome . Ma sono chiaramente persone diverse.

Vorrei anche ricordare che non posso solo confrontare ogni query con tutte le voci della collezione - sarebbe troppo lento. Alcuni indici devono essere costruiti in anticipo.

Grazie!

risposta

6

Suoni come (nessun gioco di parole previsto) è necessario un qualche tipo di Metaphone algorithm, che è stato implementato in Python ed è disponibile su Pypi: http://pypi.python.org/pypi/Metaphone/0.4.

Ci sono altri algoritmi anche, come Levenshtein e Soundex (non hanno ancora trovato un'implementazione di Python affidabile di questo) - si potrebbe voler calcolare una qualche forma di metriche utilizzando più di uno di questi (forse anche dare peso diverso ad ogni risultato) per trovare una lista di risultati di correzioni probabili.

+0

La libreria Metaphone sembra utile, grazie per quello. Se finisco per scrivere il mio correttore ortografico per i nomi (e mi sto ancora dando da fare sperando che qualcuno abbia già scritto uno che posso usare ...), probabilmente userò la corrispondenza di Metaphone di una parte della metrica. – Jeff

+0

La libreria Levenshtein sembra essere di più per la corrispondenza a coppie tra due stringhe. Non penso di poterlo usare, perché poi dovrò confrontare ogni query con ogni stringa di nome nella mia collezione. Con la libreria Metaphone, tuttavia, dovrei essere in grado di creare un dizionario delle rappresentazioni fonetiche dei nomi nella mia raccolta prima di elaborare le query. – Jeff

+2

[fuzzywuzzy] (http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python) potrebbe essere un'opzione. – Matthias

Problemi correlati