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í .
No especificó su plataforma de desarrollo, pero si es PHP, entonces sugiera que mire la lubricación de ZEND Lucene:
http://ifacethoughts.net/2008/02/07/zend-brings-lucene-to-php/ http://framework.zend.com/manual/en/zend.search.lucene.html
Como LAMP es mucho más ligero que Lucene en Java, y puede ampliarse fácilmente para otros tipos de archivos, siempre que pueda encontrar una biblioteca de conversión o un convertidor de línea de cmd. Hay muchas soluciones de OSS para hacerlo.
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/
Si puede elegir utilizar una base de datos, le recomiendo usar PostgreSQL y sus funciones de concordancia de cadenas difusas .
Si puedes usar Ruby, te sugiero buscar en la biblioteca de coincidencia .
Verifique este enlace. Utiliza las métricas de distancia levenshtein pero es mucho más rápido. http://narenonit.blogspot.com/2012/07/fuzzy-matching-autocomplete-library.html
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/