私は非従来のテキスト検索のテキスト検索エンジンを探しています。どのツール(Lucene、Sphinx、Xapianなど)私にふさわしい、どこから始めるべきかについての指針を加えたものです。グラフ/分子比較アルゴリズムのテキスト検索を適応させる
私はグラフ(原子と結合)で表される分子を持っています。私は最大サイズkのenumerate all subgraphsへの道を持っています。技術的には、入力は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の「単語」を得た。
分子を特徴的な文字列とカウントの集合として見ると、テキストレベルでテキスト検索ツールを使用して化学レベルで有意義であることを期待できるということを意味します。
たとえば、cosine similarityをおそらくtf-idfと使用して、同様のサブパターンを探して同様の分子を見つけることができます。上記の "CCO"と "SCO"の例では、余弦類似度は(2 * 1 + 1 * 1 + 1 * 1)/ sqrt(2 * 2 + 1 * 1 + 1 * 1 + 1 * 1 + 1/sqrt(6 *(1 * 1))= 4/sqrt(8 * 6)= 0.58となる。
もう1つの例として、「CCS」部分構造を含む分子を見つけたい場合は、カウントに基づいて高速逆インデックス検索を行うことができます(分子には少なくとも2個のCが必要です。 "CS"など)を使用して、NPサブグラフの同型性問題に取り組んでいます。つまり、テキストベースのメソッドは、明白なミスマッチを拒否するフィルタとして機能できます。
私は存在するテキストソリューションを見つけようとしていますが、それは少し難しいです。私はストップワードを必要としません、私はステミングを必要としません、私は言葉の順序には気にしません。私は存在する多くの機能を必要としません。 "C"が2回または3回表示されるかどうかを知ることが重要なので、単語ベクトルを保持する機能が必要です。
どのテキスト検索エンジンが私に最も適していますか? Luceneのように見えます。特にMahoutでの作業には適しています。ドキュメンテーションのどの部分や関連するチュートリアルをお勧めしますか?私が見つけたのは、全文検索のためのものです。ステミングやその他の機能は必要ありません。
「類似性」とはどういう意味ですか?例えば。 「C = C」は「C-C」と「似ている」べきですか? "N"と同様の "N +"ですか? 「cco」は「c(c)o」などと似ていますか?もしあなたがいくつかの例題の検索と結果を見出したら、それはあなたが望むものについてもっと知る助けになるでしょう(私たちは化学者ではないので)。 – Xodarap
私は繰り返し回数n_iとi <〜500の単語W_iを持っています。私はリンクされた定義に従って、それらの間のコサインの類似性を行いたい。私は、私が探しているのはドキュメント検索の世界では標準的だと思うし、化学は問題ではないが、私は例で更新するだろう。 –
http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-pythonも参照してください。 –