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 2.538 seconds using v1.01-cache-2.11-cpan-d80b1682f3f )