2011-01-14 12 views
5

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.

+0

¿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

+0

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. –

+0

Véase también http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –

Respuesta

1

EDITAR: Puede que lo haya entendido mejor ahora. Quiere comparar gráficos, representados como cadenas. Las cuerdas tienen "palabras" que pueden repetirse. Puede usar Lucene, en cuyo caso respaldo la sugerencia de usar Solr. Básicamente, cada documento de Solr constará de un solo campo; El campo contendrá la cadena, que le sugiero que desenrolle: escriba C C en lugar de C:2. Si usa un espacio para separar las palabras, puede usar un WhiteSpaceAnalyzer. Si usa otro separador, es posible que necesite escribir un analizador personalizado, que no es tan difícil de hacer.

¿Es esta una buena idea? No estoy seguro. Aquí es por qué:

  1. Lucene (y Solr) no utilizan similitud coseno como tal, sino más bien Lucene Similarity, que mezcla coseno, TF/IDF y la puntuación boolean, con algunas modificaciones específicas. Esto funciona bien para la mayoría de los casos de uso de texto, pero puede ser diferente de lo que necesita.
  2. ¿Necesita comparar resultados de diferentes búsquedas? Si lo hace, es difícil hacerlo con Solr, ya que normalizó todas las búsquedas hasta un valor máximo de 1.

Sugiero que pruebe Solr para obtener una pequeña muestra de su base de datos. Si Solr trabaja para ti, bien. Si no, el herpes zoster y min-hashes son probablemente el camino a seguir. Mining of Massive Datasets by Rajaraman and Ullman es un libro gratuito reciente sobre estos temas. Le sugiero que lo lea. Cubre la búsqueda de cadenas similares en montañas de datos. Supongo que el diferenciador es: ¿Necesita una intersección relativamente grande? Si es así, usa shingling y min-hashes. Si no, tal vez Solr es suficiente.

+0

Coincidencia de cadenas y alineación de secuencias? ¿Cómo es eso? Mis "documentos" contienen "palabras", que pueden repetirse. Dado un documento de consulta y una colección de documentos de destino, quiero encontrar los 10 más cercanos en la colección en función de (por ejemplo) la similitud del coseno. Los algoritmos de alineación implican orden, que mis datos no tienen. Needleman-Wunsch, Aho-Corasick y otros algoritmos de concordancia de cuerdas simplemente no son aplicables, al menos no tan lejos como puedo decir. (Por cierto, sí trabajé en bioinformática por un tiempo, así que conozco algunos de los lugares en los que pueden usarse). –

+0

He editado mi respuesta para abordar mejor sus documentos y palabras. –

+0

Empecé a leer ese libro el otro día y es muy útil. Voy a intentar con Solr y ver qué pasa. También me encontré con gensim en http://nlp.fi.muni.cz/projekty/gensim/index.html. –

1

Hmm ... realmente no sé qué son SMARTS, o cómo funciona la similitud química. Si desea usar lucene, primero considere usar solr. Como sus datos están en gráficos, puede echar un vistazo a neo4j con el componente solr. Además, ¿este problema estaría más relacionado con el documento cercano a los duplicados? Para ayudar con eso hay una serie de algoritmos LSH, Spotsigs, shingling y simhash. Ojalá pudiera ser de más ayuda.

+0

Quiero ver si la búsqueda de texto puede reemplazar o simplificar la búsqueda de gráficos. Con 50 millones de moléculas, hay alrededor de 150 millones de átomos y la misma cantidad de enlaces. No veo cómo un gráfico genérico db como neo4j puede acercarse a las capacidades de los motores de búsqueda especializados en química. Pero hacer una búsqueda de similitud del coseno de 50 millones de documentos cada uno con un máximo de 1.000 palabras (todos únicos) debería ser fácil. Estoy buscando una herramienta para esa tarea. –

+1

Ok, veo lo que quieres decir, bueno, Solr es bastante fácil de usar. Es otra capa encima de lucene. ¿Sabes cuántos campos puedes tener por producto químico? Utilice el tokenizador de palabras clave para que cada una de las entradas en un campo que se indexe no se convierta en tokenizado, y simplemente no filtre el proceso de indexación con la derivación u otras características especiales. Le recomiendo que obtenga el libro publicado por Packt. Creo que tal vez sea el único libro disponible para los usos empresariales del motor de búsqueda. – Joyce

+0

Cada compuesto tiene alrededor de 200-600 "palabras" seleccionadas de un vocabulario de aproximadamente 200,000 palabras. ¡Gracias por la recomendacion del libro! –

0

No use lucene. O Solr. Los modelos internos son anticuados y improvisados; aunque hacen un buen trabajo. Encuentre un motor con los criterios mínimos (si desea hacer un mapa dentro de un motor de texto) BM25F totalmente compatible. Si lo buscaba y quería escalabilidad, rendimiento y una comunidad de soporte de bajo costo, francamente iría con SQL Server y cubos. La creación de licencias con SQL Server podría ser un bloqueador completo. Buena suerte.

+0

No tengo idea de por qué BM25F sería apropiado para lo que estoy haciendo. ¿Por qué sería mejor que la similitud del coseno? Un amigo sugirió Xapian, que tiene soporte BM25, pero no parece ser tan ampliamente utilizado. Uso Mac y otras variantes de Unix para que una solución solo de Windows no funcione. –

Cuestiones relacionadas