従来とは異なる種類のテキスト検索用のテキスト検索エンジンを探しています。どのツール (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} です。これらは小さな例です。実際の分子については、「CC(C)O」、「CCCOCC」、「cn」、「cccc(c)O」のような約 500 の「単語」を取得しました。
分子を特徴的な文字列とカウントのコレクションとして見ることは、テキスト検索ツールを使用してテキスト レベルで比較を行うことができることを意味し、それらが化学レベルで意味を持つことを期待しています。
たとえば、おそらく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 回出現するかを知ることが重要なので、単語ベクトルを保持する機能が必要です。
自分に最も適したテキスト検索エンジンはどれですか? 特にMahoutでの作業では、Luceneのように見えます. ドキュメントのどの部分を見るべきか、または関連するチュートリアルをお勧めできますか? 私が見つけたものは、全文検索用で、ステミングやその他の必要のない機能を備えています。