リストからの語の置換(検索)No.05183
ならい さん 06/07/05 15:02
 
こんにちは。
すみませんが教えてください。

翻訳する際の訳語をクライアントごとに統一するために、原文(訳文)内の特定(指
定された)の語(句)を置換(または検索)したいと思っています。
実はこれまでは、
 gofiletop;
 replacedown "A","エー";
のように、ひとつひとつの語(句)にreplacedownを繰り返し使ったマクロを書いて
いたのですが、語の数が増えるにつれてだんだん処理が面倒になってきました。
そこで、クライアントごとに、検索したい語と置換したい語の次のようなリストを作
り(「a」を「エー」に置換するという意味)、
 a,エー
 b,ビー
 c,シー
 …
このリストを元に各クライアントごとの置換マクロを実行すればすっきりしそうだと
考えたのですが、どうもしょっぱなから躓いています。
そのようなわけで、上記のような置換語リストをもとに置換をするにはどうしたらよ
いでしょうか。

実は、山紫水明さんの「ListReplace.mac」というマクロを参考にしようと思って見
てみたのですが高度すぎてお手上げでした^^;)。

よろしくお願いします。

[ ]
RE:05183 リストからの語の置換(検索)No.05184
白雲斎 さん 06/07/05 20:48
 
こんにちは ならい さん、白雲斎です。

やりたい事の詳細は分かりませんが、英単語(アルファベット)のみを編集対象
としたマクロ例を作成しました。使えるようでしたら、どうぞ。

●操作手順

    1)  検索キーワードと置き換えキーワードを記述したファイル(置き換え
        リスト)を、マクロ用フォルダに「replaceList.txt」の名前で保存し
        ます。
    2)  編集対象のファイルを開いて、マクロを実行します。
    3)  完了。

●置き換えリストの作成方法

ファイルの先頭に“[LIST]”、次の行から、半角のイコール(=)を挟んで“検索
キーワード”と“置き換えキーワード”を記述します。
※アルファベットの大文字小文字は区別しません。

完成例:
--------------------
[LIST]
sample=サンプル
test=テスト
--------------------

●注意

これは、INIファイル形式のため容量制限があり、登録するキーワードの数に限
度があります。例えば、以下の検索キーワードと置き換えキーワードの場合、
800個前後が限度値になると思います(多分)。
---------------------------------------
ABCDEFGHIJKLMN=あいうえおかきくけこさし
---------------------------------------
ですので、置き換えリストのファイル・サイズが32KBを超えないように注意して
ください。

念のため、実験結果が良好である事を確認してから本番に挑んでください。

●以下マクロ


if( version < 500 ) endmacro;
$INI = macrodir + "\\replaceList.txt";  // 置き換えリスト
if( existfile($INI) == false ) endmacro;

#findMode = searchmode;
if( #findMode == 0 ) call SwitchFindMode 1;

disabledraw;
gofiletop;
searchdown2 "\\<[a-z]+\\>", regular, nocasesense;
while( result )
{
    $s = getinistr($INI, "LIST",
            gettext(foundtopx, foundtopy, foundendx, foundendy, 1));
    if( $s != "" ) insert $s;
    else right;
    finddown;
}
enabledraw;

if( #findMode == 0 ) call SwitchFindMode 0;
message "完了";
endmacro;

SwitchFindMode:
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound", ##1;
    closereg;
    envchanged;
return;

[ ]
RE:05184 リストからの語の置換(検索)No.05185
ならい さん 06/07/06 18:04
 
白雲斎さん、こんにちは。
早速ありがとうございました。

英単語を置換するマクロ使わせて頂きます。

ところで、このマクロは英単語→和訳語ですが、「受け取り」→「受取り」のように
日本語→日本語の置換をするようにできないでしょうか。

>searchdown2 "\\<[a-z]+\\>", regular, nocasesense;
の部分を[a-z、-龠堯槇遙瑤凜熙]にすればいいのかな、などと考えてみたのですが、
そんな簡単なわけにいかないみたいですね^^;)

ヒントだけでもけっこうですので頂けると幸いです。

よろしくお願いします。

ならい

[ ]
RE:05185 リストからの語の置換(検索)No.05186
白雲斎 さん 06/07/07 18:02
 
こんにちは ならい さん、白雲斎です。

>ところで、このマクロは英単語→和訳語ですが、「受け取り」→「受取り」のように
>日本語→日本語の置換をするようにできないでしょうか。
>
>>searchdown2 "\\<[a-z]+\\>", regular, nocasesense;
>の部分を[a-z、-龠堯槇遙瑤凜熙]にすればいいのかな、などと考えてみたのですが、
>そんな簡単なわけにいかないみたいですね^^;)

各単語が空白で区切られている英文とは異なり、文字が連なっている日本語文章
にて、1個のキーワードで単語を特定することは不可能と思います。
ですので、冗長ではありますが、キーワード個数分の置き換えコマンドを実行す
る以外に方法が浮かびません。

多種多様な表記統一が求められるなら、ジャストシステムが販売している校正支
援ソフトの「Just Right!」などの導入を検討してみてはいかがですか。
(私はまったく知らないけど)

以下マクロ例:

●操作手順

    1)  検索キーワードと置き換えキーワードを記述したファイル(置き換えリ
        スト)を、マクロ用フォルダに「replaceListJa.txt」の名前で保存し
        ます。
    2)  編集対象のファイルを開いて、マクロを実行します。
    3)  完了。

●置き換えリストの作成方法

ファイルの先頭に“[LIST]”、次の行からカンマ(,)区切りでキーワードを記述
します。
--------------------
[LIST]
受け取り,受取り
置き換え,置換
--------------------
末尾のマクロを実行して、メニューから「リストに連番を振る」を選択します。
--------------------
[LIST]
1=受け取り,受取り
2=置き換え,置換
--------------------
上のように、1から始まる連番が付けばOK。

●注意

これもINIファイル形式を採用しているので、先の注意事項と同じです。
キーワードによっては、望まない結果になる場合もあります。
    キーワード  :置換,置き換え
    結果        :置換え ⇒ 置き換ええ

●以下マクロ


menu "校正", "リストに連番を振る";
#r = result;
if( #r == 0 ) endmacro;
else if( #r == 1 ) goto Proof;

disabledraw;
#n = 1;
movetolineno 1, 2;
while( code != eof )
{
    insert str(#n) + "=";
    if( lineno == linecount2 ) break;
    #n = #n + 1;
    movetolineno 1, lineno + 1;
}
enabledraw;
endmacro;

Proof:
$INI = macrodir + "\\replaceListJa.txt";
$delimit = ","; // キーワードの区切り

if( existfile($INI) == false ) endmacro;

disabledraw;
#i = 1;
$s = getinistr($INI, "LIST", str(#i));
while( $s != "" )
{
    call Split $s, $delimit;
    replaceallfast $fWord, $rWord;
    #i = #i + 1;
    $s = getinistr($INI, "LIST", str(#i));
}
enabledraw;
message "完了";
endmacro;

ERR:
message "キーワード区切りを解釈できない!\n" + $$1;
endmacro;
return;

Split:
    ##s = strstr($$1, $$2);
    ##l = strlen($$1);
    if( ##s <= 0 || ##s == ##l - 1 ) call ERR $$1;
    $fWord = leftstr($$1, ##s);
    $rWord = rightstr($$1, ##l - ##s - strlen($$2));
return;

[ ]
RE:05186 リストからの語の置換(検索)No.05191
ならい さん 06/07/10 10:57
 
白雲斎さん、こんにちは。
和文の置換マクロを作って頂きありがとうございました。
お礼が遅くなり申し訳ありません。

>校正支援ソフトの「Just Right!」などの導入を検討してみてはいか
>がですか。
はい。汎用のソフトはいろいろ機能があって便利な面もあると
思いますが、秀丸で原文と訳文を並べて翻訳作業をしながら、
原文中の指定訳語を確認したり訳語を統一したりするためには、
やはり秀丸のマクロが便利なのです。
実は他にも用語リストを元に行いたい処理がいくつかあって、
用語リストをマクロで使う方法を理解したかったのですが、
どうも予想以上に難しそうで、今の私の力ではちょっと手に
おえない感じです^^;)。
あらためて事実を認識しました^^;)。
でも、やはり翻訳の効率と品質を高めるためにはマクロをもう少し
使いこなせるようになった方がよさそうなので、これを機に少しずつ
勉強していきたいと思います。

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

[ ]