問題タブ [fuzzy-search]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
423 参照

lucene - クエリにあいまいさを追加する

Luceneでユーザーが入力した検索クエリにあいまいさのレベルを追加する簡単な方法はありますか?

可能であれば、入力したテキストを解析する必要はありません。

現在、それらが入力された場合、green boxes私はブースト付きのマルチフィールドクエリパーサーを使用します。これにより、たとえば次のように簡単に生成されます。

次に、これを次のように変換します。

クエリを解析して各用語にあいまいさを追加する必要があるようですが、あいまいさを追加する簡単な方法があるのではないかと思いました。

0 投票する
3 に答える
2157 参照

php - Fuzzy Text Search: Regex Wildcard Search Generator?

I'm wondering if there is some kind of way to do fuzzy string matching in PHP. Looking for a word in a long string, finding a potential match even if its mis-spelled; something that would find it if it was off by one character due to an OCR error.

I was thinking a regex generator might be able to do it. So given an input of "crazy" it would generate this regex:

It would then return all matches for that word or variations of that word.

How to build the generator: I would probably split the search string/word up into an array of characters and build the regex expression doing a foreach the newly created array replacing the key value (the position of the letter in the string) with ".+".

Is this a good way to do fuzzy text search or is there a better way? What about some kind of string comparison that gives me a score based on how close it is? I'm trying to see if some badly converted OCR text contains a word in short.

0 投票する
3 に答える
10871 参照

sql-server-2005 - SQLServer2005を使用して可能性のある重複をあいまい一致させるための優れたSQL戦略

COMPANYNAMEやADDRESSLINE1などのフィールドに一致する大規模なデータベースで重複する可能性のあるレコードを見つけたい

例:

次のCOMPANYNAMEのレコードの場合:

  • 「Acme、Inc。」

クエリで、これらのCOMPANYNAME値を持つ他のレコードを可能な限り重複して吐き出したいのですが。

  • 「アクメ・コーポレーション」
  • 「Acme、Incorporated」
  • 「アクメ」

結合、相関サブクエリなどを実行して、必要なデータセットをプルするメカニズムを実行する方法を知っています。そして、私はそれが以前にここでカバーされたことを知っています。あいまい検索を行うための最良の方法についての考えを聞くことに興味があります-全文索引またはsoundex関数、またはこのプロセスに気付いていない何かを使用する必要がありますか?(SQL Server 2005を使用しています)

どんな助けでも大歓迎です!

0 投票する
1 に答える
2223 参照

algorithm - Bitapアルゴリズムであいまい一致を見つける

最近、私はbitapアルゴリズムのいくつかの実装を調べましたが、それらすべてが行うことは、あいまい一致の開始点を見つけることです。私が必要としているのは、一致するものを見つけることです。例があります:

次のテキストがあるとします:abcdefg

とパターン:bzde

そして、最大で1つのエラー(編集距離が考慮されます)でテキスト内のパターンのすべての出現を見つけたいと思います。

したがって、アルゴリズムがbcdeを返す必要があります。

それを行うための簡単な(または単純ではない=))方法はありますか?このアルゴリズムに関する元のアーティカルは、質問に答えません。

ご協力ありがとうございました。

0 投票する
1 に答える
170 参照

search - ファジー データでデータベースを相互参照する

私は現在、大量のユーザー生成名を正規形式の同じ名前の別のリストと照合する必要があるプロジェクトに取り組んでいます。問題は、ユーザーが生成した名前に多数のスペルミス、略語、および単に無効なデータが含まれているため、正規データとの相互参照が困難になることです。これを行う方法に関する提案はありますか?

これはリアルタイムで行う必要はありません。この場合、速度よりも正確さが重要になります。

これに関する現在のアイデアは次のとおりです。

  1. Lucene や Sphinx などの既存の検索実装を使用して、標準データベースでユーザーが入力した名前のあいまい検索を実行します。これには、レーベンシュタイン距離のようなものを使用すると思われます。
  2. 実際の名前を使用する代わりに、SOUNDEX ハッシュ (スペルではなく名前の音で計算されると思われる) の相互参照。
  3. 上記のいくつかの組み合わせ

