The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
=encoding UTF-8

=head1 名前

Lingua::JA::Moji - 総合日本文字変換「文字ュール」

=head1 概要

日本の文字の総合変換

    use Lingua::JA::Moji qw/kana2romaji romaji2kana/;
    use utf8;
    my $romaji = kana2romaji ('あいうえお');
    # $romaji is now 'aiueo'.
    my $kana = romaji2kana ($romaji);
    # $kana is now 'アイウエオ'.

=head1 説明

本モジュールはあらゆる日本の文字変換を目的とします。

全てのfunctionはユニコードを前提とします。全ての入出力はutf-8でやる。





=head1 ローマ字変換

かな ⇄ ローマ字





=head2 kana2romaji 

仮名をローマ字に.

    use Lingua::JA::Moji 'kana2romaji';

    $romaji = kana2romaji ("うれしいこども");
    # $romaji = 'uresîkodomo'



仮名をローマ字に変換。

オプションは関数の2番目の引数でハシュリファレンスとして入ります。

    use utf8;
    $romaji = kana2romaji ("しんぶん", {style => "hepburn"});
    # $romaji = "shimbun"

可能なオプションは

=over

=item style

ローマ字の種類。

=over

=item undef

ディフォルトは日本式(「つづり」が「tuduri」, 「少女」が「syôzyo」)。

=item passport

パスポート式(「伊藤」が「itoh」)

=item kunrei

訓令式(少学校4年で習うローマ字法)

=item hepburn

ヘボン式(「つづり」が「tsuzuri」, 「少女」が「shōjo」)。
これを選べば、下記のuse_mが真になり、ve_typeがmacronになります。

=item common

「ジェット」が「jetto」になります。「ウェ」が「we」になります。

=back

=item use_m

真なら「しんぶん」が「shimbun」
偽なら「ぐんま」が「gunma」

=item ve_type

長い母音はどの様に表現する。

=over

=item undef

曲折アクセント(ô)を使う。

=item macron

マクロン(ō)を使う。

=item passport

「アー」、「イー」、「ウー」、「エー」が「a」, 「i」, 「u」, 「e」になり、「オー」が「oh」になる。

=item none

「アー」、「イー」、「ウー」、「エー」ガ「a」, 「i」, 「u」, 「e」, 「o」になる。

=item wapuro

「アー」、「イー」、「ウー」、「エー」ガ「a-」, 「i-」, 「u-」, 「e-」,
「o-」になる。「おう」が「ou」など、仮名の長音を仮名で代表するよう、ロー
マ字入力のようなことです。

=back

=item wapuro

ワープロローマ字。長音符を使わない。「少女」が「shoujo」など。

=item wo

     kana2romaji ("ちりぬるを", { wo => 1 });

"wo"が真なら、「を」が"wo"になります。そうでもない場合は"o"になります。

=back







=head2 romaji2kana 

ローマ字を仮名に.

    use Lingua::JA::Moji 'romaji2kana';

    $kana = romaji2kana ('yamaguti');
    # $kana = 'ヤマグチ'



ローマ字をカタカナに変換する。ローマ字はできるだけ幅広く受け入れる。
ローマ字をひらがなに変換したいときはL</romaji2hiragana>をお使いください。

ローマ字変換のオプションは関数の2番目の引数でハシュリファレンスとして入る。

     $kana = romaji2kana ($romaji, {wapuro => 1});

長音「ou」を「オー」ではなく、「オウ」にしたいときはwapuroを真にする C<< wapuro => 1 >>。

     $kana = romaji2kana ($romaji, {ime => 1});

C<< ime => 1 >>オプションでIMEのような変換ができます。たとえば、"gumma"が「グッマ」、"onnna"が「オンナ」となります。パスポートローマ字 ("Ohshimizu") は無効となります。







=head2 romaji2hiragana 

ローマ字をひらがなに.

    use Lingua::JA::Moji 'romaji2hiragana';

    $hiragana = romaji2hiragana ('babubo');
    # $hiragana = 'ばぶぼ'



ローマ字をひらがなに変関する。オプションはL</romaji2kana>と同じ。wapuroオプション
もオンにしたら、「ou」が「おー」ではなく、「おう」になる。







=head2 romaji_styles 



    use Lingua::JA::Moji 'romaji_styles';

    my @styles = romaji_styles ();
    # Returns a true value
    romaji_styles ("hepburn");
    # Returns the undefined value
    romaji_styles ("frogs");



引数があれば、その引数をローマ字方法として認めるなら真、認めないなら偽。

引数がなければ、すべてのローマ字方法をハシュリファレンスの列として戻す。







=head2 is_voiced 



    use Lingua::JA::Moji 'is_voiced';

    if (is_voiced ('が')) {
         print "が is voiced.\n";
    }



