2011年5月16日に公開された(githubではもうちょい早い)ばかりの mecab-dic-overdrive を早速インストールしたので、補足的な部分をまとめておきます。
基本的な使い方は「wikipediaのデータや顔文字辞書からmecabのユーザ辞書を作成するフレームワーク」を読んでください。
これから書くのは、インストールしたあとPerl+Text::MeCabで使うとき用の補足的な説明です。(そのへんはあまり書かれていなかったので。主に自分用)
まずは、「mecabrc」にuserdicを追記。(↓のような感じ)
userdic = /home/username/mecab-dic-overdrive/misc/dic/wikipedia.dic
userdic = /home/username/mecab-dic-overdrive/misc/dic/kaomoji.dic
複数のユーザ辞書を指定する場合はコンマで区切るらしいけど、複数行の形式でもいけたのでこうしました。
Text::MeCabを使ったコードは↓のとおり。
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use Encode qw/decode_utf8 encode_utf8/;
use feature qw/say/;
use Data::Dumper qw/Dumper/;
use Text::MeCab;
#use open OUT => qw/:utf8 :std/;
use lib qw(/home/username/mecab-dic-overdrive/lib);
use MecabTrainer::NormalizeText;
my $normalize_opts
= [qw/
decode_entities strip_single_nl wavetilde2long
fullminus2long dashes2long drawing_lines2long
unify_long_repeats nfkc lc
/];
#say Dumper $normalize_opts;
my $normalizer = MecabTrainer::NormalizeText->new($normalize_opts);
my $mecab = Text::MeCab->new;
while( chomp(my $in = <>) )
{
my $normalized_text = $normalizer->normalize( decode_utf8($in) );
$normalized_text = encode_utf8($normalized_text);
for (my $node = $mecab->parse($normalized_text); $node; $node = $node->next)
{
my $surface = $node->surface;
my $feature = $node->feature;
if ($surface) { say "${surface}\t$feature"; }
}
}
入力がUTF-8でない場合は、文字コードを変換しないと恐らく化けます。
「花咲くいろはの菜子はホビロンかわいいょ~~~」という入力を与えると↓の結果を返してくれます。
花咲くいろは 名詞,固有名詞,一般,*,*,*,花咲くいろは,Wikipedia:2244748
の 助詞,連体化,*,*,*,*,の,ノ,ノ
菜子 名詞,固有名詞,人名,名,*,*,菜子,サイコ,サイコ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
ホビロン 名詞,固有名詞,一般,*,*,*,ホビロン,Wikipedia:280328
かわいい 形容詞,自立,*,*,形容詞・イ段,基本形,かわいい,カワイイ,カワイイ
ょ 助詞,終助詞,*,*,*,*,よ,よ,よ
ー 記号,一般,*,*,*,*,─,─,─
ノーマライザに使えるのは、↓のとおり。
decode_entities strip_html strip_nl strip_single_nl
unify_whitespaces wave2tilde wavetilde2long fullminus2long
dashes2long drawing_lines2long unify_long_repeats nfkc nfkd nfc nfd lc
strip_htmlはhtmlタグを除去してくれます。
nfkc nfkd nfc nfdは「PHPにおけるUnicode文字列の正規化 」と同じ(はず)。
あとのはlivedoor Techブログに載ってるので省略。