単に名詞だけを数えると、「山田太郎」を「山田」と「太郎」を別々に数えてしまう。
mecabに「山田太郎」で辞書登録すれば一語にできるがそれもめんどくさい。
そこで、「姓と名が連続して登場したらひとつの名詞とみなす」という風にしたのだが、どうもスッキリ書けず、下記のようになってしまった。
一応これで用は足せているのだが、もっと簡単にかけないかなあ・・・
foreach (@array){
for (my $n = $m->parseToNode ($_); $n ; $n = $n->{next}) {
my $surf=decode('utf8',$n->{surface});
my $feature=decode('utf8',$n->{feature});
my @features = split(/,/, $feature);
if($features[0]=~ /名詞/) {
if($features[3] eq "名"){
if($saveword){ $surf = $saveword.$surf };
&check_word_hash($surf,\%hash);
$saveword = undef;
}elsif($features[3] eq "姓") {
if($saveword){
&check_word_hash($saveword,\%hash);
}
$saveword = $surf;
}else{
&check_word_hash($surf,\%hash);
}
}elsif($saveword){
&check_word_hash($saveword,\%hash);
$saveword = undef;
}else{
if($saveword){
&check_word_hash($saveword,\%hash);
$saveword = undef;
}
}
}
}