2011-09-18 4 views
2

Je suis sûr que j'ai vu un post sur Meta ou SO où Jeff a publié l'algorithme mis à jour qui correspond mieux des commentaires, par exemple quand quelqu'un tape un commentaire:algorithme pour trouver une correspondance d'utilisateur sur @username floue

@Tom did you see 

Il correspondra au nom d'utilisateur 'Tom'. S'il y a des caractères spéciaux, dites que mon nom d'utilisateur est 'T0m' et quelqu'un tape @Tom cela correspond toujours.

Est-ce que quelqu'un a un lien vers cet article s'il existe réellement? Si je me souviens bien, c'était un code qu'il partageait et qui serait utile pour moi!

Dans le cas contraire, donné une liste de noms d'utilisateurs qui sont impliqués dans la discussion:

users[0] = "Tom" 
users[1] = "Peanut" 
users[2] = "Ashley" 
users[3] = "Jon" 
users[4] = "AARÓN" 

Et vous donne @Aaron ou @Aron comme entrée, ce qui est la meilleure façon de sélectionner l'utilisateur approprié étant mentionné dans la liste?

Un algorithme général serait bien, mais le site pour lequel je le fais est ASP.net C# donc s'il y a un exemple dans ce langage ce serait génial. Voilà ce que j'ai jusqu'à présent, il fonctionne très bien pour les matches EXACT (tous les minuscules):

// Find comment references 
if (Search.Type != Alerts.SectionType.error) 
{ 
    // A list of all lower case usernames refered to in this thread 
    string[] References = Alerts.CommonFunctions.extractReferences(Comment); 

    // Only proceed if any references are found 
    if (References.Count() > 0) 
    { 
     // Extract all usernames involved in this comment discussion 
     UserBasic[] UsernamesInThread = getAllUsernamesInThread(Anchor); 

     // Loop each reference 
     foreach (string r in References) 
     { 
      // Try to find a match 
      foreach (UserBasic u in UsernamesInThread) 
      { 
       // Exact match found 
       if (r == u.Username) 
       { 
        // Check it's not original author (we can then ignore as alert already issued) 
        if (u.UserID != Search.OriginalAuthorID) 
        { 
         Alerts.CommonFunctions.createAlert(u.UserID, Settings.CommentReplyAlertID, Search.URL, Search.Title); 
        } 
        break; 
       } 
      } 
     } 
    } 
} 
+0

Peut-être que cela? http://en.wikipedia.org/wiki/Levenshtein_distance –

+0

Ne pas oublier l'espacement des lettres - e devrait correspondre à plus de l. – apscience

Répondre

1

Peter Norvig a écrit un bel exemple d'un very small spelling corrector ici:

Il a deux implémentations C# répertoriés.

Pour votre problème spécifique (où l'ensemble des candidats est très petit), vous pouvez rechercher le edit distance minimal entre le mot cible et tous les candidats.

Questions connexes