Filter::YomiHiraGana 人生に必要な知恵はすべてPla(ry

よみがな(平仮名)を付けるFilter::YomiHiraGana。id:lestrratさんのText::MeCabを使っています。

まだ漢字を読めないお子様もこれで大丈夫。インターネットで漢字を楽しく勉強できます。幼稚園や小学校にPlaggerをぜひ導入しましょう。

人生に必要な知恵はすべて幼稚園の砂場で学んだ (河出文庫)

人生に必要な知恵はすべて幼稚園の砂場で学んだ (河出文庫)



package Plagger::Plugin::Filter::YomiHiraGana;

use strict;
use base qw( Plagger::Plugin );
use Text::MeCab;
use Unicode::Japanese;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
       $self,
       'update.entry.fixup' => \&update,
   );
}

sub update {
    my($self, $context, $args) = @_;
    my $title = $args->{entry}->title;
    my $body = $args->{entry}->body;
    $title = $self->add_hiragana($title);
    $body = $self->add_hiragana($body);
    $args->{entry}->title($title);
    $args->{entry}->body($body);
}

sub add_hiragana{
    my ($self,$string) = @_;
    my $mecab  = Text::MeCab->new();
    my $hiragana_string;
    for (my $node = $mecab->parse($string); $node; $node = $node->next) {
        my $kana = (split(',',$node->feature))[7];
        my $s = Unicode::Japanese->new();
        my $code = $s->getcode($node->surface);
        my $hiragana = $s->set($kana)->kata2hira->get;
        if($hiragana && $hiragana ne "*" &&
           $hiragana ne $node->surface &&
           $kana ne $node->surface && $code ne "ascii"){
           $hiragana_string .= $node->surface."($hiragana)";
        }elsif($code ne "unknown"){
           $hiragana_string .= $node->surface;
        }
    }
    $hiragana_string;
}

1;
__END__