2010-09-21 26 views
67

Duplicar posible:
How do you implement a “Did you mean”?¿Dónde puedo obtener más información sobre el algoritmo de búsqueda de Google "¿qué quiso decir?

estoy escribiendo una aplicación en la que requiero una funcionalidad similar a Google de "qué quiere decir?" función utilizada por su motor de búsqueda:

alt text

¿Existe código fuente disponible para tal cosa o ¿dónde puedo encontrar los artículos que me ayudarían a construir mi propia?

+82

Usted podría busca google, supongo ... –

+42

¿Es esto de un antiguo ingeniero de Cuil? – Kevin

+41

¿cómo se forma Google? ¿Cómo se obtiene Serched internet? – gnovice

Respuesta

126

Debe retirar el artículo de Peter Norvigs acerca de cómo implementar el corrector ortográfico en unas pocas líneas de Python: "? Qué quieres decir" How to Write a Spelling Corrector También tiene enlaces para implementaciones en otros idiomas (es decir, C#)

+40

Hecho al costado: Peter Norvig es Director de Investigación en Google . – Gumbo

+9

Esta respuesta debe marcarse como aceptada. El algoritmo de Norvig resuelve el problema de OP, es bastante impresionante, * y * proviene de Google. :) – ibz

1

yo sepa el la característica no verifica la ortografía. Solo le ofrece otra consulta basada en el contenido analizado por google.

+0

No, adivina alternativas basadas en errores ortográficos. Si busca "katie sachoff", se le ocurre "¿Quiso decir katee sackhoff?" – ebneter

+1

Hace poco leí un artículo en el que un empleado de Google exponía cómo tenían el corrector ortográfico más avanzado del mundo, ya que tomaría en cuenta el contexto de una palabra de forma que pocos lo hacen. – JAL

+0

@Alex JL- Y probablemente tengan razón. – DMan

28

Asistí a un seminario realizado por un ingeniero de Google hace un año y medio, donde hablaron sobre su enfoque para esto. El presentador decía que (al menos parte de) su algoritmo tiene poca inteligencia; sino que utiliza las enormes cantidades de datos a los que tienen acceso. Determinaron que si alguien busca "Brittany Speares", no hace clic en nada, luego realiza otra búsqueda de "Britney Spears" y hace clic en algo, podemos tener una idea aproximada de lo que estaban buscando y podemos sugerir que en futuro.

responsabilidad: Este puede haber sido parte de su algoritmo

+0

RE Descargo de responsabilidad: asumo que fue/es. Es una forma muy segura de hacerlo. No me puedo imaginar a nadie que encuentre un algoritmo que busque en una base de datos llena de palabras en inglés, y luego intente determinar si la consulta es similar a los datos existentes o no. –

2

me gustaría echar un vistazo a este artículo sobre google bombing. Muestra que simplemente sugiere respuestas basadas en resultados previamente ingresados.

+1

Sí, creo que aprende de lo que otras personas corrigieron ciertas búsquedas. Por ejemplo, si buscas 'cena de hombre rico' y luego haces clic en nada y lo cambias a 'cena de hombre hambriento', Google toma nota de eso la próxima vez que se realiza la primera búsqueda. Estoy seguro de que tienen más trucos que eso, también, como un corrector ortográfico tradicional en algún lugar. –

3

Puede consultar el código fuente de Xapian que proporciona esta funcionalidad, al igual que muchas otras bibliotecas de búsqueda. http://xapian.org/

15

Python tiene un módulo llamado difflib. Proporciona una funcionalidad llamada get_close_matches. A partir de la documentación de Python:

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

devolver una lista de los mejores "buenos" suficientes coincidencias. palabra es una secuencia para los que se desea el cierre partidos (típicamente una cadena), y posibilidades es una lista de secuencias en contra de que para que coincida con palabra (típicamente una lista de cadenas).

argumento opcional n (por defecto 3) es el número máximo de cerca partidos para volver; n debe ser mayor que 0.

Opcional argumento corte (por defecto 0.6) es un flotador en el rango [0, 1]. Las posibilidades que no puntúan al menos igual a palabra son ignoradas.

La mejor (no más de n) coincide entre las posibilidades son devueltos en una lista, ordenados por puntuación de similitud , primero el más similar.

>>> 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'] 

Podría esta biblioteca que ayuda?

3

No estoy seguro de si sirve para su propósito, pero un algoritmo de distancia String Edit con un diccionario podría ser suficiente para una aplicación pequeña.

1

T podría utilizar n-gramas para el comparisment: http://en.wikipedia.org/wiki/N-gram

Usando el modulo pitón n-gramas: 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] 

U obtener:

>>> 
String Similarity 
"iis7 configure ftp 7.5" 0.76 
"mac configure ftp 0.24" 
"ubunto configre 8.5" 0.19 
+0

Un índice de N-Gram es la única solución de sonido que he visto entre las respuestas, ¿por qué se cae? Bueno ... aparte de Peter Norvig's. Pero N-Grams puede hacerlo bastante bien. – mschonaker

+0

Gracias :) Los N-Grams son la forma preferida en Google ... hasta donde yo sé. – hugo24

Cuestiones relacionadas