Acme-Lou
view release on metacpan or search on metacpan
lib/Acme/Lou.pm view on Meta::CPAN
package Acme::Lou;
use 5.010001;
use strict;
use warnings;
use utf8;
our $VERSION = '0.04';
use Exporter 'import';
use Encode;
use File::ShareDir qw/dist_file/;
use Text::Mecabist;
our @EXPORT_OK = qw/lou/;
sub lou {
my $text = shift || "";
return Acme::Lou->new->translate($text);
}
sub new {
my $class = shift;
my $self = bless {
mecab_option => {
userdic => dist_file('Acme-Lou', Text::Mecabist->encoding->name .'.dic'),
},
lou_rate => 100,
@_,
}, $class;
}
sub translate {
my ($self, $text, $opt) = @_;
my $rate = $opt->{lou_rate} // $self->{lou_rate};
my $parser = Text::Mecabist->new($self->{mecab_option});
return $parser->parse($text, sub {
my $node = shift;
return if not $node->readable;
my $word = $node->extra1 or return; # ã«ã¼åèª found
my $okuri = $node->extra2 // "";
return if int(rand 100) > $rate;
if ($node->prev and
$node->prev->is('æ¥é è©') and
$node->prev->lemma =~ /^[ãã御]$/) {
$node->prev->skip(1);
}
if ($node->is('形容è©') and
$node->is('åºæ¬å½¢') and
$node->next and $node->next->pos =~ /å©è©|è¨å·/) {
$okuri = "";
}
$node->text($word . $okuri);
})->stringify();
}
1;
__END__
=encoding utf-8
=head1 NAME
Acme::Lou - Let's together with Lou Ohshiba
=head1 SYNOPSIS
use utf8;
use Acme::Lou qw/lou/;
print lou("人çã«ã¯ã大åãªä¸ã¤ã®è¢ãããã¾ãã");
# => ã©ã¤ãã«ã¯ãã¤ã³ãã¼ã¿ã³ããªä¸ã¤ã®ããã°ãããã¾ãã
=head1 DESCRIPTION
Translate Japanese text into Lou Ohshiba (Japanese comedian) style.
( run in 2.315 seconds using v1.01-cache-2.11-cpan-d7f47b0818f )