fuzzy-search

fuzzy-search - fuzzy logic elasticsearch



Ligera biblioteca de búsqueda fuzzy (9)

¿Puedes sugerir alguna biblioteca ligera de búsqueda de texto difuso?

Lo que quiero hacer es permitir que los usuarios encuentren datos correctos para los términos de búsqueda con errores ortográficos.

Podría usar motores de búsqueda de texto completo como Lucene, pero creo que es una exageración.

Editar:
Para hacer la pregunta más clara aquí hay un escenario principal para esa biblioteca:
Tengo una gran lista de cadenas. Quiero poder buscar en esta lista (algo así como el intellisense de MSVS) pero debería ser posible filtrar esta lista por cadenas que no están presentes pero lo suficientemente cerca de alguna cadena que esté en la lista.
Ejemplo:

  • rojo
  • Verde
  • Azul

Cuando escribo ''Gren'' o ''Geen'' en un cuadro de texto, quiero ver ''Verde'' en el conjunto de resultados.

El idioma principal para los datos indexados será el inglés.

Creo que Lucene es pesado para esa tarea.

Actualización :

Encontré un producto que coincidía con mis requisitos. Es ShuffleText .
¿Conoces alguna alternativa?


@aku: los enlaces a las bibliotecas de trabajo de soundex están ahí en la parte inferior de la página.

En cuanto a la distancia de Levenshtein, el artículo de Wikipedia sobre eso también tiene implementaciones enumeradas en la parte inferior.


Lucene es muy escalable, lo que significa que también es bueno para pequeñas aplicaciones. Puede crear un índice en la memoria muy rápidamente si eso es todo lo que necesita.

Para la búsqueda difusa, realmente necesita decidir qué algoritmo le gustaría usar. Con la recuperación de información, utilizo una técnica de n-gramas con Lucene con éxito. Pero esa es una técnica de indexación especial, no una "biblioteca" en sí misma.

Sin saber más acerca de su aplicación, no será fácil recomendar una biblioteca adecuada. ¿Cuantos datos estás buscando? ¿Qué formato son los datos? ¿Con qué frecuencia se actualizan los datos?


Soundex es muy "inglés" en su codificación: Daitch-Mokotoff funciona mejor para muchos nombres, especialmente nombres europeos (germánicos) y judíos. En mi mundo centrado en el Reino Unido, es lo que uso.

Wiki aquí .



Pruebe Walnutil, basado en Lucene API, integrado a SQL Server y Oracle DBs. Puede crear cualquier tipo de índice y luego usarlo. Para una búsqueda simple puede usar algunos métodos de walnutilsoft, para casos de búsqueda más complicados puede usar la API de Lucene. Consulte el ejemplo basado en web donde se usaron índices creados a partir de Herramientas de Walnutil. También puede ver algunos ejemplos de código escritos en Java y C # que puede usar para crear diferentes tipos de búsqueda. Esta herramienta es gratis. http://www.walnutilsoft.com/




Una solución potente y liviana es la esfinge .

Es más pequeño que Lucene y es compatible con la desambiguación.

Está escrito en C ++, es rápido, probado en batalla, tiene bibliotecas para cada entorno y lo utilizan las grandes compañías, como craigslists.org


No estoy seguro de qué tan bien Lucene es adecuado para la búsqueda difusa, la biblioteca personalizada sería una mejor opción. Por ejemplo, esta búsqueda se realiza en Java y funciona bastante rápido, pero está hecha a medida para tal tarea: http://www.softcorporation.com/products/people/