Question

Je suis à la recherche d'un moteur de recherche de texte pour une sorte non traditionnel de recherche de texte et je veux des conseils sur l'outil (Lucene, Sphinx, Xapian, ou quelque chose d'autre) est le plus approprié pour moi, plus des pointeurs sur l'endroit où pour commencer.

I ai molécules représentées sous forme de graphes (atomes et liaison). J'ai un moyen de Énumérer tous de sous-graphes jusqu'à taille k. Être technique, les entrées sont SMILES et la sortie est SMARTS canonique et le nombre de fois que chaque sous-graphe / SMARTS se produit.

Par exemple, si la molécule d'entrée est « CCO "alors les résultats canoniques sont { "C": 2, "O": 1, "CC": 1, "OC": 1, "CCO": 1} et si la molécule est" SCO », puis les résultats canoniques sont { "C": 1, "S": 1, "O": 1, "CS": 1, "OC": 1, "SCO": 1}. Ce sont des exemples minuscules. Pour molécule réelle, je suis arrivé à environ 500 "mots", qui ressemblent à "CC (C) O", "CCCOCC", "cn" et "cccc (c) O".

En regardant les molécules comme une collection de chaînes caractéristiques, plus comptages moyens que je devrais être en mesure d'utiliser un outil de recherche de texte pour faire des comparaisons au niveau du texte, avec l'espoir qu'ils ont un sens au niveau de la chimie.

Pour des exemples, je peux utiliser rel="nofollow"> peut-être avec

Pour un autre exemple, si je veux trouver des molécules qui contiennent une sous-structure « CCS » alors je peux faire une recherche d'index inversé rapide d'après les chiffres (les molécules doit avoir au moins 2 « C » s, au moins 1 " CS », etc.) avant d'aborder le problème de NP isomorphisme sous-graphe. Cela est, les méthodes à base de texte peut agir comme un filtre pour rejeter discordances évidentes.

Je suis en train de trouver les solutions de texte qui existent, mais il est un peu intimidant de. Je ne ai pas besoin arrêter mots, je ne ai pas besoin égrappage, je ne me soucie pas de l'ordre des mots; Je ne suis pas besoin d'un certain nombre de caractéristiques qui existent. Je dois garder la capacité de vecteurs de mot, car il est important de savoir si « C » apparaît 2 fois ou 3.

Quel moteur de recherche de texte est le plus approprié pour moi? Il ressemble à Lucene, en particulier avec les travaux en Mahout. Pouvez-vous recommander quelles parties de la documentation à regarder ou tutoriels pertinents? Ceux que j'ai trouvé sont destinés à des recherches en texte intégral, avec égrappage et les autres fonctionnalités que je ne ai pas besoin.

Était-ce utile?

La solution

EDIT: Je peux avoir compris cela mieux maintenant. Vous voulez comparer les graphiques, représentés sous forme de chaînes. Les chaînes ont des « mots » qui peuvent répéter. Vous pouvez utiliser Lucene, dans ce cas, je seconde la suggestion d'utiliser Solr. En gros, chaque document Solr se composera d'un seul champ; Le champ contiendra la chaîne, que je vous suggère Déroulez: écriture C C au lieu de C:2. Si vous utilisez un espace pour séparer les mots, vous pouvez utiliser un WhiteSpaceAnalyzer. Si vous utilisez un autre séparateur, vous devrez peut-être écrire un analyseur personnalisé, ce qui est si difficile à faire.

Est-ce une bonne idée? Je ne suis pas sûr. Voici pourquoi:

  1. Lucene (et Solr) ne pas utiliser similitude cosinus en tant que telle, mais plutôt Lucene similarité , qui cosinus mixes, TF / notation IDF et booléenne, avec quelques modifications spécifiques. Cela fonctionne bien pour la plupart des cas d'utilisation textuelles, mais peut être différent de ce que vous avez besoin.
  2. Avez-vous besoin de comparer coups de différentes recherches? Si vous le faites, il est difficile de le faire en utilisant Solr, comme il normalise chaque recherche d'une valeur maximale de 1.

Je vous suggère de ne pas essayer Solr pour un petit échantillon de votre base de données. Si Solr fonctionne pour vous, très bien. Sinon, bardeau et min-hash sont probablement la voie à suivre. Mining de Massive par Rajaraman datasets et Ullman est un livre gratuit récent sur ces sujets. Je vous suggère de le lire. Il couvre la recherche des chaînes similaires dans les montagnes de données. Je suppose que le facteur de différenciation est: Avez-vous besoin d'une intersection relativement importante? Si oui, utilisez et shingling min-hash. Sinon, peut-être Solr est suffisant.

Autres conseils

Hmm ... ne savent pas vraiment quels sont SMARTS, ou comment similitude chimique fait le travail. Si vous souhaitez utiliser Lucene, d'abord envisager d'utiliser solr. Étant donné que vos données sous forme de graphiques, vous pouvez jeter un oeil à Neo4j avec le composant solr. En outre, ce problème serait plus étroitement lié à documenter les doublons près? Pour aider à qu'il ya un certain nombre d'algorithmes LSH, Spotsigs, shingling et simhash. Souhaite que je pourrais être plus utile.

Ne pas utiliser Lucene. Ou Solr. Les modèles internes sont vétustes et bricolé; bien qu'ils font un bon travail. Trouver un moteur avec les critères minimaux (si vous voulez la carte dans un moteur de texte) BM25F entièrement pris en charge. Si j'étais après et je voulais l'évolutivité et la performance et la communauté faible soutien des coûts, franchement je partirais avec SQL Server et cubes.Licensing avec SQL Server pourrait être un bloqueur complet. Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top