2

データベーステーブルには約1000のレコードがあります。title記事のタイトルを格納するために使用されるという名前の列があります。レコードを挿入する前に、同じタイトルの記事がそのテーブルにすでに存在するかどうかを確認する必要があります。もしそうなら、私はスキップします。

この種のあいまいマッチングを実行するための最速の方法は何ですか?文中のすべての単語が英語の辞​​書にあると仮定します。文#1の単語の70%が文#2で見つかった場合、それらは一致すると見なされます。理想的には、アルゴリズムは各文の値を事前に計算して、値をデータベースに保存できるようにすることができます。

4

2 に答える 2

2

1000レコードの場合、ばかげたことを実行し、すべてのレコードを反復処理するだけで機能する可能性があります(文字列が長すぎず、クエリが多すぎないことを前提としています)。データベースからすべてのタイトルを引き出し、指定された文字列までの距離で並べ替えるだけです(たとえば、このメトリックにはレーベンシュタイン距離を使用できます)。

近似文字列マッチングを行うためのより優れた方法は、すべての文字列のn-gramを事前に計算し、それらをデータベースに保存することです(一部のシステムはこの機能をネイティブにサポートしています)。これにより、パフォーマンスが確実に向上しますが、作業量が増える可能性があります。

http://en.wikipedia.org/wiki/N-gram

于 2011-06-26T03:19:20.413 に答える
2

トークンの順方向/逆方向のインデックス付け(検索結果を高速化するための値の保存)を確認できます。私は個人的に、トークン(キー)のハッシュマップを値(ここではタイトル)に格納する逆インデックスを好みます。

新しいstackoverflowの質問のように、新しい記事を書くときはいつでも、タイトルのトークンが検索されて、利用可能なすべてのタイトルにマッピングされます。

結果を最適化する、つまり結果のファジーロジックを取得するために、検索対象のトークンの最大出現回数でタイトルを並べ替えることができます。たとえば、t1、t2、t3がトークン「何」を参照している場合、「愛」とタイトル「この愛は何のためにあるのか」。すべてのトークンマッピングに存在し、最上位に配置されます。

これでもっと遊ぶことができます。このアプローチがよりシンプルで魅力的なものになることを願っています。

于 2012-03-29T03:37:34.567 に答える