日本語の文字種判定、文字種変換(半角→全角、ひらがな→カタカナなど)を行います。
以下のコマンドを実行してください。
$ sudo gem install moji
Ruby 1.8: $KCODE を指定してから require "moji" してください。
Moji モジュールの関数に渡す文字列の文字コードは $KCODE と一致させてください。
Ruby 1.9: どの文字コードの文字列を渡しても大丈夫ですが、 String#encoding が正しく設定されている 必要があります。正規表現を返す関数( Moji.kata など)は Encoding.default_internal (設定されてない場合はUTF-8)用の正規表現を返します。その他のエンコーディング用の正規表現は Moji.kata(Encoding::SJIS) などで取得できます。
$KCODE= "UTF8" # Ruby 1.9では不要
require "moji"
#文字種判定。
p Moji.type("漢") # => Moji::ZEN_KANJI
p Moji.type?("A", Moji::ZEN) # => true
#文字種変換。
p Moji.zen_to_han("Ruby") # => "Ruby"
p Moji.upcase("Ruby") # => "RUBY"
p Moji.kata_to_hira("ルビー") # => "るびー"
#文字種による正規表現。
p /#{Moji.kata}+#{Moji.hira}+/ =~ "ぼくドラえもん" # => 6
p Regexp.last_match.to_s # => "ドラえもん"
以下の定数は、文字種の一番細かい分類です。
Moji.type が返すのは、以下の定数のうちの1つです。
HAN_CONTROLHAN_ASYMBOLHAN_JSYMBOLHAN_NUMBERHAN_UPPERHAN_LOWERHAN_KATAZEN_ASYMBOLZEN_JSYMBOLZEN_NUMBERZEN_UPPERZEN_LOWERZEN_HIRAZEN_KATAZEN_GREEKZEN_CYRILLICZEN_LINEZEN_KANJI以下の定数は、上の文字種の組み合わせと別名です。
HAN_SYMBOLHAN_ASYMBOL | HAN_JSYMBOLHAN_ALPHAHAN_UPPER | HAN_LOWERHAN_ALNUMHAN_ALPHA | HAN_NUMBERHANHAN_CONTROL | HAN_SYMBOL | HAN_ALNUM | HAN_KATAZEN_SYMBOLZEN_ASYMBOL | ZEN_JSYMBOLZEN_ALPHAZEN_UPPER | ZEN_LOWERZEN_ALNUMZEN_ALPHA | ZEN_NUMBERZEN_KANAZEN_KATA | ZEN_HIRAZENZEN_SYMBOL | ZEN_ALNUM | ZEN_KANA | ZEN_GREEK | ZEN_CYRILLIC | ZEN_LINE | ZEN_KANJIASYMBOLHAN_ASYMBOL | ZEN_ASYMBOLJSYMBOLASYMBOL には含まれない全角/半角記号。HAN_JSYMBOL | ZEN_JSYMBOLSYMBOLHAN_SYMBOL | ZEN_SYMBOLNUMBERHAN_NUMBER | ZEN_NUMBERUPPERHAN_UPPER | ZEN_UPPERLOWERHAN_LOWER | ZEN_LOWERALPHAHAN_ALPHA | ZEN_ALPHAALNUMHAN_ALNUM | ZEN_ALNUMHIRAZEN_HIRA の別名。KATAHAN_KATA | ZEN_KATAKANAKATA | ZEN_HIRAGREEKZEN_GREEK の別名。CYRILLICZEN_CYRILLIC の別名。LINEZEN_LINE の別名。KANJIZEN_KANJI の別名。ALLMoji.type(ch)文字 ch の文字種を返します。
「一番細かい分類」の定数のうち1つを返します。
上の分類に当てはまらない文字(Unicodeのハングルなど)に対しては nil を返します。
また、UnicodeのB面以降の文字に対しても nil を返します。
文字が割り当てられていない文字コードに対する結果は不定です( nil を返す事もあります)。
p Moji.type("漢") # => Moji::ZEN_KANJIMoji.type?(ch, type)文字 ch が文字種 type に含まれれば、 true を返します。
type には全ての定数と、それらを |
で結んだものを使えます。
p Moji.type?("A", Moji::ZEN) # => trueMoji.regexp(type[, encoding])文字種 type の1文字を表す正規表現を返します。
type には全ての定数と、それらを |
で結んだものを使えます。
Ruby 1.9では encoding に Encoding オブジェクトを渡すと、指定のエンコーディング用の 正規表現を返します。 省略すると Encoding.default_internal (指定されてない場合は Encoding::UTF_8 )とみなします。
p Moji.regexp(Moji::HIRA) # => /[ぁ-ん]/
Moji.zen_to_han(str[, type])文字列 str の全角を半角に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは ALL (全て)です。
p Moji.zen_to_han("Ruby!?") # => "Ruby!?"
p Moji.zen_to_han("Ruby!?", Moji::ALPHA) # => "Ruby!?"Moji.han_to_zen(str[, type])文字列 str の半角を全角に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは ALL (全て)です。
p Moji.han_to_zen("Ruby!?") # => "Ruby!?"
p Moji.han_to_zen("Ruby!?", Moji::SYMBOL) # => "Ruby!?"Moji.normalize_zen_han(str)文字列 str の大文字、小文字を一般的なものに統一します。
具体的には、ASCIIに含まれる記号と英数字( ALNUM|ASYMBOL
)を半角に、それ以外の記号とカタカナ( JSYMBOL|HAN_KATA )を全角に変換します。
Moji.upcase(str[, type])文字列 str の小文字を大文字に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは LOWER (全角/半角のアルファベット)です。
ギリシャ文字、キリル文字には対応していません。
p Moji.upcase("Ruby") # => "RUBY"Moji.downcase(str[, type])文字列 str の小文字を大文字に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは UPPER (全角/半角のアルファベット)です。
ギリシャ文字、キリル文字には対応していません。
p Moji.downcase("Ruby") # => "ruby"Moji.kata_to_hira(str)文字列 str の全角カタカナをひらがなに変換して返します。
半角カタカナは直接変換できません。 han_to_zen で全角にしてから変換してください。
p Moji.kata_to_hira("ルビー") # => "るびー"Moji.hira_to_kata(str)文字列 str のひらがなを全角カタカナに変換して返します。
p Moji.hira_to_kata("るびー") # => "ルビー"Moji.han_control([encoding])Moji.han_asymbol([encoding])...Moji.kana([encoding])...定数それぞれに対応するメソッドが有り、 それぞれの文字種の1文字を表す正規表現を返します。
例えば、 Moji.kana は Moji.regexp(Moji::KANA) と同じです。
Ruby 1.9では encoding に Encoding オブジェクトを渡すと、指定のエンコーディング用の 正規表現を返します。 省略すると Encoding.default_internal (指定されてない場合は Encoding::UTF_8 )とみなします。
以下の例のように、文字クラスっぽく使えます。
p /#{Moji.kata}+#{Moji.hira}+/ =~ "ぼくドラえもん" # => 6
p Regexp.last_match.to_s # => "ドラえもん"たぶんRuby 1.8以降。
Linux Ruby 1.8.7, 1.9.2にて動作確認しました。
Gimite 市川 (連絡先: <URL:http://gimite.ddo.jp/bbs/tnote.cgi> )
Public Domainです。煮るなり焼くなりご自由に。
<URL:http://github.com/gimite/moji>
2010/9/19 Ver.1.5
2008/8/30 Ver.1.4
2006/7/23 Ver.1.3
2006/10/5 Ver.1.2
ALL )に。2005/1/3 Ver.1.1
$KCODE が指定されていないとEUCUtil.typeが正常動作しない問題を修正。ASYMBOL と JSYMBOL を追加。2004/11/16 Ver.1.0