我正在寻找一个用于非传统文本搜索的文本搜索引擎,并且我想要关于哪种工具(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 中的工作。您能否推荐查看文档的哪些部分或相关教程?我发现的那些是用于全文搜索的,具有词干和其他我不需要的功能。