フォーラムの返信を作成しました。
- 作成者投稿
Applek
Participantありがとうございます。勉強になりました。
Applek
Participantありがとうございます。
同一ワンパターンの大量データベースを照合させる場合には、リンクファイルの方法が最速であることを理解いたしました。逆に言うと以下のような使い方になる場合はリンクの書き方は向いていないと言うことになるかと思います。
私の場合は、上記の動画の使い方の場合もありますが、正規表現と非正規表現記述の混在した記述が入り交じった状態になります。
また最初は非正規表現である場合であっても、動作の様子を見て正規表現の書き方に付け足すことがあります。
正規表現のパターンは、
batch_list.AddReplace(“\\n”,”⏎”,eeFindReplaceRegExp,0);// シングルライン
batch_list.AddReplace(“⏎”,”\\n”,eeFindReplaceRegExp,0);// シングルラインモード解除
シングルラインモードなどを交えた正規表現パターンは混在です。たとえば事例で言うと
batch_list.AddReplace(“ほっかいどう”,”北海道”,eeFindReplaceRegExp,0);// 非正規表現
この場合は途中から様子を見て
batch_list.AddReplace(“ほっかいどう([^で])”,”北海道\\1″,eeFindReplaceRegExp,0);// 正規表現に変えるこんなふうに部分的にあとから正規表現をつけたしたりすることがよくあります。
こういう混在書き、柔軟な変更をよくする使い方の場合については従来型(リンクではない)の書き方でないと難しいということになりますでしょうか?
そういうことでしたら、リンクでない従来の書き方で最速にして頂けると幸いです。
課題は認識されていても混在型の書き方を速くするのが技術的に難しいとかデメリットがあるから見送っているということが理由でしたらしかたないと思っています。私としては、従来の1個のファイル(リンクでないファイルのほうが)、その都度の編集や変更がしやすいというメリットがあります。
前回の質問でリンクの使い方を回答頂きましたので知ってはいましたが、その都度、頻繁な編集には向いていないので従来型の書き方にしていました。このあたりの内部処理のメカニズムの事情はわからないので質問させていただきました。
ただ、上記の書き方であっても、単純な置換の場合でも、いずれにしても2000個くらいで区切るだけで、かなり速くなったのが検証結果ででていますので、アルゴリズム的に従来型の記述でも速くなると思います。
たとえば2000個以上書かれている場合は内部処理で、一旦閉じて書いて無くても自動的に区切って分割処理するとかです。
それで区切る手間は省けますし速くなります。
1回の処理は最大で2000個までとして、分割処理するというのはどうでしょうか?
これでマクロの記述のほうは省けます。よろしくお願いいたします。
Applek
Participant区切り方だけで速度が大きく変わることについては、比較のサンプルマクロが必要でしたら準備して送ります。
これらは、EmEditor側で内部アルゴリズムでコードを把握して自動調整すると最速になると思います。Applek
Participantありがとうございます。
わかりました。
正規表現は連続置換にします。以前の過去のバージョンアップ記事を読み込むと1回のバージョンアップで速度が何百倍とかに速度アップしている事例が多数ありました。
連続置換自体もまだ速くなる余地はありそうでしょうか?私が気がついている限りでは、前の質問で書いたことと重複しますが、
数十万の置換を並べた場合だと1回で閉じるよりも2000個くらいで一度区切りでそれを繰り返した方がはるかに速くなります。
書き方を変えるだけでも速度が変化しますが、おそらく、これは試行錯誤した人しか気がつかないです。
batch_list = editor.filters;
2000個くらいの置換
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);これくらいに一度閉じてやったほうがかなり速くなります。
このことから、動作のアルゴリズムでユーザーがコードを書いていなくても2000回くらいで区切った扱いとして処理すると1回閉じでも速くなると思います。
よろしくお願いいたします。Applek
Participantありがとうございます。
毎回1個書くごとに毎回閉じないといけない仕様と言うことがわかりました。
その書き方でもトータルで速くなれば良いです。
連続置換だと毎回1個のファイルをやるのに終わるまで10分とかかかります。
おそらく私はEmEditorの使っている人のなかではかなりヘビーな動作をさせているほうだと思います。
ひとつのファルだけでEmEditorでマクロが終わるまで30分以上かかるものが多数あります。
今まで書いたのは、ほとんどの動作はOnigmoでしか動かない\\p{Han}とかの組み合わせコードで書いているので、本格的な動作はまだできない状況です。
よろしくお願いいたします。Applek
Participantありがとうございます。
前の連続置換との一括置換の動作の違いを質問させて頂きます。
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);
この連続置換のときと違って続けて並べて書くことはできないのでしょうか?以下のようだと北海道までで処理が止まります。
batch_list = editor.filters;
batch_list.AddReplace(“ほっかいどう”,”北海道”,eeFindReplaceRegExp,0);
batch_list.AddReplace(“北海道”,”ホッカイドウ”,eeFindReplaceRegExp,0);
batch_list.AddReplace(“ホッカイドウ”,”太郎”,eeFindReplaceRegExp,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);以下の場合は、ほっかいどうから始まって、太郎まで変換します。
こんな感じで毎回1処理ずつ囲まないといけなくなりましたでしょうか?よろしくお願いいたします。batch_list = editor.filters;batch_list.AddReplace(“ほっかいど.”,”北海道”,eeFindReplaceRegExp,0);document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);
batch_list = editor.filters;batch_list.AddReplace(“北海.”,”ホッカイドウ”,eeFindReplaceRegExp,0);document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);
batch_list = editor.filters;batch_list.AddReplace(“ホッカイド.”,”太郎”,eeFindReplaceRegExp,0);document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);Applek
Participantバージョンアップありがとうございます。
さっそく最新バージョンを使わせていただいているいるのですが、以下のマクロが同じ動作結果にはならないのは仕様でしょうか?以下のようなサンプルです。
動作テストをするとまったく違う結果になるのは仕様でしょうか?
よろしくお願いいたします。動作テスト対象文
ののののののののののののののほっかいどうりりりりりりりりりりりりりりりり
ののののののののののののののほっかいどうりりりりりりりりりりりりりりりり
ののののののののののののののほっかいどうりりりりりりりりりりりりりりりり新しい機能のマクロ
batch_list = editor.filters;
batch_list.AddReplace(“^(.*?)ほっかいどう(.*?)$”,”\\1北海道\\2″,eeFindReplaceRegExp,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);// 新バージョンの書き方通常の以前のやり方の置換
batch_list = editor.filters;
batch_list.AddReplace(“^(.*?)ほっかいどう(.*?)$”,”\\1北海道\\2″,eeFindReplaceRegExp,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);Applek
Participantお世話になっております。
追加です。
半角全角を区別しないを組み合わせるとほっかいドウ
ホッカイどう
これらもマッチすることになります。Applek
Participantバージョンアップありがとうございます。
すべて一括置換は正規表現は、対応してないというのは、これは技術的に不可能なのか、それとも最初の段階では、とりあえず通常の置換だけに対応して随時、正規表現も対応へとバージョンアップしていくという予定でしょうか?
正規表現も含めて6000倍とかになったこれは、凄いことです。
よろしくお願いいたします。- 作成者投稿