仮名かローマ字は濁音(゛)、半濁音(゜)がついていれば、真、ついていなければ偽(undef)。







=head2 is_romaji 



    use Lingua::JA::Moji 'is_romaji';

    # The following line returns "undef"
    is_romaji ("abcdefg");
    # The following line returns a defined value
    is_romaji ('loyehye');
    # The following line returns a defined value
    is_romaji ("atarimae");



アルファベットの列はローマ字に見えるなら真、見えないなら偽。







=head2 is_romaji_strict 



    use Lingua::JA::Moji 'is_romaji_strict';

    # The following line returns "undef"
    is_romaji_strict ("abcdefg");
    # The following line returns "undef"
    is_romaji_strict ('loyehye');
    # The following line returns a defined value
    is_romaji_strict ("atarimae");



アルファベットの列はローマ字に見えるなら真、見えないなら偽。L</is_romaji>より厳しく、コンピューター入力に見えるかどうかではなく、本当に「日本語」かどうか確認する。







=head2 normalize_romaji 



    use Lingua::JA::Moji 'normalize_romaji';

    $normalized = normalize_romaji ('tsumuji');



C<normalize_romaji>はかなやローマ字で書いた言葉を比べるため、かなやローマ字の言葉を決まったローマ字の書き方になおします。この「決まった」ローマ字は本モジュール限定のもので、あくまでも違ったかなや違ったローマ字法で書いた言葉を比べるためだけのものに過ぎませんので、正式なローマ字法と間違わないように。









=head1 仮名

仮名を仮名に変換すること。





=head2 hira2kata 

ひらがなをカタカナに.

    use Lingua::JA::Moji 'hira2kata';

    $katakana = hira2kata ('ひらがな');
    # $katakana = 'ヒラガナ'



平仮名をかたかなに変換します。長音符は変わりません。(「オー」は「おう」になりません。)







=head2 kata2hira 

カタカナをひらがなに.

    use Lingua::JA::Moji 'kata2hira';

    $hiragana = kata2hira ('カキクケコ');
    # $hiragana = 'かきくけこ'



かたかなを平仮名に変換します。長音符は変換しません。







=head2 kana2katakana 

仮名をカタカナに.

    use Lingua::JA::Moji 'kana2katakana';

    



全角かたかな、ひらがな、半角かたかな、丸かたかななどあらゆる「仮名」を全角かたかなに変換する。







=head2 kana_to_large 



    use Lingua::JA::Moji 'kana_to_large';

    $large = kana_to_large ('ぁあぃい');
    # $large = 'ああいい'



「ぁ」など小さい仮名を「あ」に変換する。







=head2 nigori_first 



    use Lingua::JA::Moji 'nigori_first';

    my @list = (qw/カン スウ ハツ オオ/);
    nigori_first (\@list);
    # Now @list = (qw/カン スウ ハツ オオ ガン ズウ バツ パツ/);



一番最初のかなに濁点又は半濁点をつける.







=head2 InHankakuKatakana 



    use Lingua::JA::Moji 'InHankakuKatakana';

    use utf8;
    if ('ア' =~ /\p{InHankakuKatakana}/) {
        print "ア is half-width katakana\n";
    }



C<InHankakuKatakana>は正規表現に使う半角カタカナにマッチする。







=head2 kana2hw 

仮名を半角カタカナに.

    use Lingua::JA::Moji 'kana2hw';

    $half_width = kana2hw ('あいウカキぎょう。');
    # $half_width = 'アイウカキギョウ。'



あらゆる仮名文字を半角カタカナに変換する。かたかなのみを変換する場合はL</katakana2hw>を使ってください。







=head2 hw2katakana 

半角カタカナをカタカナに.

    use Lingua::JA::Moji 'hw2katakana';

    $full_width = hw2katakana ('アイウカキギョウ。');
    # $full_width = 'アイウカキギョウ。'



半角カタカナを全角カタカナに変換する。







=head2 katakana2hw 

カタカナを半角カタカナに.

    use Lingua::JA::Moji 'katakana2hw';

    $hw = katakana2hw ("あいうえおアイウエオ");
    # $hw = 'あいうえおアイウエオ'



全角かたかなを半角かたかなに変換し、ひらがなをそのままにする。L</kana2hw>も参照。







=head2 is_kana 



    use Lingua::JA::Moji 'is_kana';

    



入力が仮名のみの場合、真、入力が仮名なでない文字を含む場合、偽(undef)。







=head2 is_hiragana 



    use Lingua::JA::Moji 'is_hiragana';

    



入力が平仮名のみの場合、真、入力が平仮名なでない文字を含む場合、偽(undef)。「ー」があれば偽になる。







=head2 kana_order 



    use Lingua::JA::Moji 'kana_order';

    $kana_order = kana_order ();



