2010年9月23日木曜日

翻訳者と校正者のための正規表現 (6) - 文字種の検出

さて、ここいらで実使用に耐えうる正規表現をひとつぐらい提示してみましょう。で、今日のメインは漢字の検出、半角カタカナの検出、全角英数の検出、およびそれらとスペースとの関係です! 日本語の構造エラーを見つけ出す表現もいくつかありますが、それはもう少し後にします。


この業界で長く働かれている方は、翻訳仕様書で次のような表現をよく目にするはずです。

「英数字、記号、および括弧は半角。漢字ひらがなカタカナは全角。全角と英数字半角の間は 1 スペース。ただし括弧類の内側は常にスペースなし。括弧類の外側は句読点でないかぎり 1 スペース。句読点の両側にはスペースが存在してはいけない」

これは、次のように 3 つに分けて考えます。


  1. 全角の英数字および半角カタカナを正規表現で検出
  2. 半角英数字と全角漢字ひらがなカタカナの間にスペースがないパターンを検出
  3. 括弧と句読点はそれぞれのパターンを考えて、パイプでつなげる


1 の解決:

[a-zA-Z0-9ヲ-゚]

上記は、全角アルファベットの小文字と大文字、全角数字、および半角カタカナ (ヨーグトなど) を検出しますw。特殊な表現で短縮していないのはわかりやすくするためです。


2 の解決:

[a-zA-Z0-9][ァ-ヶぁ-ん一-龠]|[ァ-ヶぁ-ん一-龠][a-zA-Z0-9]

なげーよw。「一-龠」は漢字の範囲を示しています。JISコードの場合は別の表現もあります。これは漢字率の算出にも応用できますね。著作権フリーの Wikipedia の CAT ツールの説明文に「一-龠」を使用してみます。

[一-龠] の実行結果
はい。漢字がすべてヒットしていることがわかると思います。つまり、2 の解決策では、半角英数と全角漢字ひらがなカタカナが、スペースなしで隣接しているものが検出されます。これでいろいろ楽しめますねw。もうちょっと工夫すれば「当用漢字以外の漢字を検出」することもできます。


3 の解決策:

\s[。、]|[。、]\s|[\(\[\"\{]\s|[^\s。、][\(\[\"\{]

左から順に日本語で説明します。
「句読点の前にスペースがあるエラー」
「句読点の後にスペースがあるエラー」
「半角括弧類の内側にスペースがあるエラー」
「半角括弧類の外側が句読点またはスペース以外であるエラー」

これらは、それなりのソフトウェアを使用すれば連続して自動で検出できます。もちろん、さらに細かく詰めることもできますが、クライアントごとに変化がありすぎるので、あとはいろいろと工夫してくだ賽の河原。

あっ、コメントは誰でも投稿できるようにしました。スパムが多すぎたら考え直すかもしれません。

0 件のコメント: