サンプル:日本語を1文字ずつ分割する
2バイトコード/3バイトコードを表現する正規表現を用いて、パタンマッチさせます。
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; #2バイトEUC_文字
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; #3バイトEUC_JP文字
上記は、文字コードの範囲をしていしています。筆者の環境では、日本語EUCコードを使った文字処理を行うので、上記の文字コード範囲による正規表現マッチを行います。古い手法であるが、jperlというツールを使用する方法もあります。
プログラム例では、test.txtでは芥川龍之介の「秋」の一説を標準出力からパイプを介して受け取り、分割処理をしてます。分割には、jsplit関数を作成して、split関数と同じような処理をしています。
プログラム例
#!/usr/bin/perl
while (<>) {
$str .= $_;
}
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; #2バイトEUC_文字
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; #3バイトEUC_JP文字
#日本語分割用サブルーチン(マッチは、2バイト、3バイト、任意の一文字、改行
sub jsplit{
$_[0] =~ m/($twoBytes|$threeBytes|.|\n)/og
}
print join(" ", jsplit($str));
実行結果
[it-engineer@home1 perl]# more test.txt
信子は女子大学にゐた時から、才媛の名声を担つてゐた。彼女が早晩作家として文壇に打つて出る
事は、殆誰も疑はなかつた。中には彼女が在学中、既に三百何枚かの自叙伝体小説を書き上げたなど
と吹聴して歩くものもあつた。が、学校を卒業して見ると、まだ女学校も出てゐない妹の照子と彼女
とを抱へて、後家を立て通して来た母の手前も、さうは我儘を云はれない、複雑な事情もないではな
かつた。そこで彼女は創作を始める前に、まづ世間の習慣通り、縁談からきめてかかるべく余儀なく
された。
[it-engineer@home1 perl]# cat test.txt | perl 20070523-2.pl
信 子 は 女 子 大 学 に ゐ た 時 か ら 、 才 媛 の 名 声 を 担 つ て ゐ た 。 彼 女 が 早 晩 作 家 と し て 文 壇 に 打 つ て 出 る 事 は 、 殆 誰 も 疑 は な か つ た 。 中 に は 彼 女 が 在 学 中 、 既 に 三 百 何 枚 か の 自 叙 伝 体 小 説 を 書 き 上 げ た な ど と 吹 聴 し て 歩 く も の も あ つ た 。 が 、 学 校 を 卒 業 し て 見 る と 、 ま だ 女 学 校 も 出 て ゐ な い 妹 の 照 子 と 彼 女 と を 抱 へ て 、 後 家 を 立 て 通 し て 来 た 母 の 手 前 も 、 さ う は 我 儘 を 云 は れ な い 、 複 雑 な 事 情 も な い で は な か つ た 。 そ こ で 彼 女 は 創 作 を 始 め る 前 に 、 ま づ 世 間 の 習 慣 通 り 、 縁 談 か ら き め て か か る べ く 余 儀 な く さ れ た 。
[it-engineer@home1 perl]#

