問題タブ [fuzzy-comparison]
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.
regex - あいまいな正規表現
正規表現を使用してあいまい一致を行う方法を探しています。私はPerlを使いたいのですが、誰かがこれを行う方法を推奨できるなら、それは役に立ちます.
例として、「New York」という単語の前に 2 桁の数字が続く文字列を一致させたいとします。テキストがPDFのOCRからのものであるため、難しさが生じます。そのため、あいまい一致を実行したいと考えています。一致させたい:
およびその他の「近い」一致 (レーベンシュタイン距離の意味で)。
明らかに、一致の許容距離 (「あいまいさ」) を指定する必要があります。
私が理解しているように、これを行うために Perl モジュールを使用することはできませんString::Approx
。なぜなら、一致に正規表現を含める必要があるためです (前の数字と一致させるため)。
また、これは私が実際に一致させようとしているものの非常に単純化された例であるため、力ずくのアプローチを探しているわけではないことに注意してください。
追加するために編集:
さて、私の最初の例は単純すぎました。人々が前の数字にこだわるつもりはありませんでした -- 悪い例で申し訳ありません。これがより良い例です。次の文字列を検討してください。
ASSIGNOR, BY MESHS ASSIGN1IBNTS, TO ALUSCHALME&S MANOTAC/rURINGCOMPANY, A COBPOBATlOH OF DELAY/ABE.
これが実際に言っていることは次のとおりです。
ASSIGNOR, BY MESNE ASSIGNMENTS, TO ALLIS-CHALMERS MANUFACTURING COMPANY, A CORPORATION OF DELAWARE
私がする必要があるのは、「ALUSCHALME&S MANOTAC/rURINGCOMPANY」と「DELAY/ABE」というフレーズを抽出することです。(これは狂気のように思えるかもしれませんが、私は楽観主義者です。) 一般に、パターンは次のようになります。
/Assignor(, by mesne assignments,)? to (company name), a corporation of (state)/i
マッチングが曖昧です。
compare - 言語固有の癖に対するダメラウ・レーベンシュタイン距離
オランダ語を話す人々にとって、2つの文字「ij」は「y」と簡単に交換できる1文字と見なされます。
私が取り組んでいるプロジェクトでは、ダメラウ・レーベンシュタイン距離の変形を使用して、「ij」と「y」の間の距離を現在の値2ではなく1として計算したいと思います。
私はこれを自分で試しましたが失敗しました。私の問題は、両方のテキストの長さが異なるという事実をどのように処理するかについての手がかりがないことです。誰かがこれを解決する方法についての提案/コードフラグメントを持っていますか?
ありがとう。
python - Rubyのdifflib
Ruby上のPythonのdifflibに似たライブラリはありますか?
特に、difflib.get_close_matchesに似たメソッドを持つものが必要です。何かお勧めはありますか?
python - Pythonでのあいまいマッチングアルゴリズムの改善
タスク:2つのテキストファイルを取得し、100%一致と75%一致を出力します。
解決策:
問題:これは機能しますが、結果はあまり良くありません。一致の例を次に示します。
大学と大学を一致させる必要があるため、Diffの最小パーセントをあまり上げることができません。また、一部の文字列は「The」で始まり、「The」を除く文字列と一致する必要があるため、最初の単語が一致することを確認することはできません。技術的には75%似ているが、人間とはまったく似ていない試合を投げる方向に誰かが私を向けることができますか?algorithm - ファジーマッチング/チャンキングアルゴリズム
背景: ビデオと同期したいビデオ クリップとオーディオ トラックがあります。
ビデオ クリップから、リファレンス オーディオ トラックを抽出します。また、参照トラックと同期させたいトラックがもう 1 つあります。非同期は、各カットシーンの間隔を変更した編集に起因します。
ターゲット トラックを操作して、トラックのように見えるようにする (この場合は音のように聞こえる) 必要がありref
ます。これは、正しい位置で無音を追加または削除することになります。これは手動で行うこともできますが、非常に面倒です。したがって、これらの場所をプログラムで特定できるようにしたいと考えています。
例:
出力:
私の考えは、最初から始めます:
ここでの主な問題は、サウンド マッチングとフィンガープリンティングが曖昧であり、比較的コストのかかる操作であることです。
理想的には、できるだけ少ない回数にしたいです。アイデア?
python - アンケートの「差異」を補正する
今回のタイトルはかなり難しかったです。
あるシナリオを解決しようとしています。XXXXX 人に調査が送信され、お気に入りのサッカー クラブはどこかを尋ねられたと想像してください。返信から、多くが同じクラブのお気に入りである一方で、彼らはすべて異なる方法でそれを「表現」していることは明らかです. 例えば、
マンチェスター・ユナイテッドの場合、いくつかのバリエーションには...
- マンユー
- マン・ユナイテッド
- マン・ユナイテッド
- マンチェスター大学
- マンチェスター・ユナイテッド
すべてが同じクラブであることは明らかですが、抽出文字列の一致を取得しようとする単純な手法を使用すると、それぞれ別の結果になります。
ここで、シナリオをさらに複雑にする場合、さまざまなクラブ (例: マン シティ、M. シティ、マンチェスター シティなど) が非常に多いため、この問題に再び悩まされ、手動で「入力」することは不可能であるとしましょう。これらの差異を使用して、すべての Man U -> Manchester United、Man Utd のコンバーターなどのカスタム フィルターを作成します。> マンチェスター・ユナイテッドなど。しかし、代わりに、このフィルターを自動化し、最も可能性の高い一致を探して、それに応じてデータを変換したいと考えています。
私はPythonで(.cvsファイルから)これをやろうとしていますが、これを解決するための良いアプローチを概説する疑似回答を歓迎します.
編集: いくつかの追加情報 これは、クラブのセット リストから機能しているのではありません。スペルミスがないことを前提としています。クラブ数の推定長さはありません。調査リストは長いです。これを手動で行うことを保証しないほど長い (数千のクエリ)
python - Pythonでこの文字列一致メソッドの実装はありますか?
おおよその文字列一致を使用して、データ ストア内のどのエントリがほぼ重複しているかを調べようとしています。
Pythonで次のアプローチの実装はありますか、それとも自分で試してロールバックする必要がありますか?
ありがとう :)
...
強引なアプローチは、T のすべての部分文字列について P までの編集距離を計算し、距離が最小の部分文字列を選択することです。ただし、このアルゴリズムの実行時間は O(n3 m) になります。
動的計画法を利用したより良い解決策 [3][4] は、問題の別の定式化を使用します。テキスト T の各位置 j とパターン P の各位置 i について、i 番目の最初の文字間の最小編集距離を計算します。パターン Pi と、位置 j で終わる T の部分文字列 Tj',j。
これを多くの文字列に適用する最も効率的な方法は何ですか?
algorithm - 複数列の情報とのファジー レコード マッチング
やや高度な質問があるので、できるだけ具体的にしようと思います。
私は、さまざまなデータ セットを同じエンティティ (通常は会社または金融証券) を参照するヘッダー情報と組み合わせることを含む多くの調査を行っています。このレコードのリンクには、通常、名前が唯一の共通の主要な識別子であるヘッダー情報が含まれますが、いくつかの二次情報 (市と州、操作の日付、相対的なサイズなど) がしばしば利用可能です。これらの一致は通常 1 対多ですが、1 対 1 または多対多の場合もあります。私は通常、手動で、またはクリーンな部分文字列の非常に基本的なテキスト比較を使用して、このマッチングを行ってきました。レーベンシュタイン距離測定のような単純なマッチング アルゴリズムをときどき使用しましたが、それを適用する適切な正式な方法がなかったため、あまり活用できませんでした。
私の推測では、これはかなり一般的な質問であり、この種のことを行うために開発された形式化されたプロセスがいくつかあるに違いありません。与えられたアプローチの理論的妥当性を扱った主題に関する学術論文をいくつか読んだことがありますが、レシピや少なくとも実用的なフレームワークを説明する良い情報源は見つかりませんでした。
私の質問は次のとおりです。
本やウェブサイト、出版された記事や研究論文など、多次元ファジーレコードマッチングを実装するための良い情報源を知っている人はいますか?
私は、実用的な例と明確に定義されたアプローチを備えたものを好む.
このアプローチは反復的であり、中間段階で人間が改善をチェックします。
(編集) リンクされたデータは統計分析に使用されます。そのため、多少のノイズは問題ありませんが、「正しくない一致」が少ないことよりも「正しくない一致」が少ないことを強く好む傾向があります。
それらが Python にあれば素晴らしいことですが、必須ではありません。
最後にもう 1 つ重要な点として、私は計算効率についてはあまり気にしていません。私はこれを動的に実装していません。通常、数千のレコードを扱っています。
java - Java でのあいまい文字列検索 (単語の入れ替えを含む)
私は Java の初心者で、入力を事前定義された文字列のリストに一致させるプログラムを作成しようとしています。レーベンシュタイン距離を見てきましたが、次のような問題に直面しました。
「牛フィレ肉」などの入力がある場合は、「牛フィレ肉」に合わせたいと思います。問題は、レーベンシュタイン距離によれば、「牛肉のフィレ」が「マグロのフィレ」のようなものに近いということですが、これはもちろん間違っています。
これにはLuceneのようなものを使用する必要がありますか? Java クラス内で Lucene メソッドを使用していますか?
ありがとう!
arrays - 関連する配列のソート/結合
私がやっていることよりもこれを簡単にするアルゴリズムがあるに違いありません...
私が持っているのは、それぞれに 2 つの列を持つ 2 つの配列です。両方の 1 つの列はタイムスタンプであり、両方のもう 1 つの列は測定値です。
これを次の 1 つの配列に変換する必要があります: タイムスタンプ、測定値 1、測定値 2
問題は、タイムスタンプが正確に一致しないことが多いことです。ある期間、1 つの配列で値が完全に欠落している場合や、タイムスタンプがわずかな量だけずれている場合があります (両方の測定値を同じタイムスタンプに割り当てても問題ないほど重要ではありません)。
このあいまいなマージ操作を行うよく知られた方法はありますか? シンプルなパブリックドメイン機能??