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.
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
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. –
Vedere anche http://stackoverflow.com/questions/2380394/imple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python. –