Subject: 言語情報処理入門:日本語テキストの処理
Date: 2009年7月7日 14:49:21:JST

[一部改変]

時々,dicom2 で日本語のテキストを grep で検索しようとしたが,
うまくいかないのは何故か,と聞いてくる学生がいます。話を聞いてみると,
どうも,次の2つのことが大きな原因のようです。

 ・文字コードに関する知識がない。

 ・EmEditor などのテキストエディタで使用した正規表現が,
  そのまま grep コマンドでも使えると思っている。

処理結果が明らかにおかしければ,うまく処理されていないと考え,教員に
質問したりするでしょうが,なまじ,部分的にうまくいっているように
見える結果が出力されてしまうと,おかしな処理をしていることに
気付かない危険性があります。

UNIX 上で日本語を扱う場合,プログラムのバージョンによる違い,
ロケールの問題などもあり,言語情報処理入門の範囲を超えてしまうため,
授業の内容は今のままでいいと思いますが,UNIX 上で日本語テキストを
処理するには,言語情報処理入門で学んだことだけでは不十分であること,
ツールによって使える正規表現が異なることは,ちゃんと伝えておいた方が
いいのではないでしょうか。

--
名古屋大学大学院国際開発研究科
国際コミュニケーション専攻
大名 力 (Tsutomu OHNA)

--------------------------------------------------------------------------------
補足 (2011/05/02)
プログラム正規表現の種類処理単位内部文字コード
サクラエディタPCRE文字単位Shift JIS (JIS 0201 + JIS 0208)
EmEditorPCRE文字単位Unicode
GNU grepBRE
ERE (-E)
PCRE (-P) (Ver. 2.5以降)
バイト単位 (ロケールに依存?)
文字単位 (ロケールに依存?)?? (ロケールに依存?)
PerlPCREバイト単位 (デフォルト)
文字単位Unicode (UTF-8)
BRE基本正規表現 (basic regular expression)
ERE拡張正規表現 (extended regular expression)
PCREPerl互換正規表現 (Perl-compatible regular expression)
(厳密に言うと,Perlの正規表現と,サクラエディタの正規表現は,PCRE とは別のもの)