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 )