2011-01-14 7 views
5

Sto cercando un motore di ricerca di testo per una ricerca di testo non tradizionale e voglio un consiglio su quale strumento (Lucene, Sfinge, Xapian o qualcos'altro) è più appropriato per me, oltre a indicazioni su dove iniziare.adattamento della ricerca del testo per algoritmi di confronto grafico/molecolare

Ho molecole rappresentate come grafici (atomi e legame). Ho un modo per enumerate all subgraphs fino alla dimensione k. Essendo tecnici, gli input sono SMILES e l'output è SMARTS canonico e il numero di volte in cui si verifica ogni sottografo/SMARTS. Ad esempio, se la molecola di input è "CCO", i risultati canonici sono {"C": 2, "O": 1, "CC": 1, "OC": 1, } e se la molecola è "SCO", i risultati canonici sono {"C": 1, "S": 1, "O": 1, "CS": 1, "OC": 1, "SCO": 1 }. Questi sono piccoli esempi. Per la vera molecola ho ottenuto circa 500 "parole", che assomigliano a "CC (C) O", "CCCOCC", "cn" e "cccc (c) O".

Guardare le molecole come una raccolta di stringhe caratteristiche più i conteggi significa che dovrei essere in grado di utilizzare uno strumento di ricerca testo per fare confronti a livello di testo, con la speranza che siano significativi a livello di chimica.

Per esempi, posso usare cosine similarity forse con il peso tf-idf e trovare molecole simili cercando sub-pattern simili. Con gli esempi "CCO" e "SCO" sopra, la somiglianza del coseno è (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.

Per un altro esempio, se voglio trovare le molecole che contengono una sottostruttura "CCS", posso eseguire una ricerca indice invertita rapida basata sui conteggi (le molecole devono avere almeno 2 "C", almeno 1 "CS", e così via) prima di affrontare il problema dell'isomorfismo del sottografo NP. Cioè, i metodi basati su testo possono fungere da filtro per respingere evidenti discrepanze.

Sto cercando di capire le soluzioni di testo che esistono ma è un po 'scoraggiante. Non ho bisogno di fermare le parole, non ho bisogno di derivare, non mi interessa l'ordine delle parole; Non ho bisogno di un bel numero di funzioni che esistono. Ho bisogno della capacità di mantenere i vettori delle parole, poiché è importante sapere se "C" appare 2 volte o 3.

Quale motore di ricerca di testo è più appropriato per me? Sembra Lucene, specialmente con il lavoro in Mahout. Potete consigliare quali parti della documentazione consultare o tutorial rilevanti? Quelli che ho trovato sono pensati per ricerche full-text, con la derivazione e le altre caratteristiche che non mi servono.

+0

Che cosa significa "similarità" per te? Per esempio. dovrebbe "C = C" essere "simile" a "C-C"? è "N +" simile a "N"? "Cco" è simile a "c (c) o" ecc.? Forse se hai fatto qualche ricerca di esempio e i risultati che dovrebbero trovare ci aiuterebbero a sapere di più su ciò che vuoi (dato che non siamo chimici). – Xodarap

+0

Ho parole W_i con conteggi ripetuti n_i e i <~ 500. Voglio fare la somiglianza del coseno tra di loro, come per la definizione collegata. Penso che quello che sto cercando sia standard nel mondo della ricerca di documenti e che la chimica non contenga, ma aggiornerò con un esempio. –

+0

Vedere anche http://stackoverflow.com/questions/2380394/imple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –

risposta

1

EDIT: Forse ho capito meglio ora. Si desidera confrontare grafici rappresentati come stringhe. Le stringhe hanno "parole" che possono ripetersi. È possibile utilizzare Lucene, nel qual caso applico il suggerimento di utilizzare Solr. Fondamentalmente, ogni documento Solr sarà costituito da un singolo campo; Il campo conterrà la stringa, che ti suggerisco di srotolare: scrivere C C anziché C:2. Se si utilizza uno spazio per separare le parole, è possibile utilizzare un WhiteSpaceAnalyzer. Se si utilizza un altro separatore, potrebbe essere necessario scrivere un analizzatore personalizzato, che non è così difficile da fare.

Questa è una buona idea? Non sono sicuro. Ecco perché:

  1. Lucene (e Solr) non usano similarità del coseno in quanto tale, ma piuttosto Lucene Similarity, che mescola del coseno, TF/IDF e il punteggio booleana, con alcune modifiche specifiche. Questo funziona bene per la maggior parte dei casi d'uso testuali, ma potrebbe essere diverso da quello che ti serve.
  2. Hai bisogno di confrontare i risultati di ricerche diverse? Se lo fai, è difficile da fare usando Solr, come normalizzava ogni ricerca al valore massimo di 1.

Ti suggerisco di provare Solr per un piccolo campione del tuo database. Se Solr funziona per te, bene. In caso contrario, il tegame e il min-hash sono probabilmente la strada da percorrere. Mining of Massive Datasets by Rajaraman and Ullman è un libro libero recente su questi argomenti. Ti suggerisco di leggerlo. Copre la ricerca di stringhe simili in montagne di dati. Immagino che il differenziatore sia: hai bisogno di un incrocio relativamente grande? Se è così, usa il ticchettio e il min-hash. In caso contrario, forse Solr è sufficiente.

+0

Corrispondenza di stringhe e allineamento di sequenza? Come mai? I miei "documenti" contengono "parole", che possono essere ripetute. Dato un documento di query e una raccolta di documenti di destinazione, voglio trovare il 10 più vicino nella collezione in base alla somiglianza del coseno (diciamo). Gli algoritmi di allineamento implicano l'ordine, che i miei dati non hanno. Needleman-Wunsch, Aho-Corasick e altri algoritmi per le stringhe non sono applicabili, almeno non per quanto posso dire. (Però, ho lavorato per un po 'in bioinformatica, quindi conosco alcuni dei posti in cui possono essere usati.) –

+0

Ho modificato la mia risposta per indirizzare meglio i tuoi documenti e le tue parole. –

+0

Ho iniziato a leggere quel libro l'altro giorno ed è molto utile. Proverò con Solr e vedrò cosa succede. Mi sono imbattuto anche in gensim su http://nlp.fi.muni.cz/projekty/gensim/index.html. –

1

Hmm ... non so davvero cosa siano SMARTS o come la similarità chimica funzioni effettivamente. Se vuoi usare lucene, considera prima di usare solr. Poiché i tuoi dati sono in grafici, puoi dare un'occhiata a neo4j con il componente solr. Inoltre, questo problema dovrebbe essere più strettamente correlato al documento vicino ai duplicati? Per aiutare ci sono un certo numero di algoritmi LSH, Spotsigs, shingling e simhash. Vorrei poter essere di più aiuto.

+0

Voglio vedere se la ricerca del testo può sostituire o semplificare la ricerca del grafico. Con 50 milioni di molecole, circa 150 milioni di atomi e altrettanti legami. Non vedo come un grafico generico db come neo4j possa avvicinarsi alle capacità dei motori di ricerca specializzati in chimica. Ma fare una ricerca di similarità del coseno di 50 milioni di documenti contenenti ciascuno al massimo 1.000 parole (tutte uniche) dovrebbe essere facile. Sto cercando uno strumento per questo compito. –

+1

Ok capisco cosa intendi, bene Solr è piuttosto facile da usare. È un altro strato in cima a lucene. Sai quanti campi potresti avere per prodotto chimico? Utilizzare il tokenizzatore di parole chiave in modo che ogni input in un campo che viene indicizzato non venga tokenizzato e non filtrare il processo di indicizzazione con lo stemming o altre funzioni speciali. Raccomando di avere il libro pubblicato da Packt. Penso che sia forse l'unico libro disponibile per gli usi aziendali del motore di ricerca. – Joyce

+0

Ogni composto ha circa 200-600 "parole" selezionate da un vocabolario di circa 200.000 parole. Grazie per il consiglio sul libro! –

0

Non utilizzare lucene. O Solr. I modelli interni sono antiquati e acciottolati insieme; anche se fanno un buon lavoro. Trova un motore con i criteri minimi (se vuoi mappare all'interno di un motore di testo) BM25F pienamente supportato. Se fossi dietro ad esso e volessi la scalabilità e le prestazioni e la comunità di supporto a basso costo, sinceramente, andrei con SQL Server e cubes.Licensing con SQL Server potrebbe essere un blocco completo. In bocca al lupo.

+0

Non ho idea del motivo per cui BM25F sarebbe appropriato per quello che sto facendo. Perché sarebbe meglio della somiglianza del coseno? Un amico ha suggerito Xapian, che ha il supporto BM25, ma non sembra essere così ampiamente utilizzato. Uso Mac e altre varianti UNIX, quindi una soluzione solo per Windows non funzionerà. –