Perl で日本語テキストを字種分割
2008-02-06-2
[Programming]
Perl で日本語テキストを簡単に字種かたまりに分割できないかな、
と思い、perlunicode を読みながらサンプルプログラムを書いてみました。
対象テキストは UTF-8。
chunker.pl :
実行例:
とりあえず意図通りに動いています。
追記080207: id:dayflower さんに添削して頂きました。感謝!
http://d.hatena.ne.jp/dayflower/20080207/1202354159
正規表現にマッチしないトークンが取りこぼされていたので
このようにすると良いようです。なるほどー。
さらに補足で、Unocode文字の属性についての丁寧な解説まで!
これは非常にためになります。
不完全なコードながらも恥ずかしげもなくブログ記事を公開してみた
かいがありました。ありがとうございました。
参考資料:
- perlunicode (Document)
-- コマンドラインで「perldoc perlunicode」を実行すると読める。
-- またはウェブから
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlunicode.html
と思い、perlunicode を読みながらサンプルプログラムを書いてみました。
対象テキストは UTF-8。
chunker.pl :
#!/usr/bin/perl use strict; use warnings; use Encode; use utf8; use open ':utf8'; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; while (<>) { chomp; my @cs = m/(\p{M}+|\p{N}+|\p{P}|\p{S}+|\p{Z}+|\p{C}+ |\p{Latin}+ |\p{Han}+ |\p{Hiragana}[\p{Hiragana}ー]* |\p{Katakana}[\p{Katakana}ー]* )/gx; print join(",", @cs), "\n"; }
実行例:
% cat a.txt ルーラでう、う9 10AB.DE「"GH'」★で漢字をカ・ナ食ったー!?MJD39?。 % chunker.pl a.txt ルーラ,でう,、,う,9, ,10,AB,.,DE,「,",GH,',」,★,で,漢字,を,カ,・,\ ナ,食,ったー,!,?,MJD,39,?,。
とりあえず意図通りに動いています。
追記080207: id:dayflower さんに添削して頂きました。感謝!
http://d.hatena.ne.jp/dayflower/20080207/1202354159
正規表現にマッチしないトークンが取りこぼされていたので
このようにすると良いようです。なるほどー。
(正規表現の最後に最後に「|.」を足すだけでも良いかもしれませんね。)my @cs = grep { $_ ne q{} } split m/(正規表現)/xmso, $line;
さらに補足で、Unocode文字の属性についての丁寧な解説まで!
これは非常にためになります。
不完全なコードながらも恥ずかしげもなくブログ記事を公開してみた
かいがありました。ありがとうございました。
参考資料:
- perlunicode (Document)
-- コマンドラインで「perldoc perlunicode」を実行すると読める。
-- またはウェブから
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlunicode.html
この記事に言及しているこのブログ内の記事