日本語文章をローマ字に変換する
どんなことに使えるかは謎だけど変換する。
単語間が繋がると読みにくいので、スペースを空けることが重要。スペースを空ける方法は振り仮名に応用できて、たとえば幼稚園児でも2ちゃんねるが読めるように文章に振り仮名を振るCGI PROXYとかが簡単に作れる。
use strict; use utf8; use Encode; use MeCab; use Lingua::JA::Kana; binmode(STDOUT, ':encoding(ms932)'); # MS-CMD TEST: { print ja2romaji(<<__EOT ドウモ〜〜〜ッ!!ハジメマシテ〜〜〜ッ!!!! 私は27歳のOLしてるのぉ〜〜〜っ♪(#⌒〇⌒#)キャハ うーんとー、私メル友がすっごくすっごく欲しくってー、 探してたら(◎_◎)なんとっ! 1さんの素敵なスレッド♪を発見!!!!(^o^)//""" パチパチパチ てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘ メル友に、なってくれるよねっ。(*^-^*) え?くれないのぉ〜?(;¬_¬)そんなのいやいや〜〜、 なってくれなかったら、( `_)乂(_´ ) 勝負! ☆○(゜ο゜)o ぱ〜んち、☆(゜o(○=(゜ο゜)o バコ〜ン!! (>_<) いてっ! (☆o☆)きゃ〜〜(@_@;)やられた〜〜(o_ _)o ドテッ (+_+) 気絶中。。。 なあんて(#⌒▽⌒#)こんな私っ!σ(^_^)だけど、 お友達になってm(_ _)mくださいませませ♪('-'*)フフ __EOT ), "\n"; } sub ja2romaji { my $ja = shift; my $mecab = new MeCab::Tagger("-l1"); my $tsu = undef; my @romaji_line = (); my @romaji = (); foreach my $line (split(/[\r\n]+/, $ja)) { @romaji_line = (); for (my $n = $mecab->parseToNode($line); $n; $n = $n->{next}) { my @feature = split(',', $n->{feature}); my ($kana, $pos, $surface) = ($feature[7], $feature[0], $n->{surface}); Encode::_utf8_on($kana); Encode::_utf8_on($pos); Encode::_utf8_on($surface); if ($kana =~ /ッ$/) { # 「ッ」で切れると変換できないので次で繋げる $tsu = { kana => $kana, surface => $surface }; next; } if ($kana ne '*' && $kana ne '' && $pos ne '記号') { my $word = kana2romaji(($tsu ? $tsu->{kana}:'') . $kana); if ($word) { push(@romaji_line, $word); } } else { $surface =~ tr/。、「」/.,""/; my $word = kana2romaji(($tsu ? $tsu->{kana}:'') . $surface); if ($word) { push(@romaji_line, pop(@romaji_line) . $word); } } $tsu = undef; } push(@romaji, join(' ', @romaji_line)); } return join("\n", @romaji); }
> perl romaji.pl doumo〜〜〜ッ!!hajimemashite〜〜〜ッ!!!! watashi ha ni nana sai no ooeru shi teru noxo〜〜〜ッ♪(#⌒〇⌒#)kyaha uun toー, watashimeru tomo ga suggoku suggoku hoshikutteー, sagashi te tara(◎_◎) nantoッ! ichi san no suteki nasureddo♪ wo hakken!!!!(^o^)//""" pachi pachi pachi te na wake de, tsuitsui kai chatta noraー(o^v^o)ehehe meru tomo ni, natte kureru yoneッ.(*^-^*) e? kure nai noxo〜?(;¬_¬) sonna no iyaiya〜〜, natte kure nakattara,(`_)乂(_´) shoubu! ☆○(゜ο゜)opa〜 n chi,☆(゜o(○=(゜ο゜)obako〜 n!! (>_<) i teッ! (☆o☆) kya〜〜(@;) yara re ta〜〜(o__)odoteッ (+_+) kizetsu chuu... na an te(#⌒▽⌒#) konna watashiッ!σ(^_^) da kedo, o tomodachi ni nattem(__)m kudasai mase mase♪('-'*)fufu
このコピペを分解できるMeCabすごすぎ。
でも $pos ne '記号' は不安すぎるので、コード的なもので判定したい。定数定義すればいいけど。
あと「っ!」ってローマ字でどう書くのか知らない。