5

我正在寻找一个用于非传统文本搜索的文本搜索引擎,并且我想要关于哪种工具(Lucene、Sphinx、Xapian 或其他工具)最适合我的建议,以及从哪里开始的指针。

我将分子表示为图表(原子和键)。我有一种方法可以枚举所有大小为 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”。

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

例如,我可以使用余弦相似度也许与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 中的工作。您能否推荐查看文档的哪些部分或相关教程?我发现的那些是用于全文搜索的,具有词干和其他我不需要的功能。

4

3 回答 3

1

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

于 2011-01-14T14:29:54.800 回答
1

编辑:我现在可能已经更好地理解了这一点。您想要比较以字符串表示的图形。字符串有可能重复的“单词”。您可以使用 Lucene,在这种情况下,我支持使用 Solr 的建议。基本上,每个 Solr 文档都包含一个字段;该字段将包含字符串,我建议您展开:writeC C而不是C:2. 如果使用空格分隔单词,则可以使用 WhiteSpaceAnalyzer。如果您使用另一个分隔符,您可能需要编写一个自定义分析器,这并不难。

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

  1. Lucene(和 Solr)本身不使用余弦相似度,而是使用Lucene Similarity,它混合了余弦、TF/IDF 和布尔评分,并进行了一些特定的修改。这适用于大多数文本用例,但可能与您需要的不同。
  2. 您是否需要比较来自不同搜索的命中?如果这样做,则很难使用 Solr,因为它将每次搜索标准化为最大值 1。

我建议您尝试使用 Solr 作为数据库的一个小样本。如果 Solr 适合你,那很好。如果不是,则 shingling 和 min-hashes 可能是要走的路。Rajaraman 和 Ullman 的《Mining of Massive Datasets》是一本关于这些主题的最新免费书籍。我建议你阅读它。它涵盖了在大量数据中搜索类似字符串。我想区别在于:你需要一个相对较大的交叉口吗?如果是这样,请使用 shingling 和 min-hashes。如果没有,也许 Solr 就足够了。

于 2011-01-15T21:45:09.753 回答
0

不要使用lucene。或索尔。内部模型已经过时并拼凑在一起;虽然他们做得很好。找到一个具有最低标准的引擎(如果你想在文本引擎中映射)BM25F 完全支持。如果我追求它并且我想要可伸缩性和性能以及低成本的支持社区,坦率地说,我会选择 SQL Server 和多维数据集。使用 SQL Server 进行许可可能会完全阻碍。祝你好运。

于 2011-01-15T00:08:45.850 回答