Estoy buscando un motor de búsqueda de texto para un tipo de búsqueda de texto no tradicional y quiero asesoramiento sobre qué herramienta (Lucene, Sphinx, Xapian, o algo más) es la más apropiado para mí, además de consejos sobre dónde empezar.adaptación de búsqueda de texto para algoritmos de comparación gráfico/molécula
Tengo moléculas representadas como gráficos (átomos y enlaces). Tengo un camino a enumerate all subgraphs de hasta el tamaño k. Siendo técnico, las entradas son SMILES y la salida es SMARTS canónico y el número de veces que ocurre cada subgráfico/SMARTS.
Por ejemplo, si la molécula de entrada es "CCO", los resultados canónicos son {"C": 2, "O": 1, "CC": 1, "OC": 1, "CCO": 1 } y si la molécula es "SCO", los resultados canónicos son {"C": 1, "S": 1, "O": 1, "CS": 1, "OC": 1, "SCO": 1 }. Estos son pequeños ejemplos. Para la molécula real obtuve alrededor de 500 "palabras", que parecen "CC (C) O", "CCCOCC", "cn" y "cccc (c) O".
Al considerar las moléculas como una colección de cadenas características más recuentos significa que debería poder utilizar una herramienta de búsqueda de texto para hacer comparaciones a nivel de texto, con la esperanza de que tengan sentido en el nivel de química.
Por ejemplo, puedo usar cosine similarity quizás con tf-idf peso y encontrar moléculas similares al buscar subpatrones similares. Con los ejemplos "CCO" y "SCO" anteriores, la similitud del coseno es (2 * 1 + 1 * 1 + 1 * 1)/sqrt (2 * 2 + 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1)/sqrt (6 * (1 * 1)) = 4/sqrt (8 * 6) = 0.58.
Para otro ejemplo, si quiero encontrar moléculas que contengan una subestructura "CCS" entonces puedo hacer una búsqueda rápida de índice invertido basada en los conteos (las moléculas deben tener al menos 2 "C" s, al menos 1 "CS", etc.) antes de abordar el problema de isomorfismo del subgrafo NP. Es decir, los métodos basados en texto pueden actuar como un filtro para rechazar discrepancias obvias.
Estoy tratando de descubrir las soluciones de texto que existen, pero es un poco desalentador. No necesito detener las palabras, no necesito derivar, no me importa el orden de las palabras; No necesito muchas de las características que existen. Necesito la capacidad de mantener vectores de palabras, ya que es importante saber si aparece "C" 2 veces o 3.
¿Qué motor de búsqueda de texto es el más apropiado para mí? Se parece a Lucene, especialmente con el trabajo en Mahout. ¿Puede recomendar qué partes de la documentación mirar o tutoriales relevantes? Los que he encontrado están destinados a búsquedas de texto completo, con derivación y otras características que no necesito.
¿Qué significa "similitud" para usted? P.ej. debería "C = C" ser "similar" a "C-C"? ¿"N +" es similar a "N"? ¿Es "cco" similar a "c (c) o", etc.? Tal vez si dio algunas búsquedas de ejemplo y los resultados que deberían encontrar nos ayudaría a saber más acerca de lo que desea (ya que no somos químicos). – Xodarap
Tengo palabras W_i con conteos repetidos n_i e i <~ 500. Quiero hacer similitud de coseno entre ellos, según la definición vinculada. Creo que lo que estoy buscando es estándar en el mundo de búsqueda de documentos y la química no importa, pero lo actualizaré con un ejemplo. –
Véase también http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –