2008-12-07 10 views

Respuesta

34

Debe mirar el módulo SpellChecker en el directorio contrib. Es un puerto del módulo SpellChecker de Java Lucene, por lo que su documentation debería ser útil.

(De los javadocs :)

Ejemplo de Uso:

import org.apache.lucene.search.spell.SpellChecker; 

    SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); 
    // To index a field of a user index: 
    spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); 
    // To index a file containing words: 
    spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt"))); 
    String[] suggestions = spellchecker.suggestSimilar("misspelt", 5); 
+1

esta es la respuesta correcta, ¡debe ser aceptado! justo lo que estaba buscando;) –

+2

El módulo SpellChecker se movió: https://svn.apache.org/repos/asf/lucene/lucene.net/trunk/C%23/contrib/SpellChecker.Net/ – Domenic

6

yo sepa Lucene soporta proximidad de búsqueda, lo que significa que si se utiliza algo como:

campo: stirng ~ 0,5

(que s una tilde-signo)

coincidirá con "cadena". el float es qué tan "tolerante" sería la búsqueda, donde 1.0 es coincidencia exacta y 0.0 es coincidencia con todo (más o menos).

Diferentes analizadores sin embargo implementarán esto de manera diferente.

Una búsqueda de proximidad es mucho más lenta que una búsqueda difusa (stri *), así que úselo con precaución. En su caso, uno supondría que si no encuentra coincidencias en una búsqueda normal, prueba una búsqueda de proximidad para ver lo que encuentra, y presente "quise decir" basado en el resultado de alguna manera.

Puede ser útil para almacenar en caché este tipo de búsquedas para errores de ortografía muy comunes, por motivos de rendimiento.

1

Google "¿Querías decir?" es (probablemente, son secretos, por supuesto) implementados consultando su registro de consultas. Observe si las personas que buscaron la consulta que está procesando buscaron algo muy similar al poco tiempo; si es así, indica que cometieron un error y se dieron cuenta de lo que deberían estar buscando.

Dado que probablemente no tenga un gran registro de consultas, podría aproximarlo. Tome la consulta, divida los términos, vea si hay términos similares en la base de datos (por distancia de edición, lo que sea); reemplace sus términos con esos términos cercanos y vuelva a ejecutar la consulta. Si obtiene más visitas, probablemente esa sea una mejor consulta. Sugerirlo al usuario. (Y dado que ya tiene los hits, y la mayoría de la gente solo mira los 2 primeros resultados, muéstrelos).

+0

Hay una explicación simple de lo que "Did you mean" hace aquí http://norvig.com/spell-correct.html, es una lectura muy interesante. –

0

Tome una mirada en el proyecto de código de Google llamada semanticvectors. Hay una cantidad decente de discusión en las listas de correo de Lucene para hacer una funcionalidad como la que buscas después de usarla, sin embargo, está escrita en Java.

¡Probablemente tendrá que analizar y utilizar algunos algoritmos de aprendizaje automático en los registros de búsqueda para crear una función como esta!

Cuestiones relacionadas