Scrivere un correttore ortografico simile a "intendevi"

4

Spero di scrivere un correttore ortografico per le query di ricerca in un'applicazione web, non diversamente da Google "Intendevi?" L'algoritmo sarà liberamente basato su questo: link

In breve, genera candidati per la correzione e li classifica sulla frequenza con cui appaiono (insieme alle parole adiacenti nella query di ricerca) in un enorme insieme di noti n-grammi - Google Web 1T - che contiene oltre 1 miliardo e mezzo grammi.

Non sto usando il set di dati Web 1T, ma sto costruendo i miei set n-gram dai miei documenti - circa 200k doc, e sto stimando decine o centinaia di milioni di n-grammi saranno generati.

Questo tipo di processo sta spingendo i limiti della mia comprensione delle prestazioni di base del computing: posso semplicemente caricare i miei n-grammi in memoria in un hashtable o dizionario quando l'app inizia? L'unico fattore limitante è la quantità di memoria sulla macchina?

O sto abbaiando dall'albero sbagliato? Forse mettendo tutti i miei n-grammi in un database grafico con una sorta di ottimizzazione delle query sugli alberi? Potrebbe mai essere abbastanza veloce?

    
posta user888734 10.05.2014 - 22:16
fonte

1 risposta

2

Per prima cosa lo implementerei in memoria, perché è più semplice e potrebbe funzionare. Tuttavia, mi aspetto che non lo farà. Mi piacerebbe quindi passare ad un sistema offline con cui hai familiarità (database?) E vedere quanto è lento. Potrebbe essere abbastanza veloce da rimanere semplice. Sospetto che sarà troppo lento.

Ora arriviamo alla parte divertente. La prima parola a cui ho pensato quando ho letto questo è "cache". Con un po 'di fortuna, avrai abbastanza memoria per costruire una cache abbastanza grande da risolvere i problemi di velocità con il database, perché non ti accederai spesso.

Se ciò non funziona, la prossima cosa che proverei sarebbe quella di comprimere le mie informazioni il più stretto possibile per cercare di ottenerle di più nella memoria. Ciò richiederà più lavoro, in quanto imparerai come la lingua scelta memorizza le informazioni. Potresti finire per passare a una lingua in cui hai più controllo sulla quantità di spazio necessaria per memorizzare un n-grammo, o puoi comprimerli e decomprimerli quando ne hai bisogno. Questo dovrebbe renderti un programmatore migliore, ma richiederà più tempo.

Come sempre, trova il tuo percorso, fai prima le cose più facili e non aver paura di sperimentare e fallire. Buona fortuna.

    
risposta data 03.06.2014 - 03:58
fonte

Leggi altre domande sui tag