适应图形/分子比较算法的文本搜索

时间:2011-01-14 08:59:22

标签: graph lucene sphinx text-search

我正在寻找一种非传统文本搜索的文本搜索引擎,我想知道哪种工具(Lucene,Sphinx,Xapian或其他)最适合我,以及指向何处开始吧。

我有分子表示为图(原子和键)。我有办法enumerate all subgraphs达到k的大小。作为技术,输入是SMILES,输出是规范的SMARTS和每个子图/ SMARTS出现的次数。

例如,如果输入分子为“CCO”,则规范结果为{“C”:2,“O”:1,“CC”:1,“OC”:1,“CCO” “:1}如果分子是”SCO“,则规范结果为{”C“:1,”S“:1,”O“:1,”CS“:1,”OC“: 1,“SCO”:1}。这些都是很小的例子。对于真正的分子,我得到了大约500个“单词”,看起来像“CC(C)O”,“CCCOCC”,“cn”和“cccc(c)O”。

将分子视为特征字符串加上计数的集合意味着我应该能够使用文本搜索工具在文本级别进行比较,希望它们在化学级别上有意义。

例如,我可以cosine similarity使用tf-idf权重,并通过寻找类似的子模式找到类似的分子。通过上面的“CCO”和“SCO”示例,余弦相似度为(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。

另一个例子,如果我想找到含有“CCS”亚结构的分子,那么我可以根据计数进行快速反向索引搜索(分子必须至少有2个“C”,至少1“ CS“,等等)在解决NP子图同构问题之前。也就是说,基于文本的方法可以作为过滤器来拒绝明显的不匹配。

我正在试图找出存在的文本解决方案,但它有点令人生畏。我不需要停词,我不需要词干,我不在乎词序;我不需要存在很多功能。我确实需要保留单词向量的能力,因为知道“C”是出现2次还是3次是很重要的。

哪种文字搜索引擎最适合我?它看起来像Lucene,特别是在Mahout的工作。您能否推荐一下文档的哪些部分或相关的教程?我发现的那些用于全文搜索,包括词干和我不需要的其他功能。

3 个答案:

答案 0 :(得分:1)

嗯......真的不知道什么是SMARTS,或者化学相似性实际上是如何起作用的。如果你想使用lucene,首先考虑使用solr。由于您的数据在图表中,您可以使用solr组件查看neo4j。此外,这个问题是否会与重复文件更密切相关?为了帮助解决这个问题,有许多算法LSH,Spotsigs,shingling和simhash。希望我能得到更多帮助。

答案 1 :(得分:1)

编辑:我现在可能已经明白了。 您想要比较图表,表示为字符串。字符串有“单词”,可能会重复。 您可以使用Lucene,在这种情况下,我建议使用Solr。 基本上,每个Solr文档将由一个字段组成;该字段将包含字符串,我建议您展开:写C C而不是C:2。 如果使用空格分隔单词,则可以使用WhiteSpaceAnalyzer。如果您使用其他分隔符,则可能需要编写自定义分析器,这并不难。

这是个好主意吗?我不确定。原因如下:

  1. Lucene(和Solr)不使用余弦相似性,而是Lucene Similarity,它将余弦,TF / IDF和布尔评分混合在一起,并进行了一些特定的修改。这适用于大多数文本用例,但可能与您需要的不同。
  2. 您是否需要比较不同搜索中的匹配?如果你这样做,很难使用Solr,因为它将每次搜索规范化为最大值1。
  3. 我建议您尝试使用Solr来获取数据库的一小部分样本。如果Solr适合你,那很好。 如果没有,那么可能是走路和最小哈希。 Mining of Massive Datasets by Rajaraman and Ullman是最近关于这些主题的免费书籍。 我建议你看看。它涵盖了在大量数据中搜索类似字符串。 我想区分因素是:你需要一个相对较大的交叉点吗?如果是这样,请使用叠瓦和最小哈希。如果没有,也许索尔就足够了。

答案 2 :(得分:0)

不要使用lucene。或索尔。内部模型陈旧,拼凑在一起;虽然他们做得很好。查找具有最小条件的引擎(如果要在文本引擎内映射)BM25F完全支持。如果我追求它,我想要可扩展性和性能以及低成本支持社区,坦率地说,我会使用SQL Server和多维数据集。使用SQL Server进行许可可能是一个完整的阻止程序。祝你好运。