仮名の(適当な)順番を返す。







=head2 katakana2syllable 



    use Lingua::JA::Moji 'katakana2syllable';

    $syllables = katakana2syllable ('ソーシャルブックマークサービス');



カタカナをシラブルにわける。たとえば、「ソーシャル」
は'ソ', 'ー', 'シ', 'ャ', 'ル'という意味のない文字ではなく、日本語の
「原子」の'ソー', 'シャ', 'ル'になる。







=head2 InKana 



    use Lingua::JA::Moji 'InKana';

    $is_kana = ('あいうえお' =~ /^\p{InKana}+$/);
    # $is_kana = '1'



正規表現に使うカタカナとひらがなにマッチする。

詳しくいうと以下の正規表現

    qr/\p{Katakana}|\p{InKatakana}|\p{InHiragana}|ー|゙|゚>/

と殆どおなじ効果ですが、C<\p{Katakana}>がマッチする未使用のコードポイントはマッチしません。「・」もマッチしません。







=head2 square2katakana 



    use Lingua::JA::Moji 'square2katakana';

    $kata = square2katakana ('㌆');
    # $kata = 'ウォン'



「㌆」を「ウォン」にするなど。







=head2 katakana2square 



    use Lingua::JA::Moji 'katakana2square';

    $sq = katakana2square ('アイウエオウォン');
    # $sq = 'アイウエオ㌆'



可能なかぎり、「ウォン」を「㌆」にするなど。









=head1 全角英数字

全角英数字の変換・認識。





=head2 InWideAscii 



    use Lingua::JA::Moji 'InWideAscii';

    use utf8;
    if ('A' =~ /\p{InWideAscii}/) {
        print "A is wide ascii\n";
    }



正規表現に使う全角英数字にマッチする。







=head2 wide2ascii 

全角英数字を半角英数字に.

    use Lingua::JA::Moji 'wide2ascii';

    $ascii = wide2ascii ('abCE019');
    # $ascii = 'abCE019'



全角英数字を半角英数字(ASCII)に変換する。







=head2 ascii2wide 

半角英数字を全角英数字に.

    use Lingua::JA::Moji 'ascii2wide';

    $wide = ascii2wide ('abCE019');
    # $wide = 'abCE019'



半角英数字(ASCII)を全角英数字に変換する。









=head1 その他の文字





=head2 kana2morse 

仮名を和文モールス符号に.

    use Lingua::JA::Moji 'kana2morse';

    $morse = kana2morse ('しょっちゅう');
    # $morse = '--.-. -- .--. ..-. -..-- ..-'



かなをモースコードに変換する。日本語のモースコードは「っ」など小さいかなを表現できないので、仮名をモースコードにして、モースコードからまた仮名にする場合は「しょっちゅう」が「シヨツチユウ」になる。







=head2 morse2kana 

和文モールス符号を仮名に.

    use Lingua::JA::Moji 'morse2kana';

    $kana = morse2kana ('--.-. -- .--. ..-. -..-- ..-');
    # $kana = 'シヨツチユウ'



モースコードをかなに変換する。モースコードは分かち書きが必要だ。




=head3 欠点

テストが不十分。





=head2 kana2braille 

仮名を点字に.

    use Lingua::JA::Moji 'kana2braille';

    



仮名を点字に変換する。




=head3 欠点

きちんとしたテストがない。日本語を点字に変換することはわたちがきが必要だがこの関数はそれをしないので、不十分な変換機能だ。





=head2 braille2kana 

点字を仮名に.

    use Lingua::JA::Moji 'braille2kana';

    



点字をカタカナに変換。







=head2 kana2circled 

仮名を丸付けカタカナに.

    use Lingua::JA::Moji 'kana2circled';

    $circled = kana2circled ('あいうえお');
    # $circled = '㋐㋑㋒㋓㋔'



仮名を丸付けかたかなに変換する。丸付け「ン」がないので、ンはそのままとなる。
丸付け片假名はユニコード32D0〜32FEにある。







=head2 circled2kana 

丸付けカタカナを仮名に.

    use Lingua::JA::Moji 'circled2kana';

    $kana = circled2kana ('㋐㋑㋒㋓㋔');
    # $kana = 'アイウエオ'



丸がついているかたかなを全角かたかなに変換する。









=head1 漢字





=head2 new2old_kanji 

親字体を旧字体に.

    use Lingua::JA::Moji 'new2old_kanji';

    $old = new2old_kanji ('三国 連太郎');
    # $old = '三國 連太郎'



親字体を旧字体に変換する




=head3 欠点

新旧字体の情報は適当なものだ。「弁」は旧字体が三つなので、変換不可能。





=head2 old2new_kanji 

旧字体を親字体に.

    use Lingua::JA::Moji 'old2new_kanji';

    $new = old2new_kanji ('櫻井');
    # $new = '桜井'



