Acme-Ikamusume

 view release on metacpan or  search on metacpan

lib/Acme/Ikamusume.pm  view on Meta::CPAN

package Acme::Ikamusume;
use 5.010001;
use strict;
use warnings;
use utf8;
our $VERSION = '0.08';

use File::ShareDir qw/dist_file/;
use Lingua::JA::Kana;

use Text::Mecabist;

sub geso {
    my $self = bless { }, shift;
    my $text = shift // "";

    my $parser = Text::Mecabist->new({
        userdic => dist_file('Acme-Ikamusume', Text::Mecabist->encoding->name .'.dic'),
    });
    
    my $doc = $parser->parse($text, sub {
        my $node = shift;
        return if not $node->readable;
        return if not $node->reading;
        $self->apply_rules($node);
    });
    
    return $doc->join('text');
}

sub godan {
    my ($verb, $from, $to) = @_;
    if (my ($kana) = $verb =~ /(\p{InHiragana})$/) {
        $kana = kana2romaji($kana);
        $kana =~ s/^sh/s/;
        $kana =~ s/^ch/t/;
        $kana =~ s/^ts/t/;
        $kana =~ s/$from$/$to/;
        $kana =~ s/^a$/wa/;
        $kana =~ s/ti/chi/;
        $kana =~ s/tu/tsu/;
        $kana = romaji2hiragana($kana);
    
        $verb =~ s/.$/$kana/;
    }
    $verb;
}

our @rules = (
    
    # userdic extra field
    sub {
        my $node = shift;
        my $word = $node->extra1 or return;
        $node->text($word);
    },

    # IKA: inflection
    sub {
        my $node = shift;
        return if not $node->extra2;
        return if not $node->extra2 =~ /inflection/;
        
        my $prev = $node->prev or return;
        
        if ($prev->is('名詞')) {
            $node->text('じゃなイカ');
        }
        elsif ($prev->is('副詞')) {
            $node->text('でゲソか');
        }
        elsif ($prev->is('助動詞') and
               $prev->surface eq 'です' and
               $prev->prev and $prev->prev->text !~ /^[いイ]{2}$/) {



( run in 1.265 second using v1.01-cache-2.11-cpan-54e63673c56 )