45

ここでの作業では、文字列のリストから他の入力文字列に最も近い文字列を見つける必要があることがよくあります。現在、Needleman-Wunsch アルゴリズムを使用しています。アルゴリズムは多くの場合、(最小スコアの設定が低すぎると) 偽陽性を返します。必要なときに (最小スコアが高すぎると) 一致が見つからない場合があり、ほとんどの場合、結果を手で確認する必要があります。他の選択肢を試す必要があると考えました。

アルゴリズムの経験はありますか? アルゴリズムが互いにどのように比較されるか知っていますか?

アドバイスをいただければ幸いです。

PS: 私たちは C# でコーディングしていますが、気にする必要はありません。一般的なアルゴリズムについて質問しています。


あ、すみません言い忘れました。

いいえ、重複データの照合には使用していません。探している文字列のリストがあります。これを検索リストと呼びます。次に、さまざまなソース (RSS フィード、Web サイト、フォーラムなど) からのテキストを処理する必要があります - それらのテキストの一部を抽出し (そのためのルール セット全体がありますが、それは無関係です)、一致する必要があります。検索リストに反対するもの。文字列が search-list 内の文字列の 1 つと一致する場合、さらに処理を行う必要があります (これも無関係です)。

ほとんどの場合、外部ソースから抽出された文字列には余分な単語などが含まれているため、通常の比較は実行できません。

とにかく、重複検出用ではありません。

4

7 に答える 7

32

OK、Needleman-Wunsch(NW) は、バイオインフォマティクスの文献からの古典的なエンドツーエンド (「グローバル」) アライナーです。かなり前に、FASTA パッケージで「align」および「align0」として利用可能でした。違いは、「0」バージョンは、エンド ギャップを回避することについてそれほどバイアスがかかっていなかったことです。これにより、多くの場合、高品質の内部一致をより簡単に優先することができました。ご存知かと思いますが、Smith-Waterman は地元のアライナーであり、BLAST の最初の基礎となっています。FASTA には独自のローカル アライナーもありましたが、これは少し異なりました。これらはすべて、基本的に、個々の文字ペアのスコアリング メトリックに関連するレーベンシュタイン距離を推定するヒューリスティックな方法です (バイオインフォマティクスでは、Dayhoff/"PAM"、Henikoff&Henikoff、

ラベルについては気にしないでください: レーベンシュタイン距離は、少なくとも実際に参照されているように、基本的には編集距離であり、一般的に計算するのは現実的ではなく、興味深い特殊なケースでさえ正確に計算するには費用がかかるため、推定する必要があります: 水そこではすぐに深くなるので、長くて評判の良いヒューリスティックな方法があります。

さて、あなた自身の問題についてですが、数年前、私は短い DNA 読み取りの正確性を、正しいことがわかっている参照配列に対してチェックしなければならず、「固定アラインメント」と呼ばれるものを思いつきました。

アイデアは、指定された N 文字の部分文字列が発生するすべての場所を見つけることによって、参照文字列セットを取得し、それを「ダイジェスト」することです。作成するテーブルが大きすぎず、長さ N の部分文字列が一般的になりすぎないように、N を選択します。DNA 塩基のような小さなアルファベットの場合、N 文字の文字列に対して完全なハッシュを作成し、テーブルを作成して、各ビンからのリンクされたリストで一致を連鎖させることができます。リスト エントリは、それらが出現するリスト内のビンにマップされる部分文字列のシーケンスと開始位置を識別する必要があります。これらは、NW アラインメントが役立つ可能性が高い、検索対象の文字列のリスト内の「アンカー」です。

クエリ文字列を処理するとき、クエリ文字列のオフセット K から始まる N 文字を取得し、それらをハッシュし、それらのビンを検索します。そのビンのリストが空でない場合は、すべてのリスト レコードを調べて間のアライメントを実行します。レコードで参照されているクエリ文字列と検索文字列。これらのアラインメントを行うときは、クエリ文字列と検索文字列アンカーで並べ、クエリ文字列と同じ長さで、同じオフセット K でそのアンカーを含む検索文字列の部分文字列を抽出します。

十分に長いアンカー長 N とオフセット K の妥当な値のセット (クエリ文字列全体に分散するか、低いオフセットに制限することができます) を選択すると、可能なアラインメントのサブセットが得られ、多くの場合、より明確な勝者が得られます。通常、エンド バイアスの少ない align0 のような NW アライナーを使用することをお勧めします。

このメソッドは、入力を制限することで NW を少しブーストしようとします。アラインメントが少なくなり、同様のシーケンス間で行われることが多いため、パフォーマンスが向上します。NWアライナーで行うもう1つの良いことは、特に中程度の品質の試合を見たり興味を持ったりしないことがわかっている場合は、コストを削減するために、ある程度または長さのギャップが発生した後にあきらめることです.

最後に、この方法は、小さなアルファベットのシステムで使用され、K はクエリ文字列の最初の 100 程度の位置に制限され、検索文字列はクエリよりもはるかに大きくなります (DNA 読み取りは約 1000 塩基で、検索文字列はオンでした)。 10000のオーダーなので、具体的には編集距離の推定によって正当化されるおおよその部分文字列の一致を探していました)。この方法論を自然言語に適応させるには、慎重に検討する必要があります。アルファベットのサイズでは負けますが、クエリ文字列と検索文字列の長さが同じであればメリットがあります。