旧字体を親字体に変換する







=head2 circled2kanji 



    use Lingua::JA::Moji 'circled2kanji';

    $kanji = circled2kanji ('㊯');
    # $kanji = '協'



丸付け漢字を普通の漢字に変換する。







=head2 kanji2circled 



    use Lingua::JA::Moji 'kanji2circled';

    $kanji = kanji2circled ('協嬉');
    # $kanji = '㊯嬉'



漢字を丸付け漢字に変換する。







=head2 bracketed2kanji 



    use Lingua::JA::Moji 'bracketed2kanji';

    $kanji = bracketed2kanji ('㈱');
    # $kanji = '株'



括弧漢字を普通の漢字に変換する。







=head2 kanji2bracketed 



    use Lingua::JA::Moji 'kanji2bracketed';

    $kanji = kanji2bracketed ('株');
    # $kanji = '㈱'



普通の漢字を括弧漢字をに変換する。









=head1 日本語のキリル文字表記

実験的に仮名とキリル文字の変換をする。キリル文字に詳しい方の確認がない。





=head2 kana2cyrillic 

仮名をキリル文字に.

    use Lingua::JA::Moji 'kana2cyrillic';

    $cyril = kana2cyrillic ('シンブン');
    # $cyril = 'симбун'







=head2 cyrillic2katakana 

キリル文字をカタカナに.

    use Lingua::JA::Moji 'cyrillic2katakana';

    $kana = cyrillic2katakana ('симбун');
    # $kana = 'シンブン'









=head1 ハングル





=head2 kana2hangul 



    use Lingua::JA::Moji 'kana2hangul';

    $hangul = kana2hangul ('すごわざ');
    # $hangul = '스고와자'




=head3 欠点

=over

=item 「ん」を変換しない

=item 確認がない

=back

L<http://kajiritate-no-hangul.com/kana.html>を使ってみましたがただしいかどうか証明がありません。




=head1 参考資料

CPANの本モジュール意外のものは次にあります

=head2 ローマ字かな変換

=over

=item L<Data::Validate::Japanese>

This contains four validators for kanji and kana, C<is_hiragana>,
corresponding to L</is_hiragana> in this module, and three more,
C<is_kanji>, C<is_katakana>, and C<is_h_katakana>, for half-width
katakana.

=item L<Lingua::JA::Kana>

This contains convertors for hiragana, half width and full width
katakana, and romaji. As of version 0.07 [Aug 06, 2012], the romaji
conversion is less complete than this module.

=item L<Lingua::JA::Romanize::Japanese>

Romanization of Japanese. The module also includes romanization of
kanji via the kakasi kanji to romaji convertor, and other functions.

=item L<Lingua::JA::Romaji::Valid>

Validate romanized Japanese. This module does the same thing as
L</is_romaji> in Lingua::JA::Moji.

=item L<Lingua::JA::Hepburn::Passport>

Passport romanization, which means converting long vowels into
"OH". This corresponds to L</kana2romaji> in the current module using
the C<< passport => 1 >> option, for example

    $romaji = kana2romaji ("かとう", {style => 'hepburn', passport => 1});

=item L<Lingua::JA::Fold>

Full/half width conversion, collation of Japanese text.

=item L<Lingua::JA::Romaji>

Romaji to kana/kana to romaji conversion.

=item L<Lingua::JA::Regular::Unicode>

This includes hiragana to katakana, full width / half width, and wide
ascii conversion. The strange name is due to its being an extension of
L<Lingua::JA::Regular> using Unicode-encoded strings.

=item L<Lingua::JA::NormalizeText>

A huge collection of normalization functions for Japanese text. If
Lingua::JA::Moji does not have it, Lingua::JA::NormalizeText may do.

=item L<Lingua::KO::Munja>

This is similar to the present module for Korean.

=back

=head2 漢字かな変換

=over

=item L<Lingua::JA::Romanize::MeCab>

Romanization of Japanese language with MeCab

=item L<Text::MeCab>

=item L<Lingua::JA::Romanize::Japanese>

Romanization of Japanese language via kakasi.

=back

=head2 本

幣モジュールは冨田尚樹氏の「Perl CPANモジュールガイド」に説明しています。
(ISBN 978-4862671080 WEB+DB PRESS plus, 2011年4月出版)



=head1 EXPORT

This module exports its functions only on request. To export all the
functions in the module,

    use Lingua::JA::Moji ':all';

=head1 著者

Ben Bullock, C<< <bkb@cpan.org> >>

=head1 COPYRIGHT & LICENSE

Copyright 2008-2014 Ben Bullock, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut

=head1 ACKNOWLEDGEMENTS

Thanks to Naoki Tomita, David Steinbrunner, and Neil Bowers for fixes.