我正在寻找一种非传统文本搜索的文本搜索引擎,我想知道哪种工具(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的工作。您能否推荐一下文档的哪些部分或相关的教程?我发现的那些用于全文搜索,包括词干和我不需要的其他功能。
答案 0 :(得分:1)
答案 1 :(得分:1)
C C
而不是C:2
。
如果使用空格分隔单词,则可以使用WhiteSpaceAnalyzer。如果您使用其他分隔符,则可能需要编写自定义分析器,这并不难。
这是个好主意吗?我不确定。原因如下:
我建议您尝试使用Solr来获取数据库的一小部分样本。如果Solr适合你,那很好。 如果没有,那么可能是走路和最小哈希。 Mining of Massive Datasets by Rajaraman and Ullman是最近关于这些主题的免费书籍。 我建议你看看。它涵盖了在大量数据中搜索类似字符串。 我想区分因素是:你需要一个相对较大的交叉点吗?如果是这样,请使用叠瓦和最小哈希。如果没有,也许索尔就足够了。
答案 2 :(得分:0)
不要使用lucene。或索尔。内部模型陈旧,拼凑在一起;虽然他们做得很好。查找具有最小条件的引擎(如果要在文本引擎内映射)BM25F完全支持。如果我追求它,我想要可扩展性和性能以及低成本支持社区,坦率地说,我会使用SQL Server和多维数据集。使用SQL Server进行许可可能是一个完整的阻止程序。祝你好运。