« 大雪で高山線止まり新幹線も止まる | メイン | はてなブックマークのコメント欄のようなものをParseするモジュール »

Text::TagsでTagging

CPANでTagging関連のモジュールを探すと

あたりが見つかると思う。どれも基本は半角スペースで区切られたfolksonomy文字列をパースするモジュールです。Text::Folksonomiesはシンプルすぎて足りない部分があったりします。Data::Taxonomy::Tagsは「:」コロンで区切ってのカテゴリー付けなど、複雑なタグをパースできます。

Text::Tagsはシンプルでいい感じです。
基本的な使い方は

my @tags = Text::Tags::Parser->new->parse_tags(q{ foo  bar  "baz bap" jenny's   'beep beep' });

なんだけど、日本語はそのままではうまく通りません。utf8フラグが立っている事が必要です。
textのエンコードがUTF8前提だけど

my $text = qq/日本語 かぜぶろ blog perl/;
my @tags;
utf8::decode($text) unless utf8::is_utf8($text);#必要なら
foreach my $tag (Text::Tags::Parser->new->parse_tags($text)){
    utf8::encode($tag) if utf8::is_utf8($tag);#必要なら
    push(@tags.$tag);
}

とするとうまくTagに分解できます。ちなみにparse_tags時にダブっているTagを自動で取り除いてくれます。

日本語のことを考えるのであれば、Tagの区切り文字としては半角スペースだけではなく全角スペースも必要じゃないかと思ったりもする。