CATツールで使える正規表現・第7回
この連載では、翻訳の現場で役に立つ正規表現を取り上げながら、memoQやSDL Trados StudioのようなCATツール※で利用できる正規表現について解説しています。
※ CATツールとは、翻訳支援(Computer Assisted Translation)ツールの略称で、翻訳メモリや用語集を使って翻訳業務を効率化するためのツールを指します
前回の記事では、漢字を検索する正規表現を考え、ブロック名で文字クラスを作る方法を紹介しました。今回は、文字クラスの残りの話題を片付けます。
目次[非表示]
再びひらがなとカタカナを探せ
前回述べたように、Unicodeでは、コードポイントの範囲がブロックとして定義されています。そして、memoQやTrados Studioなどの正規表現では、ブロック名で文字クラスを指定できます。
実は、ひらがなとカタカナもそれぞれブロックになっています。U+3040からU+309FまでがHiraganaブロック、U+30A0からU+30FFまでがKatakanaブロックです。それなら、\p{IsHiragana}でひらがな、\p{IsKatakana}でカタカナが検索できるでしょうか。
ひらがなについては、\p{IsHiragana}が十分実用的です。しかし、カタカナには問題があります。\p{IsKatakana}には、U+30A0の「゠」とU+30FBの「・」と、2つの記号が紛れ込んでいるのです。
文字クラスの引き算
それでも\p{IsKatakana}を使いたいという方に、朗報があります。文字クラスでは、引き算ができるのです。つまり、Katakanaブロックから「゠」と「・」を除いた文字クラスを作ることができます。
そのためには、「[文字リスト-[除外する文字リスト]]」の形を使います。カタカナの場合は、Katakanaブロックすなわち\p{IsKatakana}から、「゠」と「・」すなわち[゠・]を引けばよいので、[\p{IsKatakana}-[゠・]]となります。
もちろん、これを[\u30A0-\u30FF-[゠・]]と書くこともできますが、「゠」はU+30A0なので、はじめから範囲に含めずに[\u30A1-\u30FF-[・]]としても同じです。なお、この例のように、除外する文字が1つであっても内側の「[ ]」を省略することはできません。
用字が使えたら・・・
さて、ひらがなやカタカナを検索する正規表現として、「Is」のない\p{Hiragana}や\p{Katakana}を目にしたことがあるかもしれません。これは、ブロックではなく「用字(script)」に基づく文字クラスです。Unicodeでは、それぞれの文字にいくつかの属性が定義されており、用字はその1つです。
つまり、\p{Katakana}は、用字が「Katakana」である文字からなる文字クラスです。ブロックに基づく\p{IsKatakana}と異なり、「゠」も「・」も含みません。長音記号「ー」も含まない一方、半角カタカナや組文字(「㍉」など)を含みます。
漢字も1つの用字「Han」として定義されており、\p{Han}が漢字1文字にマッチする文字クラスになります。\p{Han}には「々」も「𠮷」(いわゆる「つちよし」)も含まれます。
用字に基づく文字クラスは、上記の例からわかるように、ブロックに基づく文字クラスよりずっと使いやすいのですが、残念ながら、memoQやTrados Studioなどでは利用できません。
カテゴリは使えるが・・・
memoQやTrados Studioなどの正規表現で利用できるUnicodeの属性には、ブロックのほかに、一般カテゴリ(general category)があります。
Unicodeの文字は、L(Letter: 字)、M(Mark: 符号)、N(Number: 数字)、P(Punctuation: 句読点)、S(Symbol: 記号)、Z(Separator: 区切り文字)、C(Other: その他)のいずれかのカテゴリに分類され、さらにそれぞれがサブカテゴリに分けられます。たとえば、大文字アルファベットはLu、10進数字はNd、開き括弧はPs、数学記号はSmといった具合です。
そして、正規表現で\p{N}と書けば数字が検索できますし、\p{Nd}と書けば10進数字が検索できます。\p{Nd}は、半角数字だけでなく、全角数字や、アラビア語で使われるインド数字、タイ語で使われるタイ数字などにもマッチします。
しかし、翻訳の現場では、あらゆる言語の数字を検索するよりも、特定の言語の数字のみを検索したり、全角数字のみを検索したりすることが多いでしょう。アプリケーションによっては、\dで[0-9]と同じく半角数字のみを検索できるのですが、memoQやTrados Studioなどでは、\dは\p{Nd}とまったく同じです。
同様に、アプリケーションによっては\w(単語構成文字)が[0-9A-Za-z_]と同じで\s(空白文字)が[\x09-\x0D\x20]と同じですが、memoQやTrados Studioなどでは、\wは[\p{L}\p{Mn}\p{Nd}\p{Pc}]と同じであり、\sは[\x09-\x0D\u0085\p{Z}]と同じです。これらのクラスも、翻訳の文脈では、役に立つ場面が限られます。
とはいえ、実際に役立つカテゴリもいくつかあります。次回の記事で、一般カテゴリに基づく文字クラスの実用例を紹介します。
大文字は否定
なお、「[ ]」に「[^ ]」という否定形があったように、「\p」などにも否定形があります。小文字を大文字に変えて、たとえば\P{IsHiragana}とするとHiraganaブロック以外の文字、\P{Nd}または\Dとすると10進数字以外の文字、\Sとすると空白文字以外の文字を検索できます。
.は改行文字を含まない任意の文字でしたが、\sに改行文字が含まれるので、[\s\S]とすると、改行文字を含め、本当に任意の文字にマッチします。
今回のまとめと次回の予告
今回は、文字クラスの減算と、一般カテゴリに基づく文字クラスを紹介しました。文字クラスと文字コードに関するマニアックな話が続いたので、次回からは、より実践的に、よくある誤記やスタイルガイド違反を正規表現で検出しましょう。
川村インターナショナルの翻訳サービス
川村インターナショナルでは、AIや機械翻訳の活用、プロセスの自動化やデジタル化による翻訳業務効率化ソリューションをご提案します。翻訳支援ツールの導入を検討している、自社の翻訳資産を活用して機械翻訳エンジンをカスタマイズしたい、など翻訳業務の効率化をご検討中の方は、ぜひお気軽にお問い合わせください。
関連記事