いずれにせよ、クエリ文字列の異なる端から複数のアンカーを同時に使用できるようにすることは、NW に供給されるデータをさらにフィルタリングするのに役立つ場合があります。これを行う場合は、それぞれが 2 つのアンカーの 1 つを含むオーバーラップする文字列をアライナーに送信し、アラインメントを調整する準備をしてください。または、NW をさらに変更して、アラインメント中にアンカーをほとんどそのまま維持することを強調するために、アルゴリズムの実行。

これが役立つか、少なくとも興味深いことを願っています。

于 2008-09-08T16:39:52.667 に答える
6

レーベンスタイン距離に関連する: 結果を長い文字列の長さで割って正規化すると、常に 0 と 1 の間の数値が得られ、文字列のペアの距離を意味のある方法で比較できるようになります。方法 (式 L(A, B) > L(A, C) - たとえば、距離を正規化しない限り意味がありません)。

于 2008-09-08T07:46:37.300 に答える
4

レーベンシュタイン距離法を使用して、データベース内の重複した顧客を確認しています。それは非常にうまく機能します。

于 2008-09-08T07:29:47.947 に答える
4

注目すべき代替アルゴリズムは、agrep ( agrepに関するウィキペディアのエントリ)、 FASTA および BLAST生物学的シーケンス マッチング アルゴリズムです。これらは近似文字列一致の特殊なケースで、ストーニー ブルック アルゴリズム リポジトリにもあります。文字列が互いにどのように異なるかを指定できれば、カスタマイズされたアルゴリズムに集中できるでしょう。たとえば、aspell は「soundslike」(soundex-metaphone) 距離の変形を「キーボード」距離と組み合わせて使用​​し、スペルが下手でもタイピングが下手でも同様に対応します。

于 2008-09-10T09:58:03.597 に答える
1

Bowtie fuzzy alignerのものと同様に、Backtracking でFM Indexを使用します。

于 2013-02-23T23:56:14.690 に答える
0

Cd-MaN の回答を拡張するには、正規化の問題に直面しているようです。さまざまな長さのアラインメント間のスコアを処理する方法は明らかではありません。

何に関心があるかを考えると、アラインメントの p 値を取得したい場合があります。Needleman-Wunsch を使用している場合は、Karlin-Altschul 統計http://www.ncbi.nlm.nih.gov/BLAST/tutorial/Altschul-1.htmlを使用してこれらの p 値を取得できます。

BLAST は、これらの統計を使用してローカル アラインメントと評価を行うことができます。速度が気になる場合は、これを使用するのに適したツールです。

別のオプションは、HMMER を使用することです。HMMER は、Profile Hidden Markov Models を使用して配列を整列させます。個人的には、これは位置情報も提供するため、より強力なアプローチだと思います。http://hmmer.janelia.org/

于 2014-03-20T02:50:47.650 に答える