Domanda

Google ha suggerimento venire quando si effettua una voce di errore di battitura, come lo fanno?

Altri suggerimenti

Peter Norvig (Direttore della ricerca presso Google) ha scritto un piccolo pezzo introduttivo sul controllo ortografico in Python usando euristiche statistiche.

E 'un grande letto, e mostra come utilizzare l'euristica statistica in un modo molto semplice. Potrebbe essere portato su C # (con LINQ) abbastanza facilmente (list comprehension di Python sono molto vicini alle espressioni Linq).

La parte centrale di questo frammento è avere tutti errori di battitura semplici una parola (funzione Edit1) il C # equivalente è la seguente

public static IEnumerable<string> Edit1(string word){
const string alphabet = "abcdefghijklmnopqrstuvwxyz";
var s = from i in Enumerable.Range (0, word.Length - 1)
        select new Pair<string>(word.Substring (0, i), word.RSlice(i));

var deletes = from p in s 
          select p.First + p.Second.RSlice (1);

var transposes = from p in s 
         let b1 = p.Second 
         where b1.Length > 2 
         select p.First + b1 [1] + b1 [0] + b1.RSlice (2);

var replaces = from p in s 
           let b = p.Second 
           where b.Length > 0 
           from c in alphabet select p.First + c + b.RSlice (1);

var inserts = from p in s 
          from c in alphabet 
          select p.First + c + p.Second;

return deletes.Concat (transposes).Concat( replaces)
              .Concat(inserts).Distinct ();}

dove Pair è un povero uomo tupla (codice ovvio non incluso) e RSlice è una stringa di solo povero uomo splicing destra:

public static class Extensions {
    public static string RSlice (this string input, int i)
    {
        if (i > input.Length - 1)
            return "";
        return input.Substring (i);
    }}

Una volta che hai le modifiche per una parola, si cerca la parola nel dizionario o le parole esistenti delle modifiche (selezionando la parola più frequente) o le parole per edits1 (edits1 (parola)) (selezionando la più frequente parola). Sorprendentemente, questo può essere abbastanza veloce e abbastanza preciso. Avrò un link al mio blog per la roba tutta porting.

Modifica: oops appena visto che un link in una risposta precedente indicò un puntatore lo stesso pezzo di Norvig ...

solo avere conteggio di frequenza delle parole è abbastanza, io non pensi di aver bisogno somehthing complicato per questo, nemmeno l'apprendimento automatico. Non c'è bisogno di imparare un modello. Se hai inserito qualcosa di strano ma non un errore di battitura si noterà che cercano di "correggere" anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top