これらのいずれかまたは独自のアイデアについてフィードバックがある人はいますか?

私の懸念の 1 つは、上記の方法のいずれも省略形をうまく処理できないということです。拡張された略語を実際に検索するためのいくつかの機械学習方法の方向性を誰かに教えてもらえますか (または、私がおかしいと言ってください)? 前もって感謝します。

0 投票する
4 に答える
911 参照

php - あいまい検索をサポートする、実装が最も簡単なサイト検索アプリケーションは何ですか?

ほとんどが映画やテレビ番組の名前である約 20 ~ 30k のレコードを検索する必要があるサイトがあります。このサイトでは、memcache を使用して php/mysql を実行しています。

私は現在持っている検索に置き換えようとFULLTEXTsoundex()ていますが、これはうまくいきます...しかし、多くの状況ではあまり良くありません。

実装が簡単で、適切な検索機能 (テーブル内の 3 列) を提供する適切な検索スクリプトはありますか?

0 投票する
2 に答える
6623 参照

php - PHP/MySQL 小規模ファジー検索

小さな PHP/MySQL アプリケーションにあいまい検索を実装しようとしています。具体的には、約 2400 レコードのデータベースがあります (レコードは年間約 600 の割合で追加されるため、小さなデータベースです)。対象となる 3 つのフィールドは、番地、姓、および日付です。これらのフィールドのいずれかで検索できるようにしたいのですが、基本的にスペル/文字のエラーに対する許容度があります。つまり、「123 Main Street」の住所は、「123 Main St」、「123 Main St.」、「123 Mian St」、「123 Man St」、「132 Main St」などと一致する必要があり、名前についても同様です。と日付。

他の同様の質問への回答で私が抱えている主な問題:

  • 考えられるすべての間違ったスペルに対して類義語を定義することは不可能です。日付と名前について定義することは忘れてください。
  • Lucene などは、このような限られた検索データ セット (最大 5,000 レコード、1 レコードあたり 3 フィールドと呼びます) に対して非常に重いようです。
  • ワイルドカードを使って何かをするだけでは、すべてのスペル ミスが考えられるため、論理的には思えません。

助言がありますか?MySQL でネイティブに実行できないことはわかっていますが、データ セットが非常に限られているため、比較的シンプルに保ちたいと考えています...おそらく、DB からすべてのレコードを取得する PHP クラス、ある種の比較アルゴリズムを使用して、類似したレコードの ID を返しますか?

ありがとう、ジェイソン

0 投票する
4 に答える
11843 参照

sql - q-gram近似マッチングの最適化

q-gramを使用してファジーマッチングを実行したい300万人のレコードを含むテーブルがあります(姓など)。これにリンクする 2 グラムのテーブルを作成しましたが、このデータ ボリューム (約 5 分) では検索パフォーマンスが高くありません。

基本的に 2 つの質問があります: (1) テーブル スキャンを回避するためにパフォーマンスを改善する方法を提案できますか (つまり、検索文字列と 300 万の姓の間で一般的な q-gram をカウントする必要があります) (2) q-gram を使用する場合、Aは B に似ており、C は B に似ていますが、それは C が A に似ていることを意味しますか?

敬具

ピーター

0 投票する
1 に答える
503 参照

java - 演算子なしの Lucene クエリ

Lucene を使用してデータベース内の名前を検索しようとしています。ただし、一部の名前には「NOT」や「OR」、さらには「-」などのマイナス記号が含まれています。名前内のさまざまなトークンをアナライザーを使用して分割し、用語のブール組み合わせとして検索したいのですが、Lucene に「NOT」/「OR」用語を演算子として解釈させたくありません (代わりに、通常の用語と同じように検索してほしい)。

私が話していることを達成する 1 つの方法は、検索クエリでアナライザーを手動で実行し、結果のすべてのトークンに基づいてブールクエリを手動で作成することです。これが最善の方法ですか?アナライザーはクエリパーサーと組み合わせて使用​​するように設計されているという印象を受け、私がやろうとしていることを達成するための組み込みの方法があるべきだと感じています。これを行う最良の方法を知っている人はいますか?