maaash.jp

what I create

Lingua::JA::Yomi 日本語読みモジュールをつくった

英語を手軽に日本語にしたいと思ってつくった。

今あるモジュールだと、Lingua::JA::Kanaっていうのがあってローマ字→ひらがな変換はできる。

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env perl

use strict;
use warnings;
use Lingua::JA::Kana;
use utf8;
use Encode;

my $hiragana = romaji2hiragana(‘aerosmith’);  
print ‘hiragana: ‘.Encode::encode(‘utf8′,$hiragana).”\n”;  
\# hiragana: あえろsみth  

でもローマ字にあてはまらないのは上記のように残念な感じになるので、
Lingua::JA::Yomi ってのをつくった。
http://coderepos.org/share/browser/lang/perl/Lingua-JA-Yomi/trunk

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env perl  
use strict;
use warnings;
use Test::More qw/no_plan/;
use utf8;

use Lingua::JA::Yomi;

my $converter = new Lingua::JA::Yomi;
is( $converter->convert(‘aerosmith’), ‘エアロウスミス’,'aerosmith’);

ルー語インスパイアなので辞書は
Bilingual Emacspeak Project
のを使わせていただいております。

今、あの紫の本を読んでるので、再帰処理で少しずつ変換していくとこを実装するのがたのしかったー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# pass in utf8 flagged string  
sub convert {
my ($self, $roman, $remainder) = @_;
$remainder ||= ”;  
print “[convert]roman: $roman remainder: $remainder\n” if $self->debug;

return if ! $roman;

$roman = uc $roman;

if ( $roman =~ /^([^A-Z]+)(.*)/ ) {
\# preserve symbols  
return $2 ? ( $1 . $self->convert($2) ) : $1;
}
elsif ( exists $self->dic->{$roman} ) {
print “[convert]found: $roman, “.Encode::encode(‘utf8′,$self->dic->{$roman}).”\n” if $self->debug;  
if ( ! $remainder ) {
return $self->dic->{$roman};
}
else {
return $self->dic->{$roman} . $self->convert( $remainder );
}
}
else {
my $last\_of\_roman = chop( $roman );
return $self->convert( $roman, $last\_of\_roman . ($remainder || ”) );  
}
}

perl って何回まで再帰できるんだろ

Comments