2010-08-07 14 views
5

Estoy tratando de buscar subcadenas largas y aproximadas en una base de datos grande. Por ejemplo, una consulta podría ser una subcadena de 1000 caracteres que podría diferir de la coincidencia por una distancia de Levenshtein de varios cientos de ediciones. He oído que los q-gramas indexados pueden hacer esto, pero no conozco los detalles de la implementación. También he escuchado que Lucene podría hacerlo, pero ¿el algoritmo levenshtein de Lucene es lo suficientemente rápido para cientos de ediciones? Tal vez algo fuera del mundo de la detección de plagio? Cualquier consejo es apreciado.Buscar (muy) subcadenas aproximadas en una base de datos grande

+0

Fuera de interés, ¿cuál sería la información de cadena que está buscando - información textual o algo estructurado en una forma diferente? –

Respuesta

1

Q-gramos podría ser un enfoque, pero hay otros, como explosiva, BlastP - que se utilizan para la proteína, partidos de nucleótidos etc.

Simmetrics La biblioteca es una colección completa de los enfoques distancia cadena.

+0

También debería mirar la similitud Cosine – Mikos

1

Lucene no parece ser la herramienta adecuada aquí. Además de las buenas sugerencias de Mikos, he oído hablar de AGREP, FASTA y Locality-Sensitive Hashing(LSH). Creo que un método eficiente debería primero podar el espacio de búsqueda en gran medida, y solo entonces hacer una puntuación más sofisticada en los candidatos restantes.

Cuestiones relacionadas