algorithm - que - algoritmo web
¿Dónde puedo obtener más información sobre el algoritmo de búsqueda de Google "¿Qué quiso decir? (11)
Posible duplicado:
¿Cómo implementas un "Did you mean"?
Estoy escribiendo una aplicación en la que requiero una funcionalidad similar a la de "¿a qué se refería?" De Google. característica utilizada por su motor de búsqueda:
¿Hay algún código fuente disponible para tal cosa o dónde puedo encontrar artículos que me ayuden a construir el mío?
AFAIK el "¿quisiste decir?" la característica no verifica la ortografía. Solo le ofrece otra consulta basada en el contenido analizado por google.
Asistí a un seminario de 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.
Descargo de responsabilidad: Esto puede haber sido solo parte de su algoritmo
Debería consultar el artículo de Peter Norvigs sobre la implementación del corrector ortográfico en algunas líneas de Python: Cómo escribir un corrector ortográfico También tiene enlaces para implementaciones en otros idiomas (es decir, C #)
Echaré un vistazo a este artículo sobre el bombardeo de google . Muestra que simplemente sugiere respuestas basadas en resultados previamente ingresados.
No estoy seguro si cumple su propósito, pero un Algoritmo de distancia de edición de cadenas con un diccionario podría ser suficiente para una aplicación pequeña.
Puede consultar el código fuente de Xapian que proporciona esta funcionalidad, al igual que muchas otras bibliotecas de búsqueda. http://xapian.org/
Puedes usar http://developer.yahoo.com/search/web/V1/spellingSuggestion.html que daría una funcionalidad similar.
Se puede encontrar un gran capítulo sobre este tema en la Introducción a la recuperación de la información abierta al público .
U podría usar ngram para la comparación: http://en.wikipedia.org/wiki/N-gram
Usando el módulo 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]
Obtienes:
>>>
String Similarity
"iis7 configure ftp 7.5" 0.76
"mac configure ftp 0.24"
"ubunto configre 8.5" 0.19
echa un vistazo a Levenshtein-Automata
Python tiene un módulo llamado difflib
. Proporciona una funcionalidad llamada get_close_matches
. De la documentación de Python:
get_close_matches(word, possibilities[, n][, cutoff])
Devuelve una lista de las mejores coincidencias "lo suficientemente buenas". palabra es una secuencia para la que se desean coincidencias cercanas (generalmente una cadena), y posibilidades es una lista de secuencias con las que se puede hacer coincidir palabras (generalmente una lista de cadenas).
El argumento opcional n (predeterminado
3
) es el número máximo de coincidencias cercanas a devolver; n debe ser mayor que0
.El corte de argumento opcional (predeterminado
0.6
) es un flotante en el rango [0, 1]. Se ignoran las posibilidades que no puntúan al menos de manera similar a la palabra .Las mejores (no más de n ) coincidencias entre las posibilidades se devuelven en una lista, ordenadas por puntaje de similitud, las más similares primero.
>>> 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 ayudarte?