zhongwen_tools 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 258fc61026656be4012a91e65cb844780ca6a731
4
- data.tar.gz: f80f2bf3e866dec213434ec72462e52b098b99f5
3
+ metadata.gz: 29e64d2dfff1e46c5a818f7dc9acc2919f74c256
4
+ data.tar.gz: fefa4e4202e1c3ba71f4b5d071230d880cf2df19
5
5
  SHA512:
6
- metadata.gz: 73b990af30f1baf6aa83f16f53613374a17c932ec462953f90fea23b9b704968cab90e89ee2b28356a44b07ab4f96ff1a7d8a87185d6cbc61709cd04c1fa8834
7
- data.tar.gz: 25c76d739ce899541df58a8aef4173f035ebd51b8c5122ac9642f84ea2d1da538e4c939e5f92a2fcc286a63df849d84e3c4e7b181b69f92d1eaffd83a89a5924
6
+ metadata.gz: e3b906b9372877ba3220d29a510ad2066e351e311567017a81e200fb1a3542ff81eea1e15d932df86db5c13c00b99a8c3727fa44313c8d504f2b9420f9d95866
7
+ data.tar.gz: 3e2f5d3307e29a5abbae461ca4ec9dba550b4a35dca357b01729dee0b6dfc40bc99fbaf676bfb926f3373b123de99b5498926801f85c148d6e014d3d83a05041
data/README.md CHANGED
@@ -36,8 +36,7 @@ ZhongwenTools includes the following modules:
36
36
  1. ZhongwenTools::String => some useful string functions and functions for identifying Chinese scripts and romanizations.
37
37
  2. ZhongwenTools::Numbers => functions for identifying and converting numbers.
38
38
  3. ZhongwenTools::Integer => some useful integer functions for Chinese:
39
- e.g. 12.to_pinyin 12.to_zht
40
- 4. [TODO] ZhongwenTools::Romanization => functions for converting between Chinese romanization systems
39
+ 4. ZhongwenTools::Romanization => functions for converting between Chinese romanization systems
41
40
  5. [TODO] ZhongwenTools::Conversion => functions for converting between Chinese scripts.
42
41
  6. [TODO] ZhongwenTools::ToneSandhi => functions for identifying and dealing with tone sandhi. (Wiki URL)
43
42
  7. [TODO] ZhongwenTools::Segmentation => functions for segmenting Chinese. Can provide different methods for converting
@@ -90,8 +89,8 @@ Monkey-patch your integers for Chinese.
90
89
 
91
90
 
92
91
  ### Romanization
93
- ZhongwenTools::Chinese has tools for converting between Chinese language romanization systems and
94
- scripts.
92
+ ZhongwenTools::Romanization has tools for converting between Chinese language romanization systems and
93
+ scripts. It **does not convert Chinese characters to pinyin** (see ZhongwenTools::Conversion).
95
94
 
96
95
  class String
97
96
  include ZhongwenTools::Romanization
@@ -120,6 +119,8 @@ scripts.
120
119
  str.tone_sandhi? #=> checks if the word has tone sandhi
121
120
  #=> true
122
121
  str.romanization?
122
+ str.pyn? #=> true
123
+
123
124
 
124
125
  ### Conversion
125
126
  Functions for converting between scripts (e.g. traditional Chinese to
@@ -0,0 +1,172 @@
1
+ #encoding: utf-8
2
+ require './lib/zhongwen_tools/romanization/conversion_table'
3
+ require './lib/zhongwen_tools/romanization/detect'
4
+ require './lib/zhongwen_tools/romanization/pyn_to_py'
5
+
6
+ module ZhongwenTools
7
+ module Romanization
8
+ def to_pinyin(*args)
9
+ str, from = _romanization_options(args)
10
+
11
+ _convert_romanization str, :py, from
12
+ end
13
+
14
+ def to_bopomofo *args
15
+ str, from = _romanization_options(args)
16
+
17
+ _convert_romanization str, :zyfh, from
18
+ end
19
+
20
+ def to_yale(*args)
21
+ str, from = _romanization_options(args)
22
+ _convert_romanization str, :yale, from
23
+ end
24
+
25
+ def to_wade_giles(*args)
26
+ str, from = _romanization_options(args)
27
+ _convert_romanization str, :wg, from
28
+ end
29
+
30
+ def to_typy(*args)
31
+ str, from = _romanization_options(args)
32
+ _convert_romanization str, :typy, from
33
+ end
34
+
35
+ private
36
+
37
+ def _romanization_options(args)
38
+ if self.class.to_s != 'String'
39
+ str = args[0]
40
+ from = (args[1] || :pyn).to_sym
41
+ else
42
+ str = self
43
+ from = (args[0] || :pyn).to_sym
44
+ end
45
+
46
+ [str, from]
47
+ end
48
+
49
+ # Private: Replaces numbered pinyin with actual pinyin. Pinyin separated with hyphens are combined as one word.
50
+ #
51
+ # str - A String to replace with actual pinyin
52
+ #
53
+ # Examples
54
+ # _to_pinyin 'Ni3 hao3 ma5?'
55
+ # # => "Nǐ hǎo ma?"
56
+ # # => 'Zhong1-guo2-ren2'
57
+ #
58
+ #
59
+ # Returns a string with actual pinyin
60
+ # TODO: fix regex: false match for V
61
+ # TODO: fix regex false match for "zhongguo person"
62
+ # #this regex is a quick and dirty check, but it's not accurate.
63
+ # an accurate regex would restrict access to completely accurate
64
+ # pinyin, e.g. sounds that mandarin actually can contain.
65
+ # #this regex extracts the pinyin components, but doesn't make
66
+ # judgement on the pinyins accuracy.
67
+ def _to_pinyin str
68
+ regex = /(([BPMFDTNLGKHZCSRJQXWYbpmfdtnlgkhzcsrjqxwy]?[h]?)(A[io]?|a[io]?|i[aeu]?o?|Ei?|ei?|Ou?|ou?|u[aoe]?i?|ve?)?(n?g?)(r?)([1-5])(\-+)?)/
69
+
70
+ # doing the substitution in a block is ~8x faster than using scan and each.
71
+ # Explanation: if it's pinyin without vowels, e.g. m, ng, then convert, otherwise, check if it needs an apostrophe (http://www.pinyin.info/romanization/hanyu/apostrophes.html). If it does, add it and then convert. Otherwise, just convert. Oh, and if double hyphens are used, replace them with one hyphen. And finally, correct those apostrophes at the very end.
72
+ str.gsub(regex) do
73
+ ($3.nil? ? "#{PYN_PY[$1]}" : ($2 == '' && ['a','e','o'].include?($3[0,1]))? "'#{PYN_PY["#{$3}#{$6}"]}#{$4}#{$5}" : "#{$2}#{PYN_PY["#{$3}#{$6}"]}#{$4}#{$5}") + (($7.to_s.length > 1) ? '-' : '')
74
+ end.gsub("-'","-").sub(/^'/,'')
75
+ end
76
+
77
+ #http://en.wikipedia.org/wiki/Pinyin
78
+ #http://talkbank.org/pinyin/Trad_chart_IPA.php
79
+ #for ipa
80
+ def _to_romanization str, to, from
81
+ convert_to = _set_type to
82
+ convert_from = _set_type from
83
+ tokens = str.split(' ').uniq
84
+ replacements = tokens.collect do |t|
85
+ # non_romanization = t.match(/[1-5](.*)/)[-1]
86
+ search = t.gsub(/[1-5].*/,'')
87
+ begin
88
+ if from.nil? || convert_from.nil?
89
+ replace = ROMANANIZATIONS_TABLE.find{|x| x.values.include? t.downcase.gsub(/[1-5].*/,'')}[convert_to.to_sym]
90
+ else
91
+ replace = ROMANANIZATIONS_TABLE.find{|x| x[convert_from.to_sym] == t.downcase.gsub(/[1-5].*/,'')}[convert_to.to_sym]
92
+ end
93
+ rescue => e#rescue when the converter meets something it doesn't recognize
94
+ replace = search
95
+ end
96
+ str = str.gsub(search, replace)
97
+ end
98
+ str
99
+ end
100
+ def _convert_romanization str, to, from
101
+ return str if to == from
102
+
103
+ if to == :py
104
+ if from == :pyn
105
+ _to_pinyin str
106
+ else
107
+ raise NotImplementedError, 'method not implemented'
108
+ #convert to pyn first.
109
+ end
110
+ elsif to == :zyfh
111
+ if from == :py
112
+ #need to convert pinyin to pyn
113
+ raise NotImplementedError, 'method not implemented'
114
+ end
115
+ _to_romanization str, to, from
116
+ else
117
+ if from == :pyn
118
+ _to_romanization str, to, from
119
+ else
120
+ raise NotImplementedError, 'method not implemented'
121
+ end
122
+ end
123
+ end
124
+
125
+
126
+ def _set_type(type)
127
+ type = type.to_s.downcase.to_sym
128
+ case type
129
+ when :zhuyinfuhao
130
+ :zyfh
131
+ when :bopomofo
132
+ :zyfh
133
+ when :bpmf
134
+ type = :zyfh
135
+ when :zhyfh
136
+ type = :zyfh
137
+ when :zyfh
138
+ :zyfh
139
+ when 'wade-giles'.to_sym
140
+ type = :wg
141
+ when :yale
142
+ :yale
143
+ when :tongyong
144
+ type = :typy
145
+ when :wg
146
+ type = :wg
147
+ when :typy
148
+ :typy
149
+ when :ty
150
+ type = :typy
151
+ when :pyn
152
+ :py
153
+ when :pinyin
154
+ type = :py
155
+ when :py
156
+ type = :py
157
+ when :msp2
158
+ :msp2
159
+ else
160
+ nil
161
+ end
162
+ end
163
+
164
+ alias_method :to_py, :to_pinyin
165
+ alias_method :to_zhyfh, :to_bopomofo
166
+ alias_method :to_zhuyin, :to_bopomofo
167
+ alias_method :to_zhuyin_fuhao, :to_bopomofo
168
+ alias_method :to_bpmf, :to_bopomofo
169
+ alias_method :to_wg, :to_wade_giles
170
+ alias_method :to_tongyong, :to_typy
171
+ end
172
+ end
@@ -0,0 +1,423 @@
1
+ #encoding: utf-8
2
+ module ZhongwenTools
3
+ module Romanization
4
+
5
+ ROMANANIZATIONS_TABLE = [{:zyfh => " ㄚ", :wg => "a", :mps2 => "a", :yale => "a", :typy => "a", :py => "a"},
6
+ { :zyfh => "ㄞ", :wg => "ai", :mps2 => "ai", :yale => "ai", :typy => "ai", :py => "ai"},
7
+ { :zyfh => "ㄢ", :wg => "an", :mps2 => "an", :yale => "an", :typy => "an", :py => "an"},
8
+ { :zyfh => "ㄤ", :wg => "ang", :mps2 => "ang", :yale => "ang", :typy => "ang", :py => "ang"},
9
+ { :zyfh => "ㄠ", :wg => "ao", :mps2 => "au", :yale => "au", :typy => "ao", :py => "ao"},
10
+ { :zyfh => "ㄅㄚ", :wg => "pa", :mps2 => "ba", :yale => "ba", :typy => "ba", :py => "ba"},
11
+ { :zyfh => "ㄅㄞ", :wg => "pai", :mps2 => "bai", :yale => "bai", :typy => "bai", :py => "bai"},
12
+ { :zyfh => "ㄅㄢ", :wg => "pan", :mps2 => "ban", :yale => "ban", :typy => "ban", :py => "ban"},
13
+ { :zyfh => "ㄅㄤ", :wg => "pang", :mps2 => "bang", :yale => "bang", :typy => "bang", :py => "bang"},
14
+ { :zyfh => "ㄅㄠ", :wg => "pao", :mps2 => "bau", :yale => "bau", :typy => "bao", :py => "bao"},
15
+ { :zyfh => "ㄅㄟ", :wg => "pei", :mps2 => "bei", :yale => "bei", :typy => "bei", :py => "bei"},
16
+ { :zyfh => "ㄅㄣ", :wg => "pen", :mps2 => "ben", :yale => "ben", :typy => "ben", :py => "ben"},
17
+ { :zyfh => "ㄅㄥ", :wg => "peng", :mps2 => "beng", :yale => "beng", :typy => "beng", :py => "beng"},
18
+ { :zyfh => "ㄅㄧ", :wg => "pi", :mps2 => "bi", :yale => "bi", :typy => "bi", :py => "bi"},
19
+ { :zyfh => "ㄅㄧㄢ", :wg => "pien", :mps2 => "bian", :yale => "byan", :typy => "bian", :py => "bian"},
20
+ { :zyfh => "ㄅㄧㄠ", :wg => "piao", :mps2 => "biau", :yale => "byau", :typy => "biao", :py => "biao"},
21
+ { :zyfh => "ㄅㄧㄝ", :wg => "pieh", :mps2 => "bie", :yale => "bye", :typy => "bie", :py => "bie"},
22
+ { :zyfh => "ㄅㄧㄣ", :wg => "pin", :mps2 => "bin", :yale => "bin", :typy => "bin", :py => "bin"},
23
+ { :zyfh => "ㄅㄧㄥ", :wg => "ping", :mps2 => "bing", :yale => "bing", :typy => "bing", :py => "bing"},
24
+ { :zyfh => "ㄅㄛ", :wg => "po", :mps2 => "bo", :yale => "bwo", :typy => "bo", :py => "bo"},
25
+ { :zyfh => "ㄅㄨ", :wg => "pu", :mps2 => "bu", :yale => "bu", :typy => "bu", :py => "bu"},
26
+ { :zyfh => "ㄘㄚ", :wg => "ts`a", :mps2 => "tsa", :yale => "tsa", :typy => "ca", :py => "ca"},
27
+ { :zyfh => "ㄘㄞ", :wg => "ts`ai", :mps2 => "tsai", :yale => "tsai", :typy => "cai", :py => "cai"},
28
+ { :zyfh => "ㄘㄢ", :wg => "ts`an", :mps2 => "tsan", :yale => "tsan", :typy => "can", :py => "can"},
29
+ { :zyfh => "ㄘㄤ", :wg => "ts`ang", :mps2 => "tsang", :yale => "tsang", :typy => "cang", :py => "cang"},
30
+ { :zyfh => "ㄘㄠ", :wg => "ts`ao", :mps2 => "tsau", :yale => "tsau", :typy => "cao", :py => "cao"},
31
+ { :zyfh => "ㄘㄜ", :wg => "ts`e", :mps2 => "tse", :yale => "tse", :typy => "ce", :py => "ce"},
32
+ { :zyfh => "ㄘㄣ", :wg => "ts`en", :mps2 => "tsen", :yale => "tsen", :typy => "cen", :py => "cen"},
33
+ { :zyfh => "ㄘㄥ", :wg => "ts`eng", :mps2 => "tseng", :yale => "tseng", :typy => "ceng", :py => "ceng"},
34
+ { :zyfh => "ㄔㄚ", :wg => "ch`a", :mps2 => "cha", :yale => "cha", :typy => "cha", :py => "cha"},
35
+ { :zyfh => "ㄔㄞ", :wg => "ch`ai", :mps2 => "chai", :yale => "chai", :typy => "chai", :py => "chai"},
36
+ { :zyfh => "ㄔㄢ", :wg => "ch`an", :mps2 => "chan", :yale => "chan", :typy => "chan", :py => "chan"},
37
+ { :zyfh => "ㄔㄤ", :wg => "ch`ang", :mps2 => "chang", :yale => "chang", :typy => "chang", :py => "chang"},
38
+ { :zyfh => "ㄔㄠ", :wg => "ch`ao", :mps2 => "chau", :yale => "chau", :typy => "chao", :py => "chao"},
39
+ { :zyfh => "ㄔㄜ", :wg => "ch`e", :mps2 => "che", :yale => "che", :typy => "che", :py => "che"},
40
+ { :zyfh => "ㄔㄣ", :wg => "ch`en", :mps2 => "chen", :yale => "chen", :typy => "chen", :py => "chen"},
41
+ { :zyfh => "ㄔㄥ", :wg => "ch`eng", :mps2 => "cheng", :yale => "cheng", :typy => "cheng", :py => "cheng"},
42
+ { :zyfh => "ㄔ", :wg => "ch`ih", :mps2 => "chr", :yale => "chr", :typy => "chih", :py => "chi"},
43
+ { :zyfh => "ㄔㄨㄥ", :wg => "ch`ung", :mps2 => "chung", :yale => "chung", :typy => "chong", :py => "chong"},
44
+ { :zyfh => "ㄔㄡ", :wg => "ch`ou", :mps2 => "chou", :yale => "chou", :typy => "chou", :py => "chou"},
45
+ { :zyfh => "ㄔㄨ", :wg => "ch`u", :mps2 => "chu", :yale => "chu", :typy => "chu", :py => "chu"},
46
+ { :zyfh => "ㄔㄨㄚ", :wg => "ch`ua", :mps2 => "chua", :yale => "chwa", :typy => "chua", :py => "chua"},
47
+ { :zyfh => "ㄔㄨㄞ", :wg => "ch`uai", :mps2 => "chuai", :yale => "chwai", :typy => "chuai", :py => "chuai"},
48
+ { :zyfh => "ㄔㄨㄢ", :wg => "ch`uan", :mps2 => "chuan", :yale => "chwan", :typy => "chuan", :py => "chuan"},
49
+ { :zyfh => "ㄔㄨㄤ", :wg => "ch`uang", :mps2 => "chuang", :yale => "chwang", :typy => "chuang", :py => "chuang"},
50
+ { :zyfh => "ㄔㄨㄟ", :wg => "ch`ui", :mps2 => "chuei", :yale => "chwei", :typy => "chuei", :py => "chui"},
51
+ { :zyfh => "ㄔㄨㄣ", :wg => "ch`un", :mps2 => "chuen", :yale => "chwen", :typy => "chun", :py => "chun"},
52
+ { :zyfh => "ㄔㄨㄛ", :wg => "ch`o", :mps2 => "chuo", :yale => "chwo", :typy => "chuo", :py => "chuo"},
53
+ { :zyfh => "ㄘ", :wg => "tz`u", :mps2 => "tsz", :yale => "tsz", :typy => "cih", :py => "ci"},
54
+ { :zyfh => "ㄘㄨㄥ", :wg => "ts`ung", :mps2 => "tsung", :yale => "tsung", :typy => "cong", :py => "cong"},
55
+ { :zyfh => "ㄘㄡ", :wg => "ts`ou", :mps2 => "tsou", :yale => "tsou", :typy => "cou", :py => "cou"},
56
+ { :zyfh => "ㄘㄨ", :wg => "ts`u", :mps2 => "tsu", :yale => "tsu", :typy => "cu", :py => "cu"},
57
+ { :zyfh => "ㄘㄨㄢ", :wg => "ts`uan", :mps2 => "tsuan", :yale => "tswan", :typy => "cuan", :py => "cuan"},
58
+ { :zyfh => "ㄘㄨㄟ", :wg => "ts`ui", :mps2 => "tsuei", :yale => "tswei", :typy => "cuei", :py => "cui"},
59
+ { :zyfh => "ㄘㄨㄣ", :wg => "ts`un", :mps2 => "tsuen", :yale => "tswen", :typy => "cun", :py => "cun"},
60
+ { :zyfh => "ㄘㄨㄛ", :wg => "ts`o", :mps2 => "tsuo", :yale => "tswo", :typy => "cuo", :py => "cuo"},
61
+ { :zyfh => "ㄉㄚ", :wg => "ta", :mps2 => "da", :yale => "da", :typy => "da", :py => "da"},
62
+ { :zyfh => "ㄉㄞ", :wg => "tai", :mps2 => "dai", :yale => "dai", :typy => "dai", :py => "dai"},
63
+ { :zyfh => "ㄉㄢ", :wg => "tan", :mps2 => "dan", :yale => "dan", :typy => "dan", :py => "dan"},
64
+ { :zyfh => "ㄉㄤ", :wg => "tang", :mps2 => "dang", :yale => "dang", :typy => "dang", :py => "dang"},
65
+ { :zyfh => "ㄉㄠ", :wg => "tao", :mps2 => "dau", :yale => "dau", :typy => "dao", :py => "dao"},
66
+ { :zyfh => "ㄉㄜ", :wg => "te", :mps2 => "de", :yale => "de", :typy => "de", :py => "de"},
67
+ { :zyfh => "ㄉㄟ", :wg => "tei", :mps2 => "dei", :yale => "dei", :typy => "dei", :py => "dei"},
68
+ { :zyfh => "ㄉㄣ", :wg => "ten", :mps2 => "den", :yale => "den", :typy => "den", :py => "den"},
69
+ { :zyfh => "ㄉㄥ", :wg => "teng", :mps2 => "deng", :yale => "deng", :typy => "deng", :py => "deng"},
70
+ { :zyfh => "ㄉㄧ", :wg => "ti", :mps2 => "di", :yale => "di", :typy => "di", :py => "di"},
71
+ { :zyfh => "ㄉㄧㄢ", :wg => "tien", :mps2 => "dian", :yale => "dyan", :typy => "dian", :py => "dian"},
72
+ { :zyfh => "ㄉㄧㄤ", :wg => "tiang", :mps2 => "diang", :yale => "dyang", :typy => "diang", :py => "diang"},
73
+ { :zyfh => "ㄉㄧㄠ", :wg => "tiao", :mps2 => "diau", :yale => "dyau", :typy => "diao", :py => "diao"},
74
+ { :zyfh => "ㄉㄧㄝ", :wg => "tieh", :mps2 => "die", :yale => "dye", :typy => "die", :py => "die"},
75
+ { :zyfh => "ㄉㄧㄥ", :wg => "ting", :mps2 => "ding", :yale => "ding", :typy => "ding", :py => "ding"},
76
+ { :zyfh => "ㄉㄧㄡ", :wg => "tiu", :mps2 => "diou", :yale => "dyou", :typy => "diou", :py => "diu"},
77
+ { :zyfh => "ㄉㄨㄥ", :wg => "tung", :mps2 => "dung", :yale => "dung", :typy => "dong", :py => "dong"},
78
+ { :zyfh => "ㄉㄡ", :wg => "tou", :mps2 => "dou", :yale => "dou", :typy => "dou", :py => "dou"},
79
+ { :zyfh => "ㄉㄨ", :wg => "tu", :mps2 => "du", :yale => "du", :typy => "du", :py => "du"},
80
+ { :zyfh => "ㄉㄨㄢ", :wg => "tuan", :mps2 => "duan", :yale => "dwan", :typy => "duan", :py => "duan"},
81
+ { :zyfh => "ㄉㄨㄟ", :wg => "tui", :mps2 => "duei", :yale => "dwei", :typy => "duei", :py => "dui"},
82
+ { :zyfh => "ㄉㄨㄣ", :wg => "tun", :mps2 => "duen", :yale => "dwen", :typy => "dun", :py => "dun"},
83
+ { :zyfh => "ㄉㄨㄛ", :wg => "to", :mps2 => "duo", :yale => "dwo", :typy => "duo", :py => "duo"},
84
+ { :zyfh => "ㄜ", :wg => "e", :mps2 => "e", :yale => "e", :typy => "e", :py => "e"},
85
+ { :zyfh => "ㄟ", :wg => "ei", :mps2 => "ei", :yale => "ei", :typy => "ei", :py => "ei"},
86
+ { :zyfh => "ㄣ", :wg => "en", :mps2 => "en", :yale => "en", :typy => "en", :py => "en"},
87
+ { :zyfh => "ㄦ", :wg => "erh", :mps2 => "er", :yale => "er", :typy => "er", :py => "er"},
88
+ { :zyfh => "ㄈㄚ", :wg => "fa", :mps2 => "fa", :yale => "fa", :typy => "fa", :py => "fa"},
89
+ { :zyfh => "ㄈㄢ", :wg => "fan", :mps2 => "fan", :yale => "fan", :typy => "fan", :py => "fan"},
90
+ { :zyfh => "ㄈㄤ", :wg => "fang", :mps2 => "fang", :yale => "fang", :typy => "fang", :py => "fang"},
91
+ { :zyfh => "ㄈㄟ", :wg => "fei", :mps2 => "fei", :yale => "fei", :typy => "fei", :py => "fei"},
92
+ { :zyfh => "ㄈㄣ", :wg => "fen", :mps2 => "fen", :yale => "fen", :typy => "fen", :py => "fen"},
93
+ { :zyfh => "ㄈㄥ", :wg => "feng", :mps2 => "feng", :yale => "feng", :typy => "fong", :py => "feng"},
94
+ { :zyfh => "ㄈㄛ", :wg => "fo", :mps2 => "fo", :yale => "fwo", :typy => "fo", :py => "fo"},
95
+ { :zyfh => "ㄈㄡ", :wg => "fou", :mps2 => "fou", :yale => "fou", :typy => "fou", :py => "fou"},
96
+ { :zyfh => "ㄈㄨ", :wg => "fu", :mps2 => "fu", :yale => "fu", :typy => "fu", :py => "fu"},
97
+ { :zyfh => "ㄍㄚ", :wg => "ka", :mps2 => "ga", :yale => "ga", :typy => "ga", :py => "ga"},
98
+ { :zyfh => "ㄍㄞ", :wg => "kai", :mps2 => "gai", :yale => "gai", :typy => "gai", :py => "gai"},
99
+ { :zyfh => "ㄍㄢ", :wg => "kan", :mps2 => "gan", :yale => "gan", :typy => "gan", :py => "gan"},
100
+ { :zyfh => "ㄍㄤ", :wg => "kang", :mps2 => "gang", :yale => "gang", :typy => "gang", :py => "gang"},
101
+ { :zyfh => "ㄍㄠ", :wg => "kao", :mps2 => "gau", :yale => "gau", :typy => "gao", :py => "gao"},
102
+ { :zyfh => "ㄍㄜ", :wg => "ko", :mps2 => "ge", :yale => "ge", :typy => "ge", :py => "ge"},
103
+ { :zyfh => "ㄍㄟ", :wg => "kei", :mps2 => "gei", :yale => "gei", :typy => "gei", :py => "gei"},
104
+ { :zyfh => "ㄍㄣ", :wg => "ken", :mps2 => "gen", :yale => "gen", :typy => "gen", :py => "gen"},
105
+ { :zyfh => "ㄍㄥ", :wg => "keng", :mps2 => "geng", :yale => "geng", :typy => "geng", :py => "geng"},
106
+ { :zyfh => "ㄍㄨㄥ", :wg => "kung", :mps2 => "gung", :yale => "gung", :typy => "gong", :py => "gong"},
107
+ { :zyfh => "ㄍㄡ", :wg => "kou", :mps2 => "gou", :yale => "gou", :typy => "gou", :py => "gou"},
108
+ { :zyfh => "ㄍㄨ", :wg => "ku", :mps2 => "gu", :yale => "gu", :typy => "gu", :py => "gu"},
109
+ { :zyfh => "ㄍㄨㄚ", :wg => "kua", :mps2 => "gua", :yale => "gwa", :typy => "gua", :py => "gua"},
110
+ { :zyfh => "ㄍㄨㄞ", :wg => "kuai", :mps2 => "guai", :yale => "gwai", :typy => "guai", :py => "guai"},
111
+ { :zyfh => "ㄍㄨㄢ", :wg => "kuan", :mps2 => "guan", :yale => "gwan", :typy => "guan", :py => "guan"},
112
+ { :zyfh => "ㄍㄨㄤ", :wg => "kuang", :mps2 => "guang", :yale => "gwang", :typy => "guang", :py => "guang"},
113
+ { :zyfh => "ㄍㄨㄟ", :wg => "kuei", :mps2 => "guei", :yale => "gwei", :typy => "guei", :py => "gui"},
114
+ { :zyfh => "ㄍㄨㄣ", :wg => "kun", :mps2 => "guen", :yale => "gwun", :typy => "gun", :py => "gun"},
115
+ { :zyfh => "ㄍㄨㄛ", :wg => "kuo", :mps2 => "guo", :yale => "gwo", :typy => "guo", :py => "guo"},
116
+ { :zyfh => "ㄏㄚ", :wg => "ha", :mps2 => "ha", :yale => "ha", :typy => "ha", :py => "ha"},
117
+ { :zyfh => "ㄏㄞ", :wg => "hai", :mps2 => "hai", :yale => "hai", :typy => "hai", :py => "hai"},
118
+ { :zyfh => "ㄏㄢ", :wg => "han", :mps2 => "han", :yale => "han", :typy => "han", :py => "han"},
119
+ { :zyfh => "ㄏㄤ", :wg => "hang", :mps2 => "hang", :yale => "hang", :typy => "hang", :py => "hang"},
120
+ { :zyfh => "ㄏㄠ", :wg => "hao", :mps2 => "hau", :yale => "hau", :typy => "hao", :py => "hao"},
121
+ { :zyfh => "ㄏㄜ", :wg => "ho", :mps2 => "he", :yale => "he", :typy => "he", :py => "he"},
122
+ { :zyfh => "ㄏㄟ", :wg => "hei", :mps2 => "hei", :yale => "hei", :typy => "hei", :py => "hei"},
123
+ { :zyfh => "ㄏㄣ", :wg => "hen", :mps2 => "hen", :yale => "hen", :typy => "hen", :py => "hen"},
124
+ { :zyfh => "ㄏㄥ", :wg => "heng", :mps2 => "heng", :yale => "heng", :typy => "heng", :py => "heng"},
125
+ { :zyfh => "ㄏㄨㄥ", :wg => "hung", :mps2 => "hung", :yale => "hung", :typy => "hong", :py => "hong"},
126
+ { :zyfh => "ㄏㄡ", :wg => "hou", :mps2 => "hou", :yale => "hou", :typy => "hou", :py => "hou"},
127
+ { :zyfh => "ㄏㄨ", :wg => "hu", :mps2 => "hu", :yale => "hu", :typy => "hu", :py => "hu"},
128
+ { :zyfh => "ㄏㄨㄚ", :wg => "hua", :mps2 => "hua", :yale => "hwa", :typy => "hua", :py => "hua"},
129
+ { :zyfh => "ㄏㄨㄞ", :wg => "huai", :mps2 => "huai", :yale => "hwai", :typy => "huai", :py => "huai"},
130
+ { :zyfh => "ㄏㄨㄢ", :wg => "huan", :mps2 => "huan", :yale => "hwan", :typy => "huan", :py => "huan"},
131
+ { :zyfh => "ㄏㄨㄤ", :wg => "huang", :mps2 => "huang", :yale => "hwang", :typy => "huang", :py => "huang"},
132
+ { :zyfh => "ㄏㄨㄟ", :wg => "hui", :mps2 => "huei", :yale => "hwei", :typy => "huei", :py => "hui"},
133
+ { :zyfh => "ㄏㄨㄣ", :wg => "hun", :mps2 => "huen", :yale => "hwen", :typy => "hun", :py => "hun"},
134
+ { :zyfh => "ㄏㄨㄛ", :wg => "huo", :mps2 => "huo", :yale => "hwo", :typy => "huo", :py => "huo"},
135
+ { :zyfh => "ㄐㄧ", :wg => "chi", :mps2 => "ji", :yale => "ji", :typy => "ji", :py => "ji"},
136
+ { :zyfh => "ㄐㄧㄚ", :wg => "chia", :mps2 => "jia", :yale => "jya", :typy => "jia", :py => "jia"},
137
+ { :zyfh => "ㄐㄧㄢ", :wg => "chien", :mps2 => "jian", :yale => "jyan", :typy => "jian", :py => "jian"},
138
+ { :zyfh => "ㄐㄧㄤ", :wg => "chiang", :mps2 => "jiang", :yale => "jyang", :typy => "jiang", :py => "jiang"},
139
+ { :zyfh => "ㄐㄧㄠ", :wg => "chiao", :mps2 => "jiau", :yale => "jyau", :typy => "jiao", :py => "jiao"},
140
+ { :zyfh => "ㄐㄧㄝ", :wg => "chieh", :mps2 => "jie", :yale => "jye", :typy => "jie", :py => "jie"},
141
+ { :zyfh => "ㄐㄧㄣ", :wg => "chin", :mps2 => "jin", :yale => "jin", :typy => "jin", :py => "jin"},
142
+ { :zyfh => "ㄐㄧㄥ", :wg => "ching", :mps2 => "jing", :yale => "jing", :typy => "jing", :py => "jing"},
143
+ { :zyfh => "ㄐㄩㄥ", :wg => "chiung", :mps2 => "jiung", :yale => "jyung", :typy => "jyong", :py => "jiong"},
144
+ { :zyfh => "ㄐㄧㄡ", :wg => "chiu", :mps2 => "jiou", :yale => "jyou", :typy => "jiou", :py => "jiu"},
145
+ { :zyfh => "ㄐㄩ", :wg => "chü", :mps2 => "jiu", :yale => "jyu", :typy => "jyu", :py => "ju"},
146
+ { :zyfh => "ㄐㄩㄢ", :wg => "chüan", :mps2 => "jiuan", :yale => "jywan", :typy => "jyuan", :py => "juan"},
147
+ { :zyfh => "ㄐㄩㄝ", :wg => "chüeh", :mps2 => "jiue", :yale => "jywe", :typy => "jyue", :py => "jue"},
148
+ { :zyfh => "ㄐㄩㄣ", :wg => "chün", :mps2 => "jiun", :yale => "jyun", :typy => "jyun", :py => "jun"},
149
+ { :zyfh => "ㄎㄚ", :wg => "k`a", :mps2 => "ka", :yale => "ka", :typy => "ka", :py => "ka"},
150
+ { :zyfh => "ㄎㄞ", :wg => "k`ai", :mps2 => "kai", :yale => "kai", :typy => "kai", :py => "kai"},
151
+ { :zyfh => "ㄎㄢ", :wg => "k`an", :mps2 => "kan", :yale => "kan", :typy => "kan", :py => "kan"},
152
+ { :zyfh => "ㄎㄤ", :wg => "k`ang", :mps2 => "kang", :yale => "kang", :typy => "kang", :py => "kang"},
153
+ { :zyfh => "ㄎㄠ", :wg => "k`ao", :mps2 => "kau", :yale => "kau", :typy => "kao", :py => "kao"},
154
+ { :zyfh => "ㄎㄜ", :wg => "k`o", :mps2 => "ke", :yale => "ke", :typy => "ke", :py => "ke"},
155
+ { :zyfh => "ㄎㄣ", :wg => "k`en", :mps2 => "ken", :yale => "ken", :typy => "ken", :py => "ken"},
156
+ { :zyfh => "ㄎㄥ", :wg => "k`eng", :mps2 => "keng", :yale => "keng", :typy => "keng", :py => "keng"},
157
+ { :zyfh => "ㄎㄨㄥ", :wg => "k`ung", :mps2 => "kung", :yale => "kung", :typy => "kong", :py => "kong"},
158
+ { :zyfh => "ㄎㄡ", :wg => "k`ou", :mps2 => "kou", :yale => "kou", :typy => "kou", :py => "kou"},
159
+ { :zyfh => "ㄎㄨ", :wg => "k`u", :mps2 => "ku", :yale => "ku", :typy => "ku", :py => "ku"},
160
+ { :zyfh => "ㄎㄨㄚ", :wg => "k`ua", :mps2 => "kua", :yale => "kwa", :typy => "kua", :py => "kua"},
161
+ { :zyfh => "ㄎㄨㄞ", :wg => "k`uai", :mps2 => "kuai", :yale => "kwai", :typy => "kuai", :py => "kuai"},
162
+ { :zyfh => "ㄎㄨㄢ", :wg => "k`uan", :mps2 => "kuan", :yale => "kwan", :typy => "kuan", :py => "kuan"},
163
+ { :zyfh => "ㄎㄨㄤ", :wg => "k`uang", :mps2 => "kuang", :yale => "kwang", :typy => "kuang", :py => "kuang"},
164
+ { :zyfh => "ㄎㄨㄟ", :wg => "k`uei", :mps2 => "kuei", :yale => "kwei", :typy => "kuei", :py => "kui"},
165
+ { :zyfh => "ㄎㄨㄣ", :wg => "k`un", :mps2 => "kuen", :yale => "kwen", :typy => "kun", :py => "kun"},
166
+ { :zyfh => "ㄎㄨㄛ", :wg => "k`uo", :mps2 => "kuo", :yale => "kwo", :typy => "kuo", :py => "kuo"},
167
+ { :zyfh => "ㄌㄚ", :wg => "la", :mps2 => "la", :yale => "la", :typy => "la", :py => "la"},
168
+ { :zyfh => "ㄌㄞ", :wg => "lai", :mps2 => "lai", :yale => "lai", :typy => "lai", :py => "lai"},
169
+ { :zyfh => "ㄌㄢ", :wg => "lan", :mps2 => "lan", :yale => "lan", :typy => "lan", :py => "lan"},
170
+ { :zyfh => "ㄌㄤ", :wg => "lang", :mps2 => "lang", :yale => "lang", :typy => "lang", :py => "lang"},
171
+ { :zyfh => "ㄌㄠ", :wg => "lao", :mps2 => "lau", :yale => "lau", :typy => "lao", :py => "lao"},
172
+ { :zyfh => "ㄌㄜ", :wg => "le", :mps2 => "le", :yale => "le", :typy => "le", :py => "le"},
173
+ { :zyfh => "ㄌㄟ", :wg => "lei", :mps2 => "lei", :yale => "lei", :typy => "lei", :py => "lei"},
174
+ { :zyfh => "ㄌㄥ", :wg => "leng", :mps2 => "leng", :yale => "leng", :typy => "leng", :py => "leng"},
175
+ { :zyfh => "ㄌㄧ", :wg => "li", :mps2 => "li", :yale => "li", :typy => "li", :py => "li"},
176
+ { :zyfh => "ㄌㄧㄚ", :wg => "lia", :mps2 => "lia", :yale => "lya", :typy => "lia", :py => "lia"},
177
+ { :zyfh => "ㄌㄧㄢ", :wg => "lien", :mps2 => "lian", :yale => "lyan", :typy => "lian", :py => "lian"},
178
+ { :zyfh => "ㄌㄧㄤ", :wg => "liang", :mps2 => "liang", :yale => "lyang", :typy => "liang", :py => "liang"},
179
+ { :zyfh => "ㄌㄧㄠ", :wg => "liao", :mps2 => "liau", :yale => "lyau", :typy => "liao", :py => "liao"},
180
+ { :zyfh => "ㄌㄧㄝ", :wg => "lieh", :mps2 => "lie", :yale => "lye", :typy => "lie", :py => "lie"},
181
+ { :zyfh => "ㄌㄧㄣ", :wg => "lin", :mps2 => "lin", :yale => "lin", :typy => "lin", :py => "lin"},
182
+ { :zyfh => "ㄌㄧㄥ", :wg => "ling", :mps2 => "ling", :yale => "ling", :typy => "ling", :py => "ling"},
183
+ { :zyfh => "ㄌㄧㄡ", :wg => "liu", :mps2 => "liou", :yale => "lyou", :typy => "liou", :py => "liu"},
184
+ { :zyfh => "ㄌㄛ", :wg => "lo", :mps2 => "lo", :yale => "lo", :typy => "lo", :py => "lo"},
185
+ { :zyfh => "ㄌㄨㄥ", :wg => "lung", :mps2 => "lung", :yale => "lung", :typy => "long", :py => "long"},
186
+ { :zyfh => "ㄌㄡ", :wg => "lou", :mps2 => "lou", :yale => "lou", :typy => "lou", :py => "lou"},
187
+ { :zyfh => "ㄌㄨ", :wg => "lu", :mps2 => "lu", :yale => "lu", :typy => "lu", :py => "lu"},
188
+ { :zyfh => "ㄌㄨㄢ", :wg => "luan", :mps2 => "luan", :yale => "lwan", :typy => "luan", :py => "luan"},
189
+ { :zyfh => "ㄌㄨㄣ", :wg => "lun", :mps2 => "luen", :yale => "lwun", :typy => "lun", :py => "lun"},
190
+ { :zyfh => "ㄌㄨㄛ", :wg => "lo", :mps2 => "luo", :yale => "lwo", :typy => "luo", :py => "luo"},
191
+ { :zyfh => "ㄌㄩ", :wg => "lü", :mps2 => "liu", :yale => "lyu", :typy => "lyu", :py => "lü"},
192
+ { :zyfh => "ㄌㄩㄝ", :wg => "lüeh", :mps2 => "liue", :yale => "lywe", :typy => "lyue", :py => "lüe"},
193
+ { :zyfh => "ㄌㄩㄣ", :wg => "lün", :mps2 => "liun", :yale => "lyun", :typy => "lyun", :py => "lün"},
194
+ { :zyfh => "ㄌㄩ", :wg => "lü", :mps2 => "liu", :yale => "lyu", :typy => "lyu", :py => "lv"},
195
+ { :zyfh => "ㄌㄩㄝ", :wg => "lüeh", :mps2 => "liue", :yale => "lywe", :typy => "lyue", :py => "lve"},
196
+ { :zyfh => "ㄌㄩㄣ", :wg => "lün", :mps2 => "liun", :yale => "lyun", :typy => "lyun", :py => "lvn"},
197
+ { :zyfh => "ㄇㄚ", :wg => "ma", :mps2 => "ma", :yale => "ma", :typy => "ma", :py => "ma"},
198
+ { :zyfh => "ㄇㄞ", :wg => "mai", :mps2 => "mai", :yale => "mai", :typy => "mai", :py => "mai"},
199
+ { :zyfh => "ㄇㄢ", :wg => "man", :mps2 => "man", :yale => "man", :typy => "man", :py => "man"},
200
+ { :zyfh => "ㄇㄤ", :wg => "mang", :mps2 => "mang", :yale => "mang", :typy => "mang", :py => "mang"},
201
+ { :zyfh => "ㄇㄠ", :wg => "mao", :mps2 => "mau", :yale => "mau", :typy => "mao", :py => "mao"},
202
+ { :zyfh => "ㄇㄜ", :wg => "me", :mps2 => "me", :yale => "me", :typy => "me", :py => "me"},
203
+ { :zyfh => "ㄇㄟ", :wg => "mei", :mps2 => "mei", :yale => "mei", :typy => "mei", :py => "mei"},
204
+ { :zyfh => "ㄇㄣ", :wg => "men", :mps2 => "men", :yale => "men", :typy => "men", :py => "men"},
205
+ { :zyfh => "ㄇㄥ", :wg => "meng", :mps2 => "meng", :yale => "meng", :typy => "meng", :py => "meng"},
206
+ { :zyfh => "ㄇㄧ", :wg => "mi", :mps2 => "mi", :yale => "mi", :typy => "mi", :py => "mi"},
207
+ { :zyfh => "ㄇㄧㄢ", :wg => "mien", :mps2 => "mian", :yale => "myan", :typy => "mian", :py => "mian"},
208
+ { :zyfh => "ㄇㄧㄠ", :wg => "miao", :mps2 => "miau", :yale => "myau", :typy => "miao", :py => "miao"},
209
+ { :zyfh => "ㄇㄧㄝ", :wg => "mieh", :mps2 => "mie", :yale => "mye", :typy => "mie", :py => "mie"},
210
+ { :zyfh => "ㄇㄧㄣ", :wg => "min", :mps2 => "min", :yale => "min", :typy => "min", :py => "min"},
211
+ { :zyfh => "ㄇㄧㄥ", :wg => "ming", :mps2 => "ming", :yale => "ming", :typy => "ming", :py => "ming"},
212
+ { :zyfh => "ㄇㄧㄡ", :wg => "miu", :mps2 => "miou", :yale => "myou", :typy => "miou", :py => "miu"},
213
+ { :zyfh => "ㄇㄛ", :wg => "mo", :mps2 => "mo", :yale => "mwo", :typy => "mo", :py => "mo"},
214
+ { :zyfh => "ㄇㄡ", :wg => "mou", :mps2 => "mou", :yale => "mou", :typy => "mou", :py => "mou"},
215
+ { :zyfh => "ㄇㄨ", :wg => "mu", :mps2 => "mu", :yale => "mu", :typy => "mu", :py => "mu"},
216
+ { :zyfh => "ㄋㄚ", :wg => "na", :mps2 => "na", :yale => "na", :typy => "na", :py => "na"},
217
+ { :zyfh => "ㄋㄞ", :wg => "nai", :mps2 => "nai", :yale => "nai", :typy => "nai", :py => "nai"},
218
+ { :zyfh => "ㄋㄢ", :wg => "nan", :mps2 => "nan", :yale => "nan", :typy => "nan", :py => "nan"},
219
+ { :zyfh => "ㄋㄤ", :wg => "nang", :mps2 => "nang", :yale => "nang", :typy => "nang", :py => "nang"},
220
+ { :zyfh => "ㄋㄠ", :wg => "nao", :mps2 => "nau", :yale => "nau", :typy => "nao", :py => "nao"},
221
+ { :zyfh => "ㄋㄜ", :wg => "ne", :mps2 => "ne", :yale => "ne", :typy => "ne", :py => "ne"},
222
+ { :zyfh => "ㄋㄟ", :wg => "nei", :mps2 => "nei", :yale => "nei", :typy => "nei", :py => "nei"},
223
+ { :zyfh => "ㄋㄣ", :wg => "nen", :mps2 => "nen", :yale => "nen", :typy => "nen", :py => "nen"},
224
+ { :zyfh => "ㄋㄥ", :wg => "neng", :mps2 => "neng", :yale => "neng", :typy => "neng", :py => "neng"},
225
+ { :zyfh => "ㄋㄧ", :wg => "ni", :mps2 => "ni", :yale => "ni", :typy => "ni", :py => "ni"},
226
+ { :zyfh => "ㄋㄧㄚ", :wg => "nia", :mps2 => "nia", :yale => "nya", :typy => "nia", :py => "nia"},
227
+ { :zyfh => "ㄋㄧㄢ", :wg => "nien", :mps2 => "nian", :yale => "nyan", :typy => "nian", :py => "nian"},
228
+ { :zyfh => "ㄋㄧㄤ", :wg => "niang", :mps2 => "niang", :yale => "nyang", :typy => "niang", :py => "niang"},
229
+ { :zyfh => "ㄋㄧㄠ", :wg => "niao", :mps2 => "niau", :yale => "nyau", :typy => "niao", :py => "niao"},
230
+ { :zyfh => "ㄋㄧㄝ", :wg => "nieh", :mps2 => "nie", :yale => "nye", :typy => "nie", :py => "nie"},
231
+ { :zyfh => "ㄋㄧㄣ", :wg => "nin", :mps2 => "nin", :yale => "nin", :typy => "nin", :py => "nin"},
232
+ { :zyfh => "ㄋㄧㄥ", :wg => "ning", :mps2 => "ning", :yale => "ning", :typy => "ning", :py => "ning"},
233
+ { :zyfh => "ㄋㄧㄡ", :wg => "niu", :mps2 => "niou", :yale => "nyou", :typy => "niou", :py => "niu"},
234
+ { :zyfh => "ㄋㄨㄥ", :wg => "nung", :mps2 => "nung", :yale => "nung", :typy => "nong", :py => "nong"},
235
+ { :zyfh => "ㄋㄡ", :wg => "nou", :mps2 => "nou", :yale => "nou", :typy => "nou", :py => "nou"},
236
+ { :zyfh => "ㄋㄨ", :wg => "nu", :mps2 => "nu", :yale => "nu", :typy => "nu", :py => "nu"},
237
+ { :zyfh => "ㄋㄨㄢ", :wg => "nuan", :mps2 => "nuan", :yale => "nwan", :typy => "nuan", :py => "nuan"},
238
+ { :zyfh => "ㄋㄨㄣ", :wg => "nun", :mps2 => "nuen", :yale => "nwen", :typy => "nun", :py => "nun"},
239
+ { :zyfh => "ㄋㄨㄛ", :wg => "no", :mps2 => "nuo", :yale => "nwo", :typy => "nuo", :py => "nuo"},
240
+ { :zyfh => "ㄋㄩ", :wg => "nü", :mps2 => "niu", :yale => "nyu", :typy => "nyu", :py => "nv"},
241
+ { :zyfh => "ㄋㄩ", :wg => "nü", :mps2 => "niu", :yale => "nyu", :typy => "nyu", :py => "nü"},
242
+ { :zyfh => "ㄋㄩㄝ", :wg => "nüeh", :mps2 => "niue", :yale => "nywe", :typy => "nyue", :py => "nüe"},
243
+ { :zyfh => "ㄋㄩㄝ", :wg => "nüeh", :mps2 => "niue", :yale => "nywe", :typy => "nyue", :py => "nve"},
244
+ { :zyfh => "ㄡ", :wg => "ou", :mps2 => "ou", :yale => "ou", :typy => "ou", :py => "ou"},
245
+ { :zyfh => "ㄆㄚ", :wg => "p`a", :mps2 => "pa", :yale => "pa", :typy => "pa", :py => "pa"},
246
+ { :zyfh => "ㄆㄞ", :wg => "p`ai", :mps2 => "pai", :yale => "pai", :typy => "pai", :py => "pai"},
247
+ { :zyfh => "ㄆㄢ", :wg => "p`an", :mps2 => "pan", :yale => "pan", :typy => "pan", :py => "pan"},
248
+ { :zyfh => "ㄆㄤ", :wg => "p`ang", :mps2 => "pang", :yale => "pang", :typy => "pang", :py => "pang"},
249
+ { :zyfh => "ㄆㄠ", :wg => "p`ao", :mps2 => "pau", :yale => "pau", :typy => "pao", :py => "pao"},
250
+ { :zyfh => "ㄆㄟ", :wg => "p`ei", :mps2 => "pei", :yale => "pei", :typy => "pei", :py => "pei"},
251
+ { :zyfh => "ㄆㄣ", :wg => "p`en", :mps2 => "pen", :yale => "pen", :typy => "pen", :py => "pen"},
252
+ { :zyfh => "ㄆㄥ", :wg => "p`eng", :mps2 => "peng", :yale => "peng", :typy => "peng", :py => "peng"},
253
+ { :zyfh => "ㄆㄧ", :wg => "p`i", :mps2 => "pi", :yale => "pi", :typy => "pi", :py => "pi"},
254
+ { :zyfh => "ㄆㄧㄢ", :wg => "p`ien", :mps2 => "pian", :yale => "pyan", :typy => "pian", :py => "pian"},
255
+ { :zyfh => "ㄆㄧㄠ", :wg => "p`iao", :mps2 => "piau", :yale => "pyau", :typy => "piao", :py => "piao"},
256
+ { :zyfh => "ㄆㄧㄝ", :wg => "p`ieh", :mps2 => "pie", :yale => "pye", :typy => "pie", :py => "pie"},
257
+ { :zyfh => "ㄆㄧㄣ", :wg => "p`in", :mps2 => "pin", :yale => "pin", :typy => "pin", :py => "pin"},
258
+ { :zyfh => "ㄆㄧㄥ", :wg => "p`ing", :mps2 => "ping", :yale => "ping", :typy => "ping", :py => "ping"},
259
+ { :zyfh => "ㄆㄛ", :wg => "p`o", :mps2 => "po", :yale => "pwo", :typy => "po", :py => "po"},
260
+ { :zyfh => "ㄆㄡ", :wg => "p`ou", :mps2 => "pou", :yale => "pou", :typy => "pou", :py => "pou"},
261
+ { :zyfh => "ㄆㄨ", :wg => "p`u", :mps2 => "pu", :yale => "pu", :typy => "pu", :py => "pu"},
262
+ { :zyfh => "ㄑㄧ", :wg => "ch`i", :mps2 => "chi", :yale => "chi", :typy => "ci", :py => "qi"},
263
+ { :zyfh => "ㄑㄧㄚ", :wg => "ch`ia", :mps2 => "chia", :yale => "chya", :typy => "cia", :py => "qia"},
264
+ { :zyfh => "ㄑㄧㄢ", :wg => "ch`ien", :mps2 => "chian", :yale => "chyan", :typy => "cian", :py => "qian"},
265
+ { :zyfh => "ㄑㄧㄤ", :wg => "ch`iang", :mps2 => "chiang", :yale => "chyang", :typy => "ciang", :py => "qiang"},
266
+ { :zyfh => "ㄑㄧㄠ", :wg => "ch`iao", :mps2 => "chiau", :yale => "chyau", :typy => "ciao", :py => "qiao"},
267
+ { :zyfh => "ㄑㄧㄝ", :wg => "ch`ieh", :mps2 => "chie", :yale => "chye", :typy => "cie", :py => "qie"},
268
+ { :zyfh => "ㄑㄧㄣ", :wg => "ch`in", :mps2 => "chin", :yale => "chin", :typy => "cin", :py => "qin"},
269
+ { :zyfh => "ㄑㄧㄥ", :wg => "ch`ing", :mps2 => "ching", :yale => "ching", :typy => "cing", :py => "qing"},
270
+ { :zyfh => "ㄑㄩㄥ", :wg => "ch`iung", :mps2 => "chiung", :yale => "chyung", :typy => "cyong", :py => "qiong"},
271
+ { :zyfh => "ㄑㄧㄡ", :wg => "ch`iu", :mps2 => "chiou", :yale => "chyou", :typy => "ciou", :py => "qiu"},
272
+ { :zyfh => "ㄑㄩ", :wg => "ch`ü", :mps2 => "chiu", :yale => "chyu", :typy => "cyu", :py => "qu"},
273
+ { :zyfh => "ㄑㄩㄢ", :wg => "ch`üan", :mps2 => "chiuan", :yale => "chywan", :typy => "cyuan", :py => "quan"},
274
+ { :zyfh => "ㄑㄩㄝ", :wg => "ch`üeh", :mps2 => "chiue", :yale => "chywe", :typy => "cyue", :py => "que"},
275
+ { :zyfh => "ㄑㄩㄣ", :wg => "ch`ün", :mps2 => "chiun", :yale => "chyun", :typy => "cyun", :py => "qun"},
276
+ { :zyfh => "ㄖㄢ", :wg => "jan", :mps2 => "ran", :yale => "ran", :typy => "ran", :py => "ran"},
277
+ { :zyfh => "ㄖㄤ", :wg => "jang", :mps2 => "rang", :yale => "rang", :typy => "rang", :py => "rang"},
278
+ { :zyfh => "ㄖㄠ", :wg => "jao", :mps2 => "rau", :yale => "rau", :typy => "rao", :py => "rao"},
279
+ { :zyfh => "ㄖㄜ", :wg => "je", :mps2 => "re", :yale => "re", :typy => "re", :py => "re"},
280
+ { :zyfh => "ㄖㄣ", :wg => "jen", :mps2 => "ren", :yale => "ren", :typy => "ren", :py => "ren"},
281
+ { :zyfh => "ㄖㄥ", :wg => "jeng", :mps2 => "reng", :yale => "reng", :typy => "reng", :py => "reng"},
282
+ { :zyfh => "ㄖ", :wg => "jih", :mps2 => "r", :yale => "r", :typy => "rih", :py => "ri"},
283
+ { :zyfh => "ㄖㄨㄥ", :wg => "jung", :mps2 => "rung", :yale => "rung", :typy => "rong", :py => "rong"},
284
+ { :zyfh => "ㄖㄡ", :wg => "jou", :mps2 => "rou", :yale => "rou", :typy => "rou", :py => "rou"},
285
+ { :zyfh => "ㄖㄨ", :wg => "ju", :mps2 => "ru", :yale => "ru", :typy => "ru", :py => "ru"},
286
+ { :zyfh => "ㄖㄨㄢ", :wg => "juan", :mps2 => "ruan", :yale => "rwan", :typy => "ruan", :py => "ruan"},
287
+ { :zyfh => "ㄖㄨㄟ", :wg => "jui", :mps2 => "ruei", :yale => "rwei", :typy => "ruei", :py => "rui"},
288
+ { :zyfh => "ㄖㄨㄣ", :wg => "jun", :mps2 => "ruen", :yale => "rwun", :typy => "run", :py => "run"},
289
+ { :zyfh => "ㄖㄨㄛ", :wg => "jo", :mps2 => "ruo", :yale => "rwo", :typy => "ruo", :py => "ruo"},
290
+ { :zyfh => "ㄙㄚ", :wg => "sa", :mps2 => "sa", :yale => "sa", :typy => "sa", :py => "sa"},
291
+ { :zyfh => "ㄙㄞ", :wg => "sai", :mps2 => "sai", :yale => "sai", :typy => "sai", :py => "sai"},
292
+ { :zyfh => "ㄙㄢ", :wg => "san", :mps2 => "san", :yale => "san", :typy => "san", :py => "san"},
293
+ { :zyfh => "ㄙㄤ", :wg => "sang", :mps2 => "sang", :yale => "sang", :typy => "sang", :py => "sang"},
294
+ { :zyfh => "ㄙㄠ", :wg => "sao", :mps2 => "sau", :yale => "sau", :typy => "sao", :py => "sao"},
295
+ { :zyfh => "ㄙㄜ", :wg => "se", :mps2 => "se", :yale => "se", :typy => "se", :py => "se"},
296
+ { :zyfh => "ㄙㄟ", :wg => "sei", :mps2 => "sei", :yale => "sei", :typy => "sei", :py => "sei"},
297
+ { :zyfh => "ㄙㄣ", :wg => "sen", :mps2 => "sen", :yale => "sen", :typy => "sen", :py => "sen"},
298
+ { :zyfh => "ㄙㄥ", :wg => "seng", :mps2 => "seng", :yale => "seng", :typy => "seng", :py => "seng"},
299
+ { :zyfh => "ㄕㄚ", :wg => "sha", :mps2 => "sha", :yale => "sha", :typy => "sha", :py => "sha"},
300
+ { :zyfh => "ㄕㄞ", :wg => "shai", :mps2 => "shai", :yale => "shai", :typy => "shai", :py => "shai"},
301
+ { :zyfh => "ㄕㄢ", :wg => "shan", :mps2 => "shan", :yale => "shan", :typy => "shan", :py => "shan"},
302
+ { :zyfh => "ㄕㄤ", :wg => "shang", :mps2 => "shang", :yale => "shang", :typy => "shang", :py => "shang"},
303
+ { :zyfh => "ㄕㄠ", :wg => "shao", :mps2 => "shau", :yale => "shau", :typy => "shao", :py => "shao"},
304
+ { :zyfh => "ㄕㄜ", :wg => "she", :mps2 => "she", :yale => "she", :typy => "she", :py => "she"},
305
+ { :zyfh => "ㄕㄟ", :wg => "shei", :mps2 => "shei", :yale => "shei", :typy => "shei", :py => "shei"},
306
+ { :zyfh => "ㄕㄣ", :wg => "shen", :mps2 => "shen", :yale => "shen", :typy => "shen", :py => "shen"},
307
+ { :zyfh => "ㄕㄥ", :wg => "sheng", :mps2 => "sheng", :yale => "sheng", :typy => "sheng", :py => "sheng"},
308
+ { :zyfh => "ㄕ", :wg => "shih", :mps2 => "shr", :yale => "shr", :typy => "shih", :py => "shi"},
309
+ { :zyfh => "ㄕㄨㄥ", :wg => "shung", :mps2 => "shung", :yale => "shung", :typy => "shong", :py => "shong"},
310
+ { :zyfh => "ㄕㄡ", :wg => "shou", :mps2 => "shou", :yale => "shou", :typy => "shou", :py => "shou"},
311
+ { :zyfh => "ㄕㄨ", :wg => "shu", :mps2 => "shu", :yale => "shu", :typy => "shu", :py => "shu"},
312
+ { :zyfh => "ㄕㄨㄚ", :wg => "shua", :mps2 => "shua", :yale => "shwa", :typy => "shua", :py => "shua"},
313
+ { :zyfh => "ㄕㄨㄞ", :wg => "shuai", :mps2 => "shuai", :yale => "shwai", :typy => "shuai", :py => "shuai"},
314
+ { :zyfh => "ㄕㄨㄢ", :wg => "shuan", :mps2 => "shuan", :yale => "shwan", :typy => "shuan", :py => "shuan"},
315
+ { :zyfh => "ㄕㄨㄤ", :wg => "shuang", :mps2 => "shuang", :yale => "shwang", :typy => "shuang", :py => "shuang"},
316
+ { :zyfh => "ㄕㄨㄟ", :wg => "shui", :mps2 => "shuei", :yale => "shwei", :typy => "shuei", :py => "shui"},
317
+ { :zyfh => "ㄕㄨㄣ", :wg => "shun", :mps2 => "shuen", :yale => "shwun", :typy => "shun", :py => "shun"},
318
+ { :zyfh => "ㄕㄨㄛ", :wg => "shuo", :mps2 => "shuo", :yale => "shwo", :typy => "shuo", :py => "shuo"},
319
+ { :zyfh => "ㄙ", :wg => "ssu", :mps2 => "sz", :yale => "sz", :typy => "sih", :py => "si"},
320
+ { :zyfh => "ㄙㄨㄥ", :wg => "sung", :mps2 => "sung", :yale => "sung", :typy => "song", :py => "song"},
321
+ { :zyfh => "ㄙㄡ", :wg => "sou", :mps2 => "sou", :yale => "sou", :typy => "sou", :py => "sou"},
322
+ { :zyfh => "ㄙㄨ", :wg => "su", :mps2 => "su", :yale => "su", :typy => "su", :py => "su"},
323
+ { :zyfh => "ㄙㄨㄢ", :wg => "suan", :mps2 => "suan", :yale => "swan", :typy => "suan", :py => "suan"},
324
+ { :zyfh => "ㄙㄨㄟ", :wg => "sui", :mps2 => "suei", :yale => "swei", :typy => "suei", :py => "sui"},
325
+ { :zyfh => "ㄙㄨㄣ", :wg => "sun", :mps2 => "suen", :yale => "swen", :typy => "sun", :py => "sun"},
326
+ { :zyfh => "ㄙㄨㄛ", :wg => "so", :mps2 => "suo", :yale => "swo", :typy => "suo", :py => "suo"},
327
+ { :zyfh => "ㄊㄚ", :wg => "t`a", :mps2 => "ta", :yale => "ta", :typy => "ta", :py => "ta"},
328
+ { :zyfh => "ㄊㄞ", :wg => "t`ai", :mps2 => "tai", :yale => "tai", :typy => "tai", :py => "tai"},
329
+ { :zyfh => "ㄊㄢ", :wg => "t`an", :mps2 => "tan", :yale => "tan", :typy => "tan", :py => "tan"},
330
+ { :zyfh => "ㄊㄤ", :wg => "t`ang", :mps2 => "tang", :yale => "tang", :typy => "tang", :py => "tang"},
331
+ { :zyfh => "ㄊㄠ", :wg => "t`ao", :mps2 => "tau", :yale => "tau", :typy => "tao", :py => "tao"},
332
+ { :zyfh => "ㄊㄜ", :wg => "t`e", :mps2 => "te", :yale => "te", :typy => "te", :py => "te"},
333
+ { :zyfh => "ㄊㄥ", :wg => "t`eng", :mps2 => "teng", :yale => "teng", :typy => "teng", :py => "teng"},
334
+ { :zyfh => "ㄊㄧ", :wg => "t`i", :mps2 => "ti", :yale => "ti", :typy => "ti", :py => "ti"},
335
+ { :zyfh => "ㄊㄧㄢ", :wg => "t`ien", :mps2 => "tian", :yale => "tyan", :typy => "tian", :py => "tian"},
336
+ { :zyfh => "ㄊㄧㄠ", :wg => "t`iao", :mps2 => "tiau", :yale => "tyau", :typy => "tiao", :py => "tiao"},
337
+ { :zyfh => "ㄊㄧㄝ", :wg => "t`ieh", :mps2 => "tie", :yale => "tye", :typy => "tie", :py => "tie"},
338
+ { :zyfh => "ㄊㄧㄥ", :wg => "t`ing", :mps2 => "ting", :yale => "ting", :typy => "ting", :py => "ting"},
339
+ { :zyfh => "ㄊㄨㄥ", :wg => "t`ung", :mps2 => "tung", :yale => "tung", :typy => "tong", :py => "tong"},
340
+ { :zyfh => "ㄊㄡ", :wg => "t`ou", :mps2 => "tou", :yale => "tou", :typy => "tou", :py => "tou"},
341
+ { :zyfh => "ㄊㄨ", :wg => "t`u", :mps2 => "tu", :yale => "tu", :typy => "tu", :py => "tu"},
342
+ { :zyfh => "ㄊㄨㄢ", :wg => "t`uan", :mps2 => "tuan", :yale => "twan", :typy => "tuan", :py => "tuan"},
343
+ { :zyfh => "ㄊㄨㄟ", :wg => "t`ui", :mps2 => "tuei", :yale => "twei", :typy => "tuei", :py => "tui"},
344
+ { :zyfh => "ㄊㄨㄣ", :wg => "t`un", :mps2 => "tuen", :yale => "twen", :typy => "tun", :py => "tun"},
345
+ { :zyfh => "ㄊㄨㄛ", :wg => "t`o", :mps2 => "tuo", :yale => "two", :typy => "tuo", :py => "tuo"},
346
+ { :zyfh => "ㄨㄚ", :wg => "wa", :mps2 => "wa", :yale => "wa", :typy => "wa", :py => "wa"},
347
+ { :zyfh => "ㄨㄞ", :wg => "wai", :mps2 => "wai", :yale => "wai", :typy => "wai", :py => "wai"},
348
+ { :zyfh => "ㄨㄢ", :wg => "wan", :mps2 => "wan", :yale => "wan", :typy => "wan", :py => "wan"},
349
+ { :zyfh => "ㄨㄤ", :wg => "wang", :mps2 => "wang", :yale => "wang", :typy => "wang", :py => "wang"},
350
+ { :zyfh => "ㄨㄟ", :wg => "wei", :mps2 => "wei", :yale => "wei", :typy => "wei", :py => "wei"},
351
+ { :zyfh => "ㄨㄣ", :wg => "wen", :mps2 => "wen", :yale => "wen", :typy => "wun", :py => "wen"},
352
+ { :zyfh => "ㄨㄥ", :wg => "weng", :mps2 => "weng", :yale => "weng", :typy => "wong", :py => "weng"},
353
+ { :zyfh => "ㄨㄛ", :wg => "wo", :mps2 => "wo", :yale => "wo", :typy => "wo", :py => "wo"},
354
+ { :zyfh => "ㄨ", :wg => "wu", :mps2 => "wu", :yale => "wu", :typy => "wu", :py => "wu"},
355
+ { :zyfh => "ㄒㄧ", :wg => "hsi", :mps2 => "shi", :yale => "syi", :typy => "si", :py => "xi"},
356
+ { :zyfh => "ㄒㄧㄚ", :wg => "hsia", :mps2 => "shia", :yale => "sya", :typy => "sia", :py => "xia"},
357
+ { :zyfh => "ㄒㄧㄢ", :wg => "hsien", :mps2 => "shian", :yale => "syan", :typy => "sian", :py => "xian"},
358
+ { :zyfh => "ㄒㄧㄤ", :wg => "hsiang", :mps2 => "shiang", :yale => "syang", :typy => "siang", :py => "xiang"},
359
+ { :zyfh => "ㄒㄧㄠ", :wg => "hsiao", :mps2 => "shiau", :yale => "syau", :typy => "siao", :py => "xiao"},
360
+ { :zyfh => "ㄒㄧㄝ", :wg => "hsieh", :mps2 => "shie", :yale => "sye", :typy => "sie", :py => "xie"},
361
+ { :zyfh => "ㄒㄧㄣ", :wg => "hsin", :mps2 => "shin", :yale => "syin", :typy => "sin", :py => "xin"},
362
+ { :zyfh => "ㄒㄧㄥ", :wg => "hsing", :mps2 => "shing", :yale => "sying", :typy => "sing", :py => "xing"},
363
+ { :zyfh => "ㄒㄩㄥ", :wg => "hsiung", :mps2 => "shiung", :yale => "syung", :typy => "syong", :py => "xiong"},
364
+ { :zyfh => "ㄒㄧㄡ", :wg => "hsiu", :mps2 => "shiou", :yale => "syou", :typy => "siou", :py => "xiu"},
365
+ { :zyfh => "ㄒㄩ", :wg => "hsü", :mps2 => "shiu", :yale => "syu", :typy => "syu", :py => "xu"},
366
+ { :zyfh => "ㄒㄩㄢ", :wg => "hsüan", :mps2 => "shiuan", :yale => "sywan", :typy => "syuan", :py => "xuan"},
367
+ { :zyfh => "ㄒㄩㄝ", :wg => "hsüeh", :mps2 => "shiue", :yale => "sywe", :typy => "syue", :py => "xue"},
368
+ { :zyfh => "ㄒㄩㄣ", :wg => "hsün", :mps2 => "shiun", :yale => "syun", :typy => "syun", :py => "xun"},
369
+ { :zyfh => "ㄧㄚ", :wg => "ya", :mps2 => "ya", :yale => "ya", :typy => "ya", :py => "ya"},
370
+ { :zyfh => "ㄧㄢ", :wg => "yan", :mps2 => "yan", :yale => "yan", :typy => "yan", :py => "yan"},
371
+ { :zyfh => "ㄧㄤ", :wg => "yang", :mps2 => "yang", :yale => "yang", :typy => "yang", :py => "yang"},
372
+ { :zyfh => "ㄧㄠ", :wg => "yao", :mps2 => "yau", :yale => "yau", :typy => "yao", :py => "yao"},
373
+ { :zyfh => "ㄧㄝ", :wg => "yeh", :mps2 => "ye", :yale => "ye", :typy => "ye", :py => "ye"},
374
+ { :zyfh => "ㄧ", :wg => "i", :mps2 => "yi", :yale => "yi", :typy => "yi", :py => "yi"},
375
+ { :zyfh => "ㄧㄣ", :wg => "yin", :mps2 => "yin", :yale => "yin", :typy => "yin", :py => "yin"},
376
+ { :zyfh => "ㄧㄥ", :wg => "ying", :mps2 => "ying", :yale => "ying", :typy => "ying", :py => "ying"},
377
+ { :zyfh => "ㄩㄥ", :wg => "yung", :mps2 => "yung", :yale => "yung", :typy => "yong", :py => "yong"},
378
+ { :zyfh => "ㄧㄡ", :wg => "yu", :mps2 => "you", :yale => "you", :typy => "you", :py => "you"},
379
+ { :zyfh => "ㄩ", :wg => "yü", :mps2 => "yu", :yale => "yu", :typy => "yu", :py => "yu"},
380
+ { :zyfh => "ㄩㄢ", :wg => "yüan", :mps2 => "yuan", :yale => "ywan", :typy => "yuan", :py => "yuan"},
381
+ { :zyfh => "ㄩㄝ", :wg => "yüeh", :mps2 => "yue", :yale => "ywe", :typy => "yue", :py => "yue"},
382
+ { :zyfh => "ㄩㄣ", :wg => "yün", :mps2 => "yun", :yale => "yun", :typy => "yun", :py => "yun"},
383
+ { :zyfh => "ㄗㄚ", :wg => "tsa", :mps2 => "tza", :yale => "dza", :typy => "za", :py => "za"},
384
+ { :zyfh => "ㄗㄞ", :wg => "tsai", :mps2 => "tzai", :yale => "dzai", :typy => "zai", :py => "zai"},
385
+ { :zyfh => "ㄗㄢ", :wg => "tsan", :mps2 => "tzan", :yale => "dzan", :typy => "zan", :py => "zan"},
386
+ { :zyfh => "ㄗㄤ", :wg => "tsang", :mps2 => "tzang", :yale => "dzang", :typy => "zang", :py => "zang"},
387
+ { :zyfh => "ㄗㄠ", :wg => "tsao", :mps2 => "tzau", :yale => "dzau", :typy => "zao", :py => "zao"},
388
+ { :zyfh => "ㄗㄜ", :wg => "tse", :mps2 => "tze", :yale => "dze", :typy => "ze", :py => "ze"},
389
+ { :zyfh => "ㄗㄟ", :wg => "tsei", :mps2 => "tzei", :yale => "dzei", :typy => "zei", :py => "zei"},
390
+ { :zyfh => "ㄗㄣ", :wg => "tsen", :mps2 => "tzen", :yale => "dzen", :typy => "zen", :py => "zen"},
391
+ { :zyfh => "ㄗㄥ", :wg => "tseng", :mps2 => "tzeng", :yale => "dzeng", :typy => "zeng", :py => "zeng"},
392
+ { :zyfh => "ㄓㄚ", :wg => "cha", :mps2 => "ja", :yale => "ja", :typy => "jha", :py => "zha"},
393
+ { :zyfh => "ㄓㄞ", :wg => "chai", :mps2 => "jai", :yale => "jai", :typy => "jhai", :py => "zhai"},
394
+ { :zyfh => "ㄓㄢ", :wg => "chan", :mps2 => "jan", :yale => "jan", :typy => "jhan", :py => "zhan"},
395
+ { :zyfh => "ㄓㄤ", :wg => "chang", :mps2 => "jang", :yale => "jang", :typy => "jhang", :py => "zhang"},
396
+ { :zyfh => "ㄓㄠ", :wg => "chao", :mps2 => "jau", :yale => "jau", :typy => "jhao", :py => "zhao"},
397
+ { :zyfh => "ㄓㄜ", :wg => "che", :mps2 => "je", :yale => "je", :typy => "jhe", :py => "zhe"},
398
+ { :zyfh => "ㄓㄟ", :wg => "chei", :mps2 => "jei", :yale => "jei", :typy => "jhei", :py => "zhei"},
399
+ { :zyfh => "ㄓㄣ", :wg => "chen", :mps2 => "jen", :yale => "jen", :typy => "jhen", :py => "zhen"},
400
+ { :zyfh => "ㄓㄥ", :wg => "cheng", :mps2 => "jeng", :yale => "jeng", :typy => "jheng", :py => "zheng"},
401
+ { :zyfh => "ㄓ", :wg => "chih", :mps2 => "jr", :yale => "jr", :typy => "jhih", :py => "zhi"},
402
+ { :zyfh => "ㄓㄨㄥ", :wg => "chung", :mps2 => "jung", :yale => "jung", :typy => "jhong", :py => "zhong"},
403
+ { :zyfh => "ㄓㄡ", :wg => "chou", :mps2 => "jou", :yale => "jou", :typy => "jhou", :py => "zhou"},
404
+ { :zyfh => "ㄓㄨ", :wg => "chu", :mps2 => "ju", :yale => "ju", :typy => "jhu", :py => "zhu"},
405
+ { :zyfh => "ㄓㄨㄚ", :wg => "chua", :mps2 => "jua", :yale => "jwa", :typy => "jhua", :py => "zhua"},
406
+ { :zyfh => "ㄓㄨㄞ", :wg => "chuai", :mps2 => "juai", :yale => "jwai", :typy => "jhuai", :py => "zhuai"},
407
+ { :zyfh => "ㄓㄨㄢ", :wg => "chuan", :mps2 => "juan", :yale => "jwan", :typy => "jhuan", :py => "zhuan"},
408
+ { :zyfh => "ㄓㄨㄤ", :wg => "chuang", :mps2 => "juang", :yale => "jwang", :typy => "jhuang", :py => "zhuang"},
409
+ { :zyfh => "ㄓㄨㄟ", :wg => "chui", :mps2 => "juei", :yale => "jwei", :typy => "jhuei", :py => "zhui"},
410
+ { :zyfh => "ㄓㄨㄣ", :wg => "chun", :mps2 => "juen", :yale => "jwen", :typy => "jhun", :py => "zhun"},
411
+ { :zyfh => "ㄓㄨㄛ", :wg => "cho", :mps2 => "juo", :yale => "jwo", :typy => "jhuo", :py => "zhuo"},
412
+ { :zyfh => "ㄗ", :wg => "tzu", :mps2 => "tz", :yale => "dz", :typy => "zih", :py => "zi"},
413
+ { :zyfh => "ㄗㄨㄥ", :wg => "tsung", :mps2 => "tzung", :yale => "dzung", :typy => "zong", :py => "zong"},
414
+ { :zyfh => "ㄗㄡ", :wg => "tsou", :mps2 => "tzou", :yale => "dzou", :typy => "zou", :py => "zou"},
415
+ { :zyfh => "ㄗㄨ", :wg => "tsu", :mps2 => "tzu", :yale => "dzu", :typy => "zu", :py => "zu"},
416
+ { :zyfh => "ㄗㄨㄢ", :wg => "tsuan", :mps2 => "tzuan", :yale => "dzwan", :typy => "zuan", :py => "zuan"},
417
+ { :zyfh => "ㄗㄨㄟ", :wg => "tsui", :mps2 => "tzuei", :yale => "dzwei", :typy => "zuei", :py => "zui"},
418
+ { :zyfh => "ㄗㄨㄣ", :wg => "tsun", :mps2 => "tzuen", :yale => "dzwen", :typy => "zun", :py => "zun"},
419
+ { :zyfh => "ㄗㄨㄛ", :wg => "tso", :mps2 => "tzuo", :yale => "dzwo", :typy => "zuo", :py => "zuo"},
420
+ { :zyfh => "ㄦ", :wg => 'rh', :mps2 => "r", :yale => "r", :typy => "r", :py => "r"}
421
+ ]
422
+ end
423
+ end
@@ -0,0 +1,50 @@
1
+ module ZhongwenTools
2
+ module Romanization
3
+
4
+ pyn_regexes = {
5
+ :bpm_regex => /(miu|[pm]ou|[bpm](o|e(i|ng?)?|a(ng?|i|o)?|i(e|ng?|a[no])?|u))/,
6
+ :f_regex => /(f(ou?|[ae](ng?|i)?|u))/,
7
+ :dt_regex => /(d(e(i|ng?)|i(a[on]?|u))|[dt](a(i|ng?|o)?|e(i|ng)?|i(a[on]?|e|ng|u)?|o(ng?|u)|u(o|i|an?|n)?))/,
8
+ :nl_regex => /(neng?|[ln](a(i|ng?|o)?|e(i|ng)?|i(ang|a[on]?|e|ng?|u)?|o(ng?|u)|u(o|i|an?|n)?|ve?))/,
9
+ :gkh_regex => /([ghk](a(i|ng?|o)?|e(i|ng?)?|o(u|ng)|u(a(i|ng?)?|i|n|o)?))/,
10
+ :zczhch_regex => /(z[h]?ei|[cz]hua(i|ng?)?|[cz][h]?(a(i|ng?|o)?|en?g?|o(u|ng)?|u(a?n|o|i)?))/,
11
+ :ssh_regex => /(song|shua(i|ng?)?|shei|s[h]?(a(i|ng?|o)?|en?g?|ou|u(a?n|o|i)?))/,
12
+ :r_regex => /(r([ae]ng?|i|e|ao|ou|ong|u[oin]|ua?n?))/,
13
+ :jqx_regex => /([jqx](i(a(o|ng?)?|[eu]|ong|ng?)?|u(e|a?n)?))/,
14
+ :aw_regex => /(wu|w?(a(i|o|ng?)?|ou?|e(i|ng?)?))/,
15
+ :y_regex => /y(a(o|ng?)?|e|in?g?|o(u|ng)?|u(e|a?n)?)/
16
+ }
17
+
18
+ PINYIN_REGEX = /(#{pyn_regexes.values.join('|')})([1-5])?([\s\-]+)?/
19
+ #bpm_regex}|#{f_regex}|#{dt_regex}|#{nl_regex}|#{gkh_regex}|#{zczhch_regex}|#{ssh_regex}|#{r_regex}|#{jqx_regex}|#{aw_regex}|#{y_regex})([1-5])?([\s\-]+)?/
20
+
21
+ # Public: checks if a string is pinyin.
22
+ #
23
+ # Examples
24
+ # pyn?('pin1-yin1')
25
+ # # => true
26
+ #
27
+ # Returns Boolean.
28
+ def pyn?(str = nil)
29
+ str ||= self
30
+
31
+ str.gsub(PINYIN_REGEX,'') == ''
32
+ end
33
+
34
+ # Public: checks if a string is wade-giles.
35
+ #
36
+ # Examples
37
+ # wg?('pin1-yin1')
38
+ # # => false
39
+ # There are some situations where wg == pyn, but there's no way to differentiate the two.
40
+ def wg?(str = nil)
41
+ #it shouldn't be pyn, but it should be able to conver to pyn
42
+ str ||= self
43
+ #easy ones.. is it py? pyn? zyfh? gyrm?
44
+ #harder ones: is it typy, msp2, yale, wg
45
+ wg = str._convert_romanization(str, :wg, :pyn)
46
+
47
+ wg != pyn && wg.gsub(/[1-5]/,'')
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,165 @@
1
+ #encoding: utf-8
2
+ #This table works for pyn -> pinyin conversion, but it introduces
3
+ #mistakes when converting pinyin to pyn. In practice, pinyin can't be
4
+ #converted to pyn properly unless it's properly formatted.
5
+ module ZhongwenTools
6
+ module Romanization
7
+ PYN_PY = {
8
+ "A1" => "Ā",
9
+ "A2" => "Á",
10
+ "A3" => "Ǎ",
11
+ "A4" => "À",
12
+ "A5" => "A",
13
+ "Ai1" => "Āi",
14
+ "Ai2" => "Ái",
15
+ "Ai3" => "Ǎi",
16
+ "Ai4" => "Ài",
17
+ "Ai5" => "Ai",
18
+ "Ao1" => "Ā",
19
+ "Ao2" => "Áo",
20
+ "Ao3" => "Ǎo",
21
+ "Ao4" => "Ào",
22
+ "Ao5" => "Ao",
23
+ "a1" => "ā",
24
+ "a2" => "á",
25
+ "a3" => "ǎ",
26
+ "a4" => "à",
27
+ "a5" => "a",
28
+ "e1" => "ē",
29
+ "e2" => "é",
30
+ "e3" => "ě",
31
+ "e4" => "è",
32
+ "e5" => "e",
33
+ "i1" => "ī",
34
+ "i2" => "í",
35
+ "i3" => "ǐ",
36
+ "i4" => "ì",
37
+ "i5" => "i",
38
+ "O1" => "Ō",
39
+ "O2" => "Ó",
40
+ "O3" => "Ǒ",
41
+ "O4" => "Ò",
42
+ "O5" => "O",
43
+ "o1" => "ō",
44
+ "o2" => "ó",
45
+ "o3" => "ǒ",
46
+ "o4" => "ò",
47
+ "o5" => "o",
48
+ "u1" => "ū",
49
+ "u2" => "ú",
50
+ "u3" => "ǔ",
51
+ "u4" => "ù",
52
+ "u5" => "u",
53
+ "ai1" => "āi",
54
+ "ai2" => "ái",
55
+ "ai3" => "ǎi",
56
+ "ai4" => "ài",
57
+ "ai5" => "ai",
58
+ "ao1" => "āo",
59
+ "ao2" => "áo",
60
+ "ao3" => "ǎo",
61
+ "ao4" => "ào",
62
+ "ao5" => "ao",
63
+ "E1" => "Ē",
64
+ "E2" => "É",
65
+ "E3" => "Ě",
66
+ "E4" => "È",
67
+ "E5" => "E",
68
+ "Ei1" => "Ēi",
69
+ "Ei2" => "Éi",
70
+ "Ei3" => "Ěi",
71
+ "Ei4" => "Èi",
72
+ "Ei5" => "Ei",
73
+ "ei1" => "ēi",
74
+ "ei2" => "éi",
75
+ "ei3" => "ěi",
76
+ "ei4" => "èi",
77
+ "ei5" => "ei",
78
+ "ia1" => "iā",
79
+ "ia2" => "iá",
80
+ "ia3" => "iǎ",
81
+ "ia4" => "ià",
82
+ "ia5" => "ia",
83
+ "iao1" => "iāo",
84
+ "iao2" => "iáo",
85
+ "iao3" => "iǎo",
86
+ "iao4" => "iào",
87
+ "iao5" => "iao",
88
+ "ie1" => "iē",
89
+ "ie2" => "ié",
90
+ "ie3" => "iě",
91
+ "ie4" => "iè",
92
+ "ie5" => "ie",
93
+ "io1" => "iō",
94
+ "io2" => "ió",
95
+ "io3" => "iǒ",
96
+ "io4" => "iò",
97
+ "io5" => "io",
98
+ "iu1" => "iū",
99
+ "iu2" => "iú",
100
+ "iu3" => "iǔ",
101
+ "iu4" => "iù",
102
+ "iu5" => "iu",
103
+ "Ou1" => "Ōu",
104
+ "Ou2" => "Óu",
105
+ "Ou3" => "Ǒu",
106
+ "Ou4" => "Òu",
107
+ "Ou5" => "Ou",
108
+ "ou1" => "ōu",
109
+ "ou2" => "óu",
110
+ "ou3" => "ǒu",
111
+ "ou4" => "òu",
112
+ "ou5" => "ou",
113
+ "ua1" => "uā",
114
+ "ua2" => "uá",
115
+ "ua3" => "uǎ",
116
+ "ua4" => "uà",
117
+ "ua5" => "ua",
118
+ "uai1" => "uāi",
119
+ "uai2" => "uái",
120
+ "uai3" => "uǎi",
121
+ "uai4" => "uài",
122
+ "uai5" => "uai",
123
+ "ue1" => "uē",
124
+ "ue2" => "ué",
125
+ "ue3" => "uě",
126
+ "ue4" => "uè",
127
+ "ue5" => "ue",
128
+ "ui1" => "uī",
129
+ "ui2" => "uí",
130
+ "ui3" => "uǐ",
131
+ "ui4" => "uì",
132
+ "ui5" => "ui",
133
+ "uo1" => "uō",
134
+ "uo2" => "uó",
135
+ "uo3" => "uǒ",
136
+ "uo4" => "uò",
137
+ "uo5" => "uo",
138
+ "v1" => "ǖ",
139
+ "v2" => "ǘ",
140
+ "v3" => "ǚ",
141
+ "v4" => "ǜ",
142
+ "v5" => "ü",
143
+ "ve1" => "üē",
144
+ "ve2" => "üé",
145
+ "ve3" => "üě",
146
+ "ve4" => "üè",
147
+ "ve5" => "üe",
148
+ 'm1' => 'm̄',#using combining diacritical marks
149
+ 'm2' => "ḿ",
150
+ 'm3' => 'm̌',#using combining diacritical marks
151
+ 'm4' => "m̀",
152
+ 'm5' => 'm',
153
+ 'n1' => 'ēn',
154
+ 'n2' => "én",
155
+ 'n3' => "ěn",
156
+ 'n4' => "èn",
157
+ 'n5' => 'en',
158
+ 'ng1' => 'ēng',
159
+ 'ng2' => "éng",
160
+ 'ng3' => "ěng",
161
+ 'ng4' => "èng",
162
+ 'ng5' => 'eng'
163
+ }
164
+ end
165
+ end
@@ -1,3 +1,3 @@
1
1
  module ZhongwenTools
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.1"
3
3
  end
data/test/test_helper.rb CHANGED
@@ -18,5 +18,9 @@ if RUBY_VERSION < '1.9'
18
18
  def refute(statement, message = '')
19
19
  assert !statement, message
20
20
  end
21
+
22
+ def skip
23
+ return
24
+ end
21
25
  end
22
26
  end
@@ -0,0 +1,75 @@
1
+ #encoding: utf-8
2
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
3
+ require './test/test_helper'
4
+ require 'zhongwen_tools/string'
5
+ require 'zhongwen_tools/romanization'
6
+
7
+ class String
8
+ include ZhongwenTools::Romanization
9
+ end
10
+
11
+ class TestRomanization < Test::Unit::TestCase
12
+
13
+ def test_pinyin
14
+ assert_equal 'Zhōng wén','Zhong1 wen2'.to_pinyin
15
+ assert_equal 'Zhōngwén', 'Zhong1-wen2'.to_pinyin
16
+ #binding.pry
17
+ assert_equal "Tiān'ānmén",'Tian1an1men2'.to_pinyin
18
+
19
+ #skip
20
+ #mzd = "Mao Tse-tung"
21
+ #assert_equal "Mao Zedong", mzd.to_pinyin(:wg)
22
+ end
23
+
24
+ #def test_pyn
25
+ #skip
26
+ #assert_equal 'ni3 hao3', @py.to_pyn
27
+ #end
28
+
29
+ def test_zhuyin_fuhao
30
+ assert_equal 'ㄋㄧ3 ㄏㄠ3', @str.to_bpmf
31
+ assert_equal 'ㄋㄧ3 ㄏㄠ3', @str.to_bopomofo
32
+ assert_equal 'ㄋㄧ3 ㄏㄠ3', @str.to_zhuyin
33
+ assert_equal 'ㄇㄠ2 ㄗㄜ2 ㄉㄨㄥ1', @mzd.to_zhuyin_fuhao
34
+ #skip
35
+ #assert_equal 'ㄇㄠ2 ㄗㄜ2ㄉㄨㄥ1', @mzd2.to_zhuyin_fuhao
36
+ end
37
+
38
+ def test_wade_giles
39
+ assert_equal 'kuo1', 'guo1'.to_wg
40
+ assert_equal 'chung1 kuo2', 'zhong1 guo2'.to_wg
41
+ #assert_equal 'Mao2 Tse2 tung1', @mzd.to_wg
42
+ #assert_equal 'Mao2 Tse2 tung1', @mzd.to_wade_giles
43
+ end
44
+
45
+ #def test_mspy2
46
+ #skip
47
+ #assert_equal '', @str.to_mspy2
48
+ #end
49
+
50
+ #def test_typy
51
+ #skip
52
+ #assert_equal '', @str.to_typy
53
+ #assert_equal '', @str.to_tongyong
54
+ #end
55
+
56
+ def test_yale
57
+ assert_equal 'ni3 hau3', @str.to_yale
58
+ end
59
+
60
+ def test_romanization?
61
+ skip
62
+ end
63
+
64
+ def test_detect
65
+ assert @str.pyn?
66
+ refute @py.pyn?
67
+ end
68
+
69
+ def setup
70
+ @str = 'ni3 hao3'
71
+ @mzd = 'Mao2 Ze2 dong1'
72
+ @mzd2 = 'Mao2 Ze2-dong1'
73
+ @py = 'nǐ hǎo'
74
+ end
75
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zhongwen_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Daniels
@@ -82,6 +82,10 @@ files:
82
82
  - lib/zhongwen_tools.rb
83
83
  - lib/zhongwen_tools/integer.rb
84
84
  - lib/zhongwen_tools/numbers.rb
85
+ - lib/zhongwen_tools/romanization.rb
86
+ - lib/zhongwen_tools/romanization/conversion_table.rb
87
+ - lib/zhongwen_tools/romanization/detect.rb
88
+ - lib/zhongwen_tools/romanization/pyn_to_py.rb
85
89
  - lib/zhongwen_tools/string.rb
86
90
  - lib/zhongwen_tools/string/fullwidth.rb
87
91
  - lib/zhongwen_tools/string/ruby18.rb