[mecab-users 237] Re: 分かち書きで、半角英数字部分を分かち書きしないようにしたい

Back to archive index

naoki iimura amatu****@users*****
2007年 2月 28日 (水) 01:55:51 JST


いいむらです。

On 2/27/07, Tadamasa Teranishi <yw3t-****@asahi*****> wrote:
> MeCab はそもそもタブを通しません(タブと空白を区別しない)でしたね。
> なので、区切り記号にタブを使うと前処理なしで何とかなりそうです。
>
> $ echo -e "filename.jpg 1024バイト" |
> mecab -F "%M\t" -U "%M\t" -E "\n" | perl -e 'my $text = <>;
> while($text =~ s/([\x00-\x7f])\t([\x00-\x7f])/\1\2/sg){}
> $text =~ s/\t/ /sg; print $text;'

なるほど! こんなことができるのですね。参考になります。
POPFile もタブと空白を区別していないので、この方法は使えそうです。

ただ、もともとタブで区切られた場所があった場合(例えば "abc\tdef" のような)、
区切りが消えてしまう("abcdef" になってしまう)ようです。
タブの置換処理のところを

s/([\x00-\x08\x0a-\x7f])\t([\x00-\x08\x0a-\x7f])/\1\2/sg

とすれば大丈夫ですが、これだとタブのところが空白 2 つになってしまいますね。

そこで、とりあえず、

echo -e "\tこれはfilename.jpgに含まれています。ABC\tabc\t\tdef 漢字" | mecab -F
"%M\t" -U "%M\t" -E "\n" | perl -e 'my $text=<>;
$text=~s/([\x00-\x08\x0a-\x7f])\t(?=\t*[\x00-\x08\x0a-\x7f])/\1/g;
$text=~s/\t/ /sg; print $text;'

としてみることにしました。

-- 
naoki iimura (amatubu)
 e-mail: amatu****@mac*****
 web: http://amatubu.skr.jp/
 diary: http://d.hatena.ne.jp/amatubu/
 fingerprint: 1435 5892 86B7 D465 6DBF  DFD2 71E1 1AB3 F63F DF62



mecab-users メーリングリストの案内
Back to archive index