Acme-Ikamusume
view release on metacpan or search on metacpan
lib/Acme/Ikamusume.pm view on Meta::CPAN
my $node = shift;
if ($node->lemma eq 'ã¾ã' and
$node->is('å©åè©') and
$node->prev && $node->prev->is('åè©')) {
if ($node->is('åºæ¬å½¢')) { # ã¾ã
$node->prev->text($node->prev->lemma);
$node->text('');
if ($node->next->pos =~ /^å©è©/) {
$node->text($node->text . 'ã§ã²ã½');
}
}
if ($node->is('é£ç¨å½¢') and # ã¾ã
$node->pos3 !~ /äºæ®µ/) { # äºæ®µ => { -i/ã£/ã/ã }
$node->text('');
}
}
},
# no honorific
sub {
my $node = shift;
if ($node->feature =~ /^åè©,æ¥å°¾,人å,/ and
$node->prev->text ne 'ã¤ã«å¨') {
$node->text('');
}
},
# IKA/GESO: replace
sub {
my $node = shift;
my $text = $node->text;
$text =~ s/ã[ãã¼]ã(.)/ã¤ã¼ã«$1/g;
$text =~ s/ãã/ã¤ã«/g;
$text =~ s/ãã/ã²ã½/g;
$node->text($text);
return if $text =~ /ã¤ã¼?ã«|ã²ã½/;
my $curr = katakana2hiragana($node->reading || "");
$node->text($curr) if $curr =~ s/ã[ãã¼]ã(.)/ã¤ã¼ã«$1/g;
$node->text($curr) if $curr =~ s/ãã/ã¤ã«/g;
$node->text($curr) if $curr =~ s/ãã/ã²ã½/g;
my $next = katakana2hiragana(($node->next and $node->next->reading) || "");
my $prev = katakana2hiragana(join "",
$node->prev && $node->prev->prev && $node->prev->prev->text,
$node->prev && $node->prev->text);
$node->text($curr) if $next =~ /^ã./ && $curr =~ s/ã[ãã¼]$/ã¤ã¼/;
$node->text($curr) if $prev =~ /ã[ãã¼]$/ && $curr =~ s/^ã(.)/ã«$1/;
$node->text($curr) if $prev =~ /[ãã¤]$/ && $curr =~ s/^ã/ã«/;
$node->text($curr) if $next =~ /^ã/ && $curr =~ s/ã$/ã¤/;
$node->text($curr) if $next =~ /^ã/ && $curr =~ s/ã$/ã²/;
$node->text($curr) if $prev =~ /ã$/ && $curr =~ s/^ã/ã½/;
},
# IKA/GESO: DA + postp
sub {
my $node = shift;
my $prev = $node->prev or return;
if ($prev->surface eq 'ã ' and
$prev->text eq 'ã§ã²ã½' and
(
$node->pos =~ /å©è©|å©åè©/ or
$node->is('æ¥å°¾')
)
) {
my $kana = kana2romaji($node->text);
if ($kana =~/^(?:ze|n[aeo]|yo|wa)/) {
$node->text('');
$prev->text('ãããªã¤ã«');
}
if ($kana =~ /^zo/) {
$node->text('');
}
}
},
sub {
my $node = shift;
my $prev = $node->prev or return;
my $latest = join "",
$prev->prev && $prev->prev->text,
$prev && $prev->text,
$node->text;
if ($node->is('çµå©è©') and
$latest =~ /(?:ã§ã²ã½|ãããªã¤ã«)[ããªã]$/) {
$node->text('');
}
},
# IKA: IIKA
sub {
my $node = shift;
my $prev = $node->prev or return;
if ($prev->text !~ /^(?:[ãã¤]{2})$/) {
return;
}
if ($node->surface =~ /^(?:ã§ã|ã§ããã)$/ and
$node->next->surface =~ /^ã/) {
$prev->text('ãã¤');
$node->text('');
}
if ($node->surface eq 'ã§ãããã') {
$prev->text('ãã¤');
$node->text('ã«');
}
},
# GESO/IKA: eos
sub {
my $node = shift;
my $next = $node->next or return;
( run in 5.938 seconds using v1.01-cache-2.11-cpan-54e63673c56 )