Skip to content

Commit 8d852a2

Browse files
committed
Merge pull request #26 from MingStar/master
修复ju, qu, xu, yu, yi和wu的韵母
2 parents 402f69a + 6403521 commit 8d852a2

2 files changed

Lines changed: 50 additions & 5 deletions

File tree

pypinyin/__init__.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,12 @@ def initial(pinyin):
196196
return i
197197
return ''
198198

199+
U_FINALS_EXCEPTIONS_MAP = {
200+
u'ū': u'ǖ',
201+
u'ú': u'ǘ',
202+
u'ǔ': u'ǚ',
203+
u'ù': u'ǜ',
204+
}
199205

200206
def final(pinyin):
201207
"""获取单个拼音中的韵母.
@@ -207,9 +213,29 @@ def final(pinyin):
207213
"""
208214
initial_ = initial(pinyin) or None
209215
if not initial_:
210-
return pinyin
216+
return no_initial_final(pinyin)
217+
# 特例 j/q/x
218+
m = re.match(u'^(j|q|x)(ū|ú|ǔ|ù)$', pinyin)
219+
if m:
220+
return (U_FINALS_EXCEPTIONS_MAP[m.group(2)])
221+
pinyin = re.sub('^(j|q|x)u(\d?)$', r'\1v\2', pinyin)
211222
return ''.join(pinyin.split(initial_, 1))
212223

224+
def no_initial_final(pinyin):
225+
# 特例 y/w
226+
if pinyin.startswith('y'):
227+
if pinyin.startswith('yu'):
228+
pinyin = 'v' + pinyin[2:]
229+
elif pinyin.startswith('yi'):
230+
pinyin = pinyin[1:]
231+
else:
232+
pinyin = 'i' + pinyin[1:]
233+
if pinyin.startswith('w'):
234+
if pinyin.startswith('wu'):
235+
pinyin = pinyin[1:]
236+
else:
237+
pinyin = 'u' + pinyin[1:]
238+
return pinyin
213239

214240
def toFixed(pinyin, style):
215241
"""根据拼音风格格式化带声调的拼音.

tests/test_pinyin.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,33 @@ def test_simple_seg():
222222
],
223223
# 误把 yu 放到声母列表了
224224
['鱼', {'style': TONE2}, ['yu2']],
225-
['鱼', {'style': FINALS}, ['yu']],
225+
['鱼', {'style': FINALS}, ['v']],
226226
['雨', {'style': TONE2}, ['yu3']],
227-
['雨', {'style': FINALS}, ['yu']],
227+
['雨', {'style': FINALS}, ['v']],
228228
['元', {'style': TONE2}, ['yua2n']],
229-
['元', {'style': FINALS}, ['yuan']],
230-
# y, w 也不是拼音
229+
['元', {'style': FINALS}, ['van']],
230+
# y, w 也不是拼音, yu的韵母是v, yi的韵母是i, wu的韵母是u
231231
['呀', {'style': INITIALS}, ['']],
232+
['呀', {'style': TONE2}, ['ya1']],
233+
['呀', {'style': FINALS}, ['ia']],
232234
['无', {'style': INITIALS}, ['']],
235+
['无', {'style': TONE2}, ['wu2']],
236+
['无', {'style': FINALS}, ['u']],
237+
['衣', {'style': TONE2}, ['yi1']],
238+
['衣', {'style': FINALS}, ['i']],
239+
['万', {'style': TONE2}, ['wa4n']],
240+
['万', {'style': FINALS}, ['uan']],
241+
# ju, qu, xu 的韵母应该是 v
242+
['具', {'style': FINALS_TONE}, ['ǜ']],
243+
['具', {'style': FINALS_TONE2}, ['v4']],
244+
['具', {'style': FINALS}, ['v']],
245+
['取', {'style': FINALS_TONE}, ['ǚ']],
246+
['取', {'style': FINALS_TONE2}, ['v3']],
247+
['取', {'style': FINALS}, ['v']],
248+
['徐', {'style': FINALS_TONE}, ['ǘ']],
249+
['徐', {'style': FINALS_TONE2}, ['v2']],
250+
['徐', {'style': FINALS}, ['v']],
251+
233252
]
234253

235254

0 commit comments

Comments
 (0)