web-dev-qa-db-fra.com

Où puis-je en savoir plus sur l'algorithme de recherche Google "vouliez-vous dire"?

Duplicata possible:
Comment implémentez-vous un "Vouliez-vous dire"?

J'écris une application pour laquelle j'ai besoin de fonctionnalités similaires à celles de Google "vouliez-vous dire?" fonctionnalité utilisée par leur moteur de recherche:

alt text

Existe-t-il du code source pour une telle chose ou où puis-je trouver des articles qui pourraient m'aider à créer le mien?

68
vidhi

Vous devriez consulter l'article de Peter Norvigs sur l'implémentation du correcteur orthographique dans quelques lignes de python: Comment écrire un correcteur orthographique Il contient également des liens pour les implémentations dans d'autres langages (par exemple C #)

125
BrokenGlass

Il y a un an et demi, j'ai assisté à un séminaire organisé par un ingénieur de Google, où ils ont parlé de leur approche à ce sujet. Le présentateur disait que (au moins une partie de) leur algorithme a peu d'intelligence du tout; mais utilise plutôt les énormes quantités de données auxquelles ils ont accès. Ils ont déterminé que si quelqu'un cherchait "Brittany Speares", ne cliquait sur rien, puis faisait une autre recherche de "Britney Spears", et cliquait sur quelque chose, nous pouvions avoir une bonne idée de ce qu'il cherchait et suggérer que dans futur.

Disclaimer: Cela pourrait juste faire partie de leur algorithme

28
Smashery

Python a un module appelé difflib . Il fournit une fonctionnalité appelée get_close_matches. Depuis la documentation Python:

get_close_matches(Word, possibilities[, n][, cutoff])

Renvoie une liste des meilleurs matchs "assez bons". Word est une séquence pour laquelle des correspondances étroites sont souhaitées (généralement une chaîne), et des possibilités est une liste de séquences à comparer Word (généralement une liste de chaînes).

L'argument facultatif n (par défaut 3) Est le nombre maximal de correspondances proches à renvoyer; n doit être supérieur à 0.

L'argument facultatif cutoff (par défaut 0.6) Est un flottant dans la plage [0, 1]. Les possibilités qui ne marquent pas au moins autant que Word sont ignorées.

Les meilleures correspondances (pas plus de n ) parmi les possibilités sont renvoyées dans une liste, triées par score de similitude, les plus similaires en premier.

  >>> get_close_matches('appel', ['ape', 'Apple', 'Peach', 'puppy'])
  ['Apple', 'ape']
  >>> import keyword
  >>> get_close_matches('wheel', keyword.kwlist)
  ['while']
  >>> get_close_matches('Apple', keyword.kwlist)
  []
  >>> get_close_matches('accept', keyword.kwlist)
  ['except']

Cette bibliothèque pourrait-elle vous aider?

16
Escualo

Vous pouvez utiliser http://developer.yahoo.com/search/web/V1/spellingSuggestion.html qui donnerait une fonctionnalité similaire.

5
Oligoglot

Je ne sais pas si cela sert votre objectif, mais un algorithme de distance d'édition de chaîne avec un dictionnaire pourrait suffire pour une petite application.

3
Geek

Vous pouvez consulter le code source de Xapian qui fournit cette fonctionnalité, comme le font de nombreuses autres bibliothèques de recherche. http://xapian.org/

3
m7d

Je voudrais jeter un œil à cet article sur bombardement de Google . Il montre qu'il suggère simplement des réponses basées sur les résultats précédemment saisis.

2
Kyle

U pourrait utiliser ngram pour la comparaison: http://en.wikipedia.org/wiki/N-gram

Utilisation de python ngram: http://packages.python.org/ngram/index.html

import ngram

G2 = ngram.NGram([  "iis7 configure ftp 7.5",
                    "ubunto configre 8.5",
                    "mac configure ftp"])

print "String", "\t", "Similarity"
for i in G2.search("iis7 configurftp 7.5", threshold=0.1):
    print i[0], "\t", i[1]

Vous obtenez:

>>> 
String  Similarity
"iis7 configure ftp 7.5"    0.76
"mac configure ftp  0.24"
"ubunto configre 8.5"   0.19
1
hugo24

Un grand chapitre de ce sujet peut être trouvé dans le libre accès Introduction to Information Retrieval .

1
Fabian Steeg

AFAIK le "vouliez-vous dire?" ne vérifie pas l'orthographe. Il ne vous donne qu'une autre requête basée sur le contenu analysé par Google.

1
Colin Hebert

jetez un oeil à Levenshtein-Automata

1
Francis