Question

Google a suggestion venir quand vous faites une entrée faute de frappe, comment ils le font?

Autres conseils

Peter Norvig (directeur de la recherche à Google) a écrit un petit morceau d'introduction sur vérification orthographique en Python en utilisant des heuristiques statistiques.

Il est une excellente lecture, et montre comment utiliser des heuristiques statistiques d'une manière très simple. Il pourrait être porté à C # (avec LINQ) assez facilement (liste des compréhensions de Python sont très proches des expressions Linq).

La partie de base de cet extrait est d'avoir toutes les fautes de frappe simples pour un mot (fonction edit1) C # équivalent est le suivant

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

où Paire est un pauvre homme tuple (code évident non inclus) et RSlice est une chaîne seule pauvre homme épissage droite:

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

Une fois que vous avez obtenu les modifications pour un mot, vous recherchez le mot dans le dictionnaire ou les mots existants des modifications (en sélectionnant le mot le plus fréquent) ou les mots pour edits1 (edits1 (mot)) (sélectionner les plus fréquents mot). Étonnamment, cela peut être très rapide et tout à fait exact. Je vais avoir un lien vers mon blog pour l'ensemble des choses porté.

Edit: oops juste vu qu'un lien dans une réponse a ci-dessus pour un pointeur sur le même morceau de Norvig ...

juste avoir le nombre de fréquence des mots est assez, je ne pense pas que vous avez besoin somehthing compliqué pour cela, même pas l'apprentissage de la machine. Pas besoin d'apprendre un modèle. Si vous avez entré quelque chose d'étrange, mais pas une faute de frappe, vous remarquerez qu'ils essaient de « corriger » aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top