2011-01-14 6 views
5

私は非従来のテキスト検索のテキスト検索エンジンを探しています。どのツール(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での作業には適しています。ドキュメンテーションのどの部分や関連するチュートリアルをお勧めしますか?私が見つけたのは、全文検索のためのものです。ステミングやその他の機能は必要ありません。

+0

「類似性」とはどういう意味ですか?例えば。 「C = C」は「C-C」と「似ている」べきですか? "N"と同様の "N +"ですか? 「cco」は「c(c)o」などと似ていますか?もしあなたがいくつかの例題の検索と結果を見出したら、それはあなたが望むものについてもっと知る助けになるでしょう(私たちは化学者ではないので)。 – Xodarap

+0

私は繰り返し回数n_iとi <〜500の単語W_iを持っています。私はリンクされた定義に従って、それらの間のコサインの類似性を行いたい。私は、私が探しているのはドキュメント検索の世界では標準的だと思うし、化学は問題ではないが、私は例で更新するだろう。 –

+0

http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-pythonも参照してください。 –

答えて

1

編集:私は今これをよりよく理解しているかもしれません。 文字列として表されるグラフを比較したいとします。文字列には「単語」が繰り返し表示されます。 あなたはLuceneを使用することができます。その場合、私はSolrを使用する提案を2番目にします。 基本的に、各Solrドキュメントは1つのフィールドで構成されます。フィールドには文字列が含まれています。これはC:2の代わりにC Cと書いてください。 スペースを使用して単語を区切っている場合は、WhiteSpaceAnalyzerを使用できます。別のセパレータを使用する場合は、カスタムアナライザを作成する必要がありますが、これはあまり難しくありません。

これは良い考えですか?私はわかりません。いくつかの具体的な修正を加えて、コサイン、TF/IDFおよびブール得点をミックスした、というLucene Similarity

  1. のLucene(およびSolrには)などのコサイン類似度を使用していませんが、:ここに理由です。これはほとんどのテキストユースケースでうまく動作しますが、必要なものとは異なる場合があります。
  2. 異なる検索のヒットを比較する必要がありますか?もしあなたがそうするならば、Solrを使うのは難しいです。すべての検索を1の最大値に正規化するからです。

あなたのデータベースの小さなサンプルでは、​​Solrを試してみることをお勧めします。もしSolrがあなたのために働くならば、大丈夫です。 そうでなければ、シングリングと最小ハッシュがおそらく行く方法です。 Mining of Massive Datasets by Rajaraman and Ullmanは、これらの主題に関する最近の無料の本です。 あなたがそれを読むことをお勧めします。データの山々にある類似の文字列の検索についても説明します。 差別化要因は次のようなものです:比較的大きな交差点が必要ですか?その場合は、シングリングと最小ハッシュを使用してください。そうでない場合は、おそらくSolrで十分でしょう。

+0

文字列照合と配列の整列?どうして?私の「文書」には「単語」が含まれています。クエリ文書とターゲット文書コレクションが与えられれば、コサイン類似度に基づいてコレクション内で最も近い10点を見つけたいと思う。アライメントアルゴリズムとは、データにはない順序を意味します。 Needleman-Wunsch、Aho-Corasickなどの文字列一致アルゴリズムは、少なくとも私が理解できる限り、適用されません。 (私はちょっとバイオインフォマティクスで働いていたので、彼らが使用できる場所の一部を知っています。) –

+0

私はあなたの文書と言葉をよりよく扱うために私の答えを編集しました。 –

+0

先日、私はその本を読んで始めました。とても役に立ちます。私はSolrとやり取りして何が起こるかを見ていきます。私はまた、http://nlp.fi.muni.cz/projekty/gensim/index.htmlでgensimを見つけました。 –

1

うーん... SMARTSが何であるか、あるいは化学的な類似性が実際にどのように作用するのかは分かりません。 luceneを使用する場合は、まずsolrの使用を検討してください。あなたのデータはグラフになっているので、あなたはsoloコンポーネントを使ってneo4jを見ることができます。また、この問題は、重複した文書の近くの文書に、より密接に関連していますか?それを助けるために、LSH、Spotsigs、shingling、simhashのアルゴリズムがいくつかあります。私はもっ​​と助けてくれることを願っています。

+0

テキスト検索でグラフ検索を置き換えたり簡略化したりすることができますか? 5千万の分子は約1億5千万の原子と多くの結合をします。私はneo4jのような一般的なグラフのデータベースが専門化学検索エンジンの能力にどのように近づくかを見ていません。しかし、それぞれ1,000語(すべてユニーク)を含む5千万の文書のコサイン類似性検索を行うことは容易でなければならない。私はその仕事のためのツールを探しています。 –

+1

あなたは何を意味するのかよく分かります.Solrは使い方が簡単です。それはルシネの上の別の層です。化学物質ごとにどれくらいのフィールドがあるかも知っていますか?キーワードトークナイザを使用すると、インデックスを取得するフィールドへの入力のそれぞれがトークン化されず、ステミングやその他の特殊機能によるインデックス処理をフィルタリングしないだけです。私はあなたがPacktによって出版された本を得ることをお勧めします。私はこれがおそらく、検索エンジンのエンタープライズ用途で唯一の本の役に立つと思う。 – Joyce

+0

各化合物は、約200,000語の語彙から選択される約200-600語を有する。本のお薦めをありがとう! –

0

luceneは使用しないでください。またはSolr。内部モデルは古くから一緒につながっています。彼らは良い仕事をしますが。 BM25Fが完全にサポートされている最小限の基準(テキストエンジン内にマップしたい場合)を持つエンジンを見つけます。私がそれを受けて、スケーラビリティとパフォーマンスと低コストのサポートコミュニティを望むなら、率直に言って私はSQL Serverとキューブを使いたいと思います.SQL Serverを使ったライセンスは完全なブロッカーになる可能性があります。がんばろう。

+0

BM25Fがなぜ私がやっていることに適しているのか分かりません。コサインの類似性よりも優れているのはなぜですか?友人はBM25をサポートしているXapianを提案しましたが、広く使われているようには見えません。私はMacや他のUNIXの変種を使用しているため、Windowsのみのソリューションは動作しません。 –