« March 2017 | Main | August 2017 »

July 2017

2017.07.12

用語集の適用除外

今は翻訳するときに、電子テキストになっている原文に用語集を適用するのが普通である。適用は手作業ではなくパソコンの中で機械的に行う。

その結果できるのが原語の中に訳語の点在する混在文であるが、それを出発点に訳文を作っていくと、原文の文章構造に影響されて自然な訳文が作れないことがある。

あるとき、混在文から原語を削除して訳語だけ残したものを原文と並べ、その訳語を核にして発想を膨らませたらどうか、その方が良い訳文が出来るのではないかと思い付いて、原文と訳文の2つの窓を横に並置する仕組みを作った。

原文の方の窓にテキストが表示されるが、訳文の窓にはそのテキスト中で用語集に含まれている用語の訳語のみが表示される。訳語は原文の対応する単語と同じ位置にくるようにしてある。

最初はワードをベースにこの仕組みを実現していたが、用語集が次第に大きくなりワードでは少し動作が重くなってきた。たまたまハードディスクの破損があり、それを機にこの仕組みのベースをワードから秀丸に移行した。秀丸は書式のないテキストだけを扱うので処理速度が速いのである。

これと同時に用語辞書を少しずつ充実させていき、今は専門的な文書であれば訳文の窓にかなりの訳語が表示され、手入力が減っている。楽になった分だけ文章の推敲に時間を割くことができるようになった。

しかしシステムというものは使い勝手をよくするために常に手を入れる必要がある。そのような手入れの一つに、原文の中にある固有名詞などをもっと円滑に訳文側の窓に取り込むという課題があった。

今の仕組みでは、残したい文字列を原文からコピーして貼り付けずとも、それを原文側の窓で指定すると訳文側にそのまま表示されるようにしているのであるが、残したい文字列が単語ではなく熟語であったり長いフレーズになると、用語集を適用したときに残したい原文の一部が置換されてしまう。この問題の解消が今回の課題である。

たとえば「The Boeing Company」という文字列を訳文の中にそのまま残したいとする。この文字列を含む原文に用語集を適用するとどうなるか。用語集には「Boeing:ボーイング」と「company:会社」が既に登録されているとする。用語集を適用すると一部置換が行われ「The ボーイング 会社」となってしまう。これは困る。

一部置換を防ぐにはどうするか。その文字列が何回も出てくるのであれば、それ全体を用語集に登録する。「The Boeing Company:The Boeing Company」として登録すれば、用語集を適用(検索置換をするということ)しても原語のまま残ることになる。

しかしAAA Environment Company、BBB Oil Service、CCC Motor Companyなどと色々な会社の名前が1回限りで登場するときに、それを毎回用語集に登録するのも面倒なこと。といってこのままにしておいては、そのままにしたい会社名が用語集に入っているenvironment:環境、service:サービス、motor:モーターなどの単語で一部置換されてしまう。どうしたらよいか。

このような一部置換を防ぐには、そこに何か印を付けておくという解法がある。ワードであれば、原文のままにしたいところをハイライトして、検索するのはそのような書式設定のない部分に限るとすればよい。

では同じことを秀丸で実現するにはどうしたら良いのか。それがここでの本題である。書式設定という手法が使えないので、別の方法を考えねばならない。

一つの方法は残したい文字列全体を墨付括弧【 】などで括るというやり方である。たとえば【The Boeing Company】のようにするのである。しかし3単語以上になると問題が生ずる。間にある単語には【 】が付いていないので用語集が適用されてしまう。

そこで発想を変えた。「地と図」という表現を使えば、図を見るのでなく地から見てみる。つまりフレーズの中にある単語に注目するのではなく、単語と単語の間にある半角空白に注目してみる。するとどうなるか。

この考えに立つと、全体を【 】で括るのではなく、その中にある空白を●で埋めるというアイディアが出てくる。それにより文字列は非常に長い1単語となって用語集では検索されずに済む。検索が終わってから長い1単語の●を半角空白に戻せば、残したい原文が出現する。

具体的には残したいものを範囲指定して(秀丸の検索の小窓を開くと、追加の条件というところに指定の範囲があるので、それを「一時的なカラーマーカーの範囲」にしておく)そこにある空白を●に置換しておく。マクロのスクリプトは次のとおり。

replaceallfast " ", "●", regular, nocasesense, nohilight, incolormarker;

これにより「The●Boeing●Company」という文字列が得られる。

そのうえで用語集を適用することになるが、用語集の各単語にも●に対処するために、検索式に前方不一致と後方不一致という条件を付けておく。すると用語集は次のような形になる。

replaceall "(?<![●a-z])Boeing(?![a-z●])", "ボーイング" , regular, nocasesense, inselect, nohilight;
replaceall "(?<![●a-z])Company(?![a-z●])", "会社" , regular, nocasesense, inselect, nohilight;



用語辞書は各行がすべてこのような形になる(ただ現在使用している辞書は、その他の役物の文字の処理や名詞の単数複数や動詞の活用なども組み込んでいるので、もう少し複雑である)。

この最初の行について説明すれば、前方に●や英文字がなく後方にも英文字や●がないときにのみBoeingをヒットさせ、ボーイングに置換するという意味である。こうすると文中にあるBoeingはボーイングになるが、前後に標識が付いている●Boeing●は検索されない。

そのあとで「The●Boeing●Company」の●を空白に戻すことで、「The Boeing Company」が得られる。

実際にはこの処理の前後に、他の処理との干渉を防いだり一度処理されたものを元に戻すといったマクロのスクリプトがついているが、今回はこの半角空白を埋めつぶすという発想を得たのが眼目である。

以上により、原文の窓の方で残したい原文を指定しショートカットキーを押すと、その横にある訳文の窓に用語辞書を適用した訳語と残したい原文テキストだけが、原文と同じ位置に表示されることになる。

さあ準備ができた。ここから人間がする本当の翻訳が始まる。

| | Comments (0) | TrackBack (0)

« March 2017 | Main | August 2017 »