問題タブ [agrep]
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.
r - Rのmax.distanceに関連する予期しないagrep()の結果
編集:このバグは R の 32 ビット バージョンで発見され、R バージョン 2.9.2 で修正されました。
これは今日@leonieduからツイートされたもので、彼への回答がないので、ここに投稿しようと思いました.
agrep() (あいまい文字列マッチング) のドキュメントを読みましたが、max.distance パラメーターを完全には理解していないようです。次に例を示します。
それはまさに私が期待するように動作します。文字列間には 18 文字の違いがあるため、それが一致のしきい値になると予想されます。これが私を混乱させているものです:
30 と 33 は一致するのに、31 と 32 は一致しないのはなぜですか? 計算を節約するために、
grep - 文字混同行列と一致するおおよその文字列?
各単語間にギャップがない長い一連の音から単語のインスタンス (音の文字列) を分離する必要がある音声認識エンジンをモデル化しようとしています。電話のストリームは、文字の置換/挿入/削除により認識が不十分な可能性があるため、おおよその文字列の一致を行う必要があります。
ただし、マッチングを音声学的に動機づけたい。たとえば、"m" と "n" は音声学的に類似しているため、"m" と "k" に比べて "m" の "n" への置換コストは小さくする必要があります。 "。したがって、[mein] "main" を検索している場合、文字列 [meim] "maim" はコスト 0.1 と一致し、文字列 [meik] "make" と一致します。 、コスト 0.7。同様に、各文字を挿入または削除するためのコストも異なります。文字のペア (x,y) ごとに、x を y に置き換えるコストを与える混同行列を提供できます。ここで、x と y は任意の文字または空の文字列です。
などの近似マッチングを行うツールがあることは知っていますが、agrep
私が知る限り、それらは混同行列を入力として取りません。つまり、挿入/置換/削除のコスト= 1 です。私の質問は、混同行列との近似マッチングを行うことができるオープンソース ツールが既に利用可能であるかどうかです。そうでない場合、実装できる優れたアルゴリズムは何ですか?これを達成するには?
編集: 明確にするために、[mein] などの単語のおおよそのインスタンスを [aiammeinlimeiking...] などの長い文字列から分離しようとしています。理想的には、アルゴリズム/ツールは、コスト 0.0 (完全一致) の [mein]、コスト 0.7 (ほぼ一致) の [meik] などのインスタンスを、コストが特定のしきい値を下回るすべての近似文字列一致について報告する必要があります。
r - agrep: ベストマッチのみを返す
私はRで「agrep」関数を使用しています。これは一致のベクトルを返します。最適な一致、または同点の場合に最適な一致のみを返す agrep に似た関数が必要です。現在、結果のベクトルの各要素に対してパッケージ「cba」の「sdist()」関数を使用してこれを行っていますが、これは非常に冗長に思えます。
/編集: 現在使用している関数は次のとおりです。距離を2回計算するのは冗長に思えるので、スピードアップしたいと思います。
php - PHP での複数キーワード (数百から数千) 検索 (文字列検索アルゴリズム)
PHP プロジェクトでこの問題を解決する必要があります。この問題では、一部のキーワード (数百から数千まで、長さはさまざま) を 100 ~ 300 文字の長さ、場合によっては 30 ~ 50 文字の短い文字列で検索する必要があります。検索文字列の新しいインスタンスを再利用するために、キーワードを前処理できます。私はPHPが初めてで、PHPライブラリでこれを行う方法が見つかりませんでした。少し検索したところ、Aho Corasick アルゴリズムでいくつかの適切な候補が見つかりました。次に、Sun Wu と Udi Manber によるこの改善は、agrep としても知られている (または agrep の一部である) ようです: http://webglimpse. net/pubs/TR94-17.pdf
Rabin Karp や Suffix Trees などもありますが、最初は固定長のキーワード用で、後者は非常に汎用的でかなり多くの作業が必要になるため、あまり適していないように見えました。
Agrep/Sun Wu-Manber を PHP で自分で実装することがこの問題を解決する良い方法であるかどうか、誰か教えてもらえますか? 別のフィードバックはありませんか?
編集: 以下のコメントで述べたように、何百もの異なる検索キーワードがあるため、正規表現は役に立ちません。したがって、その応答は役に立ちません。
string - 一致の agrep 出力オフセットを作成します
私は agrep を使用しようとしています。おおよその一致を実行できますが、一致の開始場所と終了場所を知る必要があります。それを可能にするフラグはありますか?
grep - agrep の入力として使用される xargs 文字列
みんな私はagrepの入力を渡すためにxargsを使用しています.私は以下のようなxargsを使用しています
私の目標は、このリクエスト ID を別のファイル "ファイル B" に agrep することです。このファイルは圧縮されているため、agrep を実行する前に zcat を使用する必要があります...しかし、これを行うと、誤った結果が得られます..agrep で使用する最終的な「文字列」は適切ではありません..これに関する提案は非常に役に立った。
r - agrepの問題
max.distance をゼロに制限しているのに、なぜ agrep は一致を見つけるのですか? adist は、2 つの挿入が必要であることを正しく教えてくれます...
r - 名前のあいまい一致によって一意のIDを作成します(Rを使用したagrep経由)
Rを使用して、年と都市で構造化されたデータセット内の人の名前を照合しようとしています。いくつかのスペルミスのため、完全一致は不可能です。そのため、agrep()を使用して名前をあいまい一致させようとしています。
データセットのサンプルチャンクは次のように構成されています。
きちんとしたバージョン:
数年後に候補者が出てくるかどうか、各都市で個別にチェックしたいと思います。たとえば、例では、
PAULO CEZAR FERREIRA DE ARAUJO
PAULO CESAR FERREIRA DE ARAUJO
2回表示されます(スペルミスあり)。データセット全体の各候補には、一意の数値候補IDを割り当てる必要があります。データセットはかなり大きいため(5500の都市、約100Kのエントリ)、ある程度効率的なコーディングが役立ちます。これを実装する方法について何か提案はありますか?
編集:これが私の試みです(これまでのコメントの助けを借りて)、手元のタスクを達成するのに非常に遅い(非効率的)です。これに対する改善について何か提案はありますか?
編集2:今は良い速度で実行されています。問題は、すべてのステップでの多くの要因との比較でした(それを指摘してくれてありがとう、BlueMagister)。1つのグループ(つまり都市)の候補者のみとの比較を減らすと、5秒で80,000回線のコマンドが実行されます。これは私が住むことができる速度です。
r - R の agrep - 文字列内の *すべて* の一致を検索します (グローバル フラグ)
私は文字列を持っています:
そしてパターン
あいまい一致 (agrep) で何回pattern
一致string
するか知りたい。
gregexpr
garegexpr
通常のマッチングでこれを行います-Rに対応するものがあるかどうか、またはパフォーマンスが重くなりすぎずにエミュレートする方法があるかどうかを知りたいだけです。
(aregexec
最初に一致した "eggs" のインデックスのみを返し、"ham" をスキップします)。
string - R: 文字列を別の文字列に置き換える際の agrep エラー
多くの試行錯誤と検索機能の後、私はまだ私が考えた単純なことについて少し無知です(いつものように、hrmpf):
データフレームx$question
に列があり、その列内に時々式があり、'A/V'
単に に変更したい'A / B'
.
私はあちこちで少し試してみましたが、これはうまくいくはずだと思いました:
しかし、私はエラーが発生します:
または私はこれを行うことができます
しかし、ここでエラーが発生します:
私はアイデアがまったくないので、提案があれば、または文字列を別の文字列に置き換えるもっと簡単な方法があれば、とても感謝しています。