CATツールで使える正規表現・第5回
この連載では、翻訳の現場で役に立つ正規表現を取り上げながら、memoQやSDL Trados StudioのようなCATツール※で利用できる正規表現について解説しています。※ CATツールとは、翻訳支援(Computer Assisted Translation)ツールの略称で、翻訳メモリや用語集を使って翻訳業務を効率化するためのツールを指します
前回の記事では、文字クラスを使って、ひらがな1文字やカタカナ1文字にマッチする正規表現を作りました。今回は、引き続き文字クラスを使って、いわゆる全角文字や半角文字を検索してみましょう。
目次[非表示]
- 1.そもそも全角・半角とは
- 2.半角文字を探せ
- 3.これじゃない[^ ]
- 4.全角文字を探せ
- 5.今回のまとめと次回の予告
- 6.川村インターナショナルの翻訳サービス
そもそも全角・半角とは
まず、全角文字や半角文字とは何かという話をしましょう。そのためには、日本語用文字コードの歴史を少し紐解く必要があります。
前回の記事で、コンピューターの内部では2進数が使われていると述べました。2進数の1桁を1ビット(bit)と呼び、8ビットを1バイト(byte)と呼びます。1バイトには2の8乗=256個の数があるので、1文字を1バイトで表すとすると、最大256文字に番号を振ることができます。
現在使用されている文字コードの元祖となっているASCII(American Standard Code for Information Interchange)では、1バイトの半分(7ビット)すなわち128文字分を使用して、20のスペースから7Eのチルダまで、英数字と記号を併せ95文字に番号を振っています。
なお、残りの33文字分(0から1Fおよび7F)には、表示や印刷がされない特殊な文字が割り当てられています。これらは「非表示文字(non-printing character)」または「制御文字(control character)」と呼ばれます。
日本語の1文字を1バイトで表す文字コードもいくつかありますが、その中に、1969年に制定されたJIS X 0201があります。前半128文字分はASCIIとほぼ同じであり、後半128文字分でカタカナと記号が定義されています。
JIS X 0201では漢字もひらがなも使えませんが、それらの文字に番号を振るには、1バイトでは足りません。そこで、1文字を2バイト(2の8×2乗=65,536文字分)で表すことで漢字などを定義したJIS X 0208が1978年に作成されました。
ところがJIS X 0208はASCIIと互換性がないため、JIS X 0201とJIS X 0208を組み合わせたShift JISが1982年に作られました。そして、WindowsやMacの日本語版に、Shift JISをそれぞれ独自に拡張したものが採用されました。
JIS X 0201で定義されている英数字やカタカナがJIS X 0208でも別に定義されているため、Shift JISでは英数字やカタカナが重複しています。それらを区別するため、JIS X 0201で定義された文字を、JIS X 0208で定義された文字の半分の幅で表示することがあります。そこで、前者を「半角文字」、後者を「全角文字」と呼んでいます。
半角文字を探せ
ここで前回の記事を思い出して、半角文字がJIS X 0201で定義された範囲、すなわち半角スペースから「゚」(半角半濁点)の範囲であれば、[ -゚]で半角文字が検索できると考えた方がいるかもしれません。
Shift JISならそれでよいのですが、今では、WindowsでもMacでも、Shift JISではなくUnicodeが一般的に使われています。Unicodeでは、半角英数字はASCIIと同じくU+0020の半角スペースからU+007Eの半角チルダ(~)までですが、半角カタカナはU+FF61の半角句点(。)からU+FF9Fの半角半濁点(゚)までです。
したがって、半角文字を検索しようとして[ -゚]としてしまうと、U+0020からU+FF9Fまで、およそ6万字がマッチしてしまいます。その中には、全角文字も含まれます。
半角文字を検索する正しい正規表現は[ -~。-゚]です。ただし、これを使う機会は少ないかもしれません。むしろ、[ -~]で半角英数字を検索したり、[。-゚]で半角カタカナを検索したりする場合が多いでしょう。なお、記号を含まない半角英数字は、もちろん[0-9A-Za-z]です。
これじゃない[^ ]
次に、全角文字について考えましょう。まずは単純に、半角文字でない文字が全角文字だとします。
「〜でない文字」は、正規表現では文字クラスの否定で表します。文字クラスを否定するには、文字クラスを「[」の替わりに「[^」で始めます。たとえば、[文字]は「文」または「字」にマッチしますが、[^文字]は「文」でも「字」でもない1文字にマッチします。
これを使えば、半角文字でない文字は[^ -~。-゚]で検索できます。Shift JISなら、これで全角文字が検索できます。
しかし、Unicodeではダメです。この正規表現は、確かに全角文字にもマッチしますが、英語でしばしば使われる「“」や「”」などの記号や、欧州言語などで使われるアクセント記号付きアルファベット(「ä」や「ç」など)にもマッチしてしまいます。
全角文字を探せ
では、JIS X 0208で定義された文字を表す文字クラスを作ったらどうでしょう。しかし、それも実用的ではありません。JIS X 0208で定義されていない漢字もありますし、JIS X 0208ではギリシャ文字やキリル文字の一部も定義されています。
全角文字を検索するには、まず、検索したい「全角文字」が何なのかをきっちりと定め、それに応じた正規表現を作る必要があります。
たとえば、半角英数字に対応する全角英数字を検索したいのかもしれません。これは、U+3000の全角スペースとU+FF01の全角感嘆符からU+FF5Eの全角チルダまでなので、 [ !-~]で検索できます。記号を除くなら[0-9A-Za-z]です。
あるいは、検索したい全角文字は「ひらがなとカタカナと漢字」かもしれません。ひらがなとカタカナは前回の記事で取り上げましたが、漢字を正規表現で検索するには、どうすればよいでしょう。これは次回の課題とします。
今回のまとめと次回の予告
今回は、半角文字や全角文字を検索する正規表現を考え、文字クラスの否定を表す「[^ ]」を紹介しました。次回は、今回積み残しとなった漢字を正規表現で検索します。
川村インターナショナルの翻訳サービス
川村インターナショナルでは、AIや機械翻訳の活用、プロセスの自動化やデジタル化による翻訳業務効率化ソリューションをご提案します。翻訳支援ツールの導入を検討している、自社の翻訳資産を活用して機械翻訳エンジンをカスタマイズしたい、など翻訳業務の効率化をご検討中の方は、ぜひお気軽にお問い合わせください。
関連記事