CATツールで使える正規表現・第6回
この連載では、翻訳の現場で役に立つ正規表現を取り上げながら、memoQやSDL Trados StudioのようなCATツール※で利用できる正規表現について解説しています。
※ CATツールとは、翻訳支援(Computer Assisted Translation)ツールの略称で、翻訳メモリや用語集を使って翻訳業務を効率化するためのツールを指します
前回の記事では、半角文字や全角文字を検索する正規表現を考えましたが、漢字の検索が課題として残りました。今回は、漢字を検索するために、前回までとは毛色が異なる文字クラスを紹介します。
目次[非表示]
コードポイントで文字を表す
まずは前回の復習から。
いわゆる半角文字には、半角英数字と半角カタカナがあります。半角英数字はU+0020の半角スペースからU+007Eの半角チルダまで、半角カタカナはU+FF61の半角句点からU+FF9Fの半角半濁点までです。そのため、正規表現で[ -~。-゚]と書けば、半角文字を検索できます。
また、半角英数字に対応する全角英数字は、U+3000の全角スペースと、U+FF01の全角感嘆符からU+FF5Eの全角チルダまでなので、[ !-~]で検索できます。
ところで、正規表現では、文字そのものの代わりにコードポイントで文字を指定できます。そのためには、「\u」のあとに16進数4桁のコードポイントを続けます。上記の正規表現なら、それぞれ[\u0020-\u007E\uFF61-\uFF9F]、[\u3000\uFF01-\uFF5E]となります。
なお、コードポイントでは大文字と小文字は区別されません。また、U+0000からU+007FまでのいわゆるASCII文字は、「\x」のあとに2桁のコードポイントを続けて表すこともできます。そのため、半角文字を[\x20-\x7E\uff61-\uff9f]で検索することもできます。
このようなコードポイント表記は、文字クラスでなくても使えます。\x20+は1つ以上の連続した半角スペースにマッチしますし、\u3000+は1つ以上の連続した全角スペースにマッチします。
ブロックで文字クラスを表す
さて、勘のいい方ならお気づきかもしれませんが、全角英数字の範囲と半角カタカナの範囲は、ほぼ隣接しています。実は、全角英数字と半角カタカナを含むU+FF00からU+FFEFの範囲が1つのブロックとして定義されており、Halfwidth and Fullwidth Forms(半角・全角形)という名前が付いています。
Unicodeのコードポイントの範囲はU+0000からU+10FFFFまでですが、これが2バイトずつ17の面(plane)に分けられ、さらにそれぞれの面がいくつかのブロック(block)に分けられています。
そして、memoQやTrados Studioなどでは、ブロック名を使って、ブロック内の1文字を表す文字クラスを作ることができます。たとえば半角・全角形ブロック内の1文字を表す文字クラスは\p{IsHalfwidthandFullwidthForms}となります。これは[\uFF00-\uFFEF]と同じです。
このようなブロック名による文字クラスを使って、漢字を検索することができないでしょうか。漢字がどのブロックにあるか調べてみましょう。
漢字を探せ
前回の記事で触れたJIS X 0208で定義された漢字(JIS第1・第2水準漢字)およびJIS X 0212で追加された漢字(JIS補助漢字)のすべては、U+4E00からU+9FFFのCJK Unified Ideographs(CJK統合漢字)ブロックにあります。
また、JIS X 0213で追加されたJIS第3・第4水準漢字と、各ベンダーが独自に追加した漢字(いわゆる機種依存文字)は、CJK統合漢字ブロックに加えて、U+3400からU+4DBFのCJK Unified Ideographs Extension A(CJK統合漢字拡張A)、U+F900からU+FAFFのCJK Compatibility Ideographs(CJK互換漢字)、U+20000からU+2A6DFまでのCJK Unified Ideographs Extension B(CJK統合漢字拡張B)の4つのブロックに収録されています。
このように、Unicodeには漢字のブロックがいくつもあります。さらに厄介なことには、それぞれのブロックに、中国語、日本語、韓国語などで使用される漢字が混在しています。これは、Unicodeが、世界中の文字を2バイト(0からFFFFまで)で表そうという企図で作られ、のちに10FFFFまで拡張されたからです。
当初からあった2バイトの範囲は、現在では基本多言語面(Basic Multilingual Plane)と呼ばれます。基本多言語面にある漢字のブロックは、CJK統合漢字拡張A、CJK統合漢字、CJK互換漢字の3つです。CJK統合漢字拡張Bブロックは、追加漢字面(Supplementary Ideographic Plane)に属します。
困ったことに、memoQやTrados Studioなどの正規表現は、コードポイントによる文字の指定も、ブロック名による文字クラスの指定も、基本多言語面にしか対応していません。もっとも、memoQやTrados Studio自体が、基本多言語面以外の文字の扱いに難があるので、追加漢字面にある漢字、たとえば「𠮷」(いわゆる「つちよし」)は、これらのCATツールでは使わないのが身のためです。
基本多言語面にある3つの漢字ブロックだけでも、JIS X 0213で定義された10,050文字の漢字のうち9,747文字をカバーできます。ほかのブロックにも、漢字と同じように使われる文字がいくつかありますが、産業翻訳で出くわすのは「々」くらいでしょう。したがって、memoQやTrados Studioなどで漢字を検索する正規表現は[\p{IsCJKUnifiedIdeographsExtensionA}\p{IsCJKUnifiedIdeographs}\p{IsCJKCompatibilityIdeographs}々]または[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF々]となります。
この正規表現では、日本語では使われない漢字、たとえば中国語の「东」(「東」の簡体字)も含まれてしまいますが、それを選り分けるのは、残念ながら非現実的です。
今回のまとめと次回の予告
今回は、コードポイントで文字を表すための「\u」および「\x」と、ブロック名で文字クラスを表すための「\p」を紹介し、漢字1文字を表す文字クラスを作りました。実は、「\p」を使って作成できる文字クラスは、ブロック名によるものに限りません。文字クラスの話は次回に続きます。
前回までの記事はこちら
|
川村インターナショナルの翻訳サービス
川村インターナショナルでは、AIや機械翻訳の活用、プロセスの自動化やデジタル化による翻訳業務効率化ソリューションをご提案します。翻訳支援ツールの導入を検討している、自社の翻訳資産を活用して機械翻訳エンジンをカスタマイズしたい、など翻訳業務の効率化をご検討中の方は、ぜひお気軽にお問い合わせください。
関連記事