Class: Nihonjin::Moji
- Inherits:
-
Object
- Object
- Nihonjin::Moji
- Defined in:
- lib/nihonjin/moji.rb
Constant Summary collapse
- Hiragana =
{ kya: "きゃ", kyu: "きゅ", kyo: "きょ", sha: "しゃ", shu: "しゅ", she: "しぇ", sho: "しょ", cha: "ちゃ", chu: "ちゅ", cho: "ちょ", dya: "ぢゃ", dyu: "ぢゅ", dyo: "ぢょ", nya: "にゃ", nyu: "にゅ", nyo: "にょ", hya: "ひゃ", hyu: "ひゅ", hyo: "ひょ", mya: "みゃ", myu: "みゅ", myo: "みょ", rya: "りゃ", ryu: "りゅ", ryo: "りょ", gya: "ぎゃ", gyu: "ぎゅ", gyo: "ぎょ", ja: "じゃ", ju: "じゅ", je: "じぇ", jo: "じょ", jya: "じゃ", jyu: "じゅ", jyo: "じょ", bya: "びゃ", byu: "びゅ", byo: "びょ", pya: "ぴゃ", pyu: "ピュ", pyo: "ぴょ", tsu: "つ", tu: "つ", ka: "か", ki: "き", ku: "く", ke: "け", ko: "こ", sa: "さ", shi: "し", si: "し", su: "す", se: "せ", so: "そ", ta: "た", chi: "ち", te: "て", to: "と", na: "な", ni: "に", nu: "ぬ", ne: "ね", no: "の", ha: "は", hi: "ひ", fu: "ふ", he: "へ", ho: "ほ", ma: "ま", mi: "み", mu: "む", me: "め", mo: "も", ya: "や", yu: "ゆ", yo: "よ", ra: "ら", ri: "り", ru: "る", re: "れ", ro: "ろ", wa: "わ", wi: "ゐ", we: "ゑ", wo: "を", n: "ん", n_: "ん", # 「n_」というのは、「はんい」みたいな言葉を書くためです。Issue #16を見てください va: "ゔぁ", vi: "ゔぃ", vu: "ゔ", ve: "ゔぇ", vo: "ゔぉ", ga: "が", gi: "ぎ", gu: "ぐ", ge: "げ", go: "ご", za: "ざ", ji: "じ", zu: "ず", ze: "ぜ", zo: "ぞ", da: "だ", di: "ぢ", du: "づ", de: "で", do: "ど", dzu: "づ", ba: "ば", bi: "び", bu: "ぶ", be: "べ", bo: "ぼ", pa: "ぱ", pi: "ぴ", pu: "ぷ", pe: "ぺ", po: "ぽ", fa: "ふぁ", fi: "ふぃ", fe: "ふぇ", fo: "ふぉ", di_: "でぃ", a: "あ", i: "い", u: "う", e: "え", o: "お", wu: "う" }
- Small_hiragana =
{ ya: "ゃ", yu: "ゅ", yo: "ょ", a: "ぁ", i: "ぃ", u: "ぅ", e: "ぇ", o: "ぉ", tsu: "っ" }
- Consonants =
["bb", "cc", "dd", "ff", "gg", "hh", "jj", "kk", "ll", "pp", "qq", "rr", "ss", "tt", "vv", "ww", "yy", "zz"]
- Symbols =
[[".", "。"], ["!", "!"], ["?", "?"], [",", "、"], ["~", "〜"]]
Instance Method Summary collapse
- #hankaku_katakana(str, *options) ⇒ Object
- #hankaku_katakana!(str, *options) ⇒ Object
-
#hashigiri(str) ⇒ Object
対象の文字列の端にある空白を切り落とす.
- #hashigiri!(str) ⇒ Object
-
#hiragana(str, *options) ⇒ Object
対象の文字列をnkfで、ひらがなに変換します。#nkf_passと「たのしいRuby」299ページを参照してください.
- #hiragana!(str, *options) ⇒ Object
- #kana_invert(str, *options) ⇒ Object
- #kana_invert!(str, *options) ⇒ Object
- #katakana(str, *options) ⇒ Object
- #katakana!(str, *options) ⇒ Object
-
#kiru(str) ⇒ Object
対象の文字列のすべての空白を切り落とす.
- #kiru!(str) ⇒ Object
-
#kuhaku(str, option = nil) ⇒ Object
対象の文字列の空白を半角の空白にします :zenkakuをoptionとして渡せば、すべての空白は全角の空白に変換されます.
-
#kuhaku!(str, option = nil) ⇒ Object
#kuhakuの文字列を破壊的に変換します.
-
#kuhaku_invert(str) ⇒ Object
対象の文字列の全角と半角の空白を逆にします.
-
#kuhaku_invert!(str) ⇒ Object
#kuhaku_invertの文字列を破壊的に変換します.
- #romaji(str, encoding = :utf_8) ⇒ Object
- #romaji!(str, encoding = :utf_8) ⇒ Object
Instance Method Details
#hankaku_katakana(str, *options) ⇒ Object
150 151 152 153 |
# File 'lib/nihonjin/moji.rb', line 150 def hankaku_katakana(str, *) str = katakana(str, ) str = nkf_pass(str, '-Z4', ) end |
#hankaku_katakana!(str, *options) ⇒ Object
155 156 157 |
# File 'lib/nihonjin/moji.rb', line 155 def hankaku_katakana!(str, *) str.sub!(str, (hankaku_katakana(str, ))) end |
#hashigiri(str) ⇒ Object
対象の文字列の端にある空白を切り落とす
239 240 241 242 243 244 245 246 247 |
# File 'lib/nihonjin/moji.rb', line 239 def hashigiri(str) if str.match(/^ /) str = str.sub(/^ /, " ") end if str.match(/ $/) str = str.sub(/ $/, " ") end str = str.strip end |
#hashigiri!(str) ⇒ Object
249 250 251 |
# File 'lib/nihonjin/moji.rb', line 249 def hashigiri!(str) str.sub!(str, hashigiri(str)) end |
#hiragana(str, *options) ⇒ Object
対象の文字列をnkfで、ひらがなに変換します。#nkf_passと「たのしいRuby」299ページを参照してください
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/nihonjin/moji.rb', line 66 def hiragana(str, *) need_to_change_encoding = check_encoding() = setup str_data = utf_8_pass(str) str = str_data[:string] str = str.downcase # "matte"みたいな文字列を「まって」に変換します Consonants.each do |c| if str.match(c) str = str.gsub(c, ("っ" + c[0])) end end # 対象の文字列にはローマ字がある場合ひらがなに変換します Hiragana.each do |key, value| re = Regexp.new(key.to_s) if str.match(re) str = str.gsub(re, Hiragana[key]) end end # 「x」を文字の前に入れることで、小さいひらがなを定義することができます if str =~ /x/ i = 0 str_ary = str.split("") str_ary.each do |s| if s =~ /x/ str[i + 1] = Small_hiragana[Hiragana.key(str[i + 1])] end i += 1 end str = str.gsub("x", "") end # 上記Consonants.eachのコードで重なっている文字は小さい「っ」に変換されるけど、全部は変換されません # 子音が残ってしまえば、変換されます。 if str =~ /[a-z]/ i = 0 str_ary = str.split("") str_ary.each do |s| if s =~ /っ/ str[i + 1] = "っ" if str[i + 1] =~ /[a-z]/ end i += 1 end end # びっくりマークなどの記号を日本語の文字にします Symbols.each do |symbol| str = str.gsub(symbol[0], symbol[1]) end # この時点で if /[a-z]/、エラーをthrowしてください # raise error if str =~ /[a-zA-Z]/ # これは要るかどうか工夫すること # またオプションとしては定義できるようにしたらいいかどうか工夫すること str = kuhaku(str, :zenkaku) str = NKF.nkf(('-h1 ' + ), str) str = str.encode(str_data[:encoding].name) if need_to_change_encoding str end |
#hiragana!(str, *options) ⇒ Object
133 134 135 |
# File 'lib/nihonjin/moji.rb', line 133 def hiragana!(str, *) str.sub!(str, (hiragana(str, ))) end |
#kana_invert(str, *options) ⇒ Object
161 162 163 164 |
# File 'lib/nihonjin/moji.rb', line 161 def kana_invert(str, *) = setup str = nkf_pass(str, '-h3', ) end |
#kana_invert!(str, *options) ⇒ Object
166 167 168 |
# File 'lib/nihonjin/moji.rb', line 166 def kana_invert!(str, *) str.sub!(str, (kana_invert(str, ))) end |
#katakana(str, *options) ⇒ Object
139 140 141 142 |
# File 'lib/nihonjin/moji.rb', line 139 def katakana(str, *) str = hiragana(str, ) str = nkf_pass(str, '-h2', ) end |
#katakana!(str, *options) ⇒ Object
144 145 146 |
# File 'lib/nihonjin/moji.rb', line 144 def katakana!(str, *) str.sub!(str, (katakana(str, ))) end |
#kiru(str) ⇒ Object
対象の文字列のすべての空白を切り落とす
226 227 228 229 230 231 |
# File 'lib/nihonjin/moji.rb', line 226 def kiru(str) if str.match(/ /) str = str.gsub(/ /, " ") end str.gsub(/\s/, "") end |
#kiru!(str) ⇒ Object
233 234 235 |
# File 'lib/nihonjin/moji.rb', line 233 def kiru!(str) str.sub!(str, kiru(str)) end |
#kuhaku(str, option = nil) ⇒ Object
対象の文字列の空白を半角の空白にします:zenkakuをoptionとして渡せば、すべての空白は全角の空白に変換されます
257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/nihonjin/moji.rb', line 257 def kuhaku(str, option=nil) str_data = utf_8_pass(str) str = str_data[:string] # :double というオプションを入れたい。nkfの-Z2のこと if option == :zenkaku str = str.gsub(/\s/, " ") # 全角に変える else str = str.gsub(/ /, " ") # 普通の空白に変える end str.encode(str_data[:encoding].name) end |
#kuhaku!(str, option = nil) ⇒ Object
#kuhakuの文字列を破壊的に変換します
270 271 272 |
# File 'lib/nihonjin/moji.rb', line 270 def kuhaku!(str, option=nil) str.sub!(str, kuhaku(str)) end |
#kuhaku_invert(str) ⇒ Object
対象の文字列の全角と半角の空白を逆にします
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 |
# File 'lib/nihonjin/moji.rb', line 276 def kuhaku_invert(str) str_data = utf_8_pass(str) str = str_data[:string] str = str.split("") str = str.map do |s| if s =~ /\s/ # 半角であれば s = " " # 全角に elsif s =~ / / # 全角であれば s = " " # 半角に else s end end new_str = String.new str.each do |s| new_str += s end new_str = new_str.encode(str_data[:encoding].name) end |
#kuhaku_invert!(str) ⇒ Object
#kuhaku_invertの文字列を破壊的に変換します
297 298 299 |
# File 'lib/nihonjin/moji.rb', line 297 def kuhaku_invert!(str) str.sub!(str, kuhaku_invert(str)) end |
#romaji(str, encoding = :utf_8) ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/nihonjin/moji.rb', line 172 def romaji(str, encoding=:utf_8) need_to_change_encoding = check_encoding(encoding) str_data = utf_8_pass(str) # すべての文字をひらがなに統一してからローマ字に変換されます。カタカナなどが入っている時の対応 str = hiragana(str, encoding) str = str.downcase str_data = utf_8_pass(str) str = str_data[:string] change_to = Proc.new do |hash| hash.each do |key, value| re = Regexp.new(value) if str.match(re) str = str.gsub(re, key.to_s) end end end change_to.call(Hiragana) # while文はちょっと気になる while str =~ /っ/ place = str =~ /っ/ small_tsu_to_romaji(str, place) end # ダブっている文字が小さい「っ」に変換されてからしないといけません change_to.call(Small_hiragana) Symbols.each do |symbol| str = str.gsub(symbol[1], symbol[0]) end str = kuhaku(str) str = str.encode(str_data[:encoding].name) if need_to_change_encoding str end |
#romaji!(str, encoding = :utf_8) ⇒ Object
214 215 216 |
# File 'lib/nihonjin/moji.rb', line 214 def romaji!(str, encoding=:utf_8) str.sub!(str, (romaji(str, encoding))) end |