Pregunta

Google tiene sugerencia llegar al realizar una entrada de error tipográfico, ¿cómo lo hacen?

Otros consejos

Peter Norvig (Director de Investigación de Google) ha escrito un pequeño pedazo de introducción a la la corrección ortográfica en Python usando heurística estadísticos.

Es un buen material de lectura, y se muestra cómo usar la heurística estadísticos de una manera muy sencilla. Podría ser portado a C # (con LINQ) con bastante facilidad (listas por comprensión de Python están muy cerca de las expresiones LINQ).

La parte central de este fragmento está teniendo todos los errores tipográficos simples para una (función edit1) palabra el C # equivalente es el siguiente

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 ();}

donde Pair es un pobre hombre tupla (código obvio no incluido) y RSlice es una cadena de sólo hombre pobre empalme derecha:

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

Una vez que tienes las ediciones de una palabra, usted busca la palabra en el diccionario o las palabras existentes de las ediciones (seleccionando la palabra más frecuente) o las palabras para edits1 (edits1 (palabra)) (la selección de los más frecuentes palabra). Sorprendentemente, esto puede ser bastante rápido y muy exacto. Voy a tener un enlace a mi blog para que todo el material portado.

Editar: oops acaba de ver que un enlace en una respuesta anterior apuntaba a un puntero a la misma pieza de Norvig ...

sólo tener conteo de frecuencia de las palabras es suficiente, no creo que se necesita somehthing complicado para esto, ni siquiera de aprendizaje automático. No hay necesidad de aprender un modelo. Si ha introducido algo extraño pero no un error tipográfico notará que tratan de "corregir" también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top