uv.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. class V2UMixin(object):
  4. """无声调相关拼音风格下的结果使用 ``ü`` 代替原来的 ``v``
  5. 使用方法::
  6. from pypinyin import lazy_pinyin, Style
  7. from pypinyin.contrib.uv import V2UMixin
  8. from pypinyin.converter import DefaultConverter
  9. from pypinyin.core import Pinyin
  10. # 原来的结果中会使用 ``v`` 表示 ``ü``
  11. print(lazy_pinyin('战略'))
  12. # 输出:['zhan', 'lve']
  13. class MyConverter(V2UMixin, DefaultConverter):
  14. pass
  15. my_pinyin = Pinyin(MyConverter())
  16. pinyin = my_pinyin.pinyin
  17. lazy_pinyin = my_pinyin.lazy_pinyin
  18. # 新的结果中使用 ``ü`` 代替原来的 ``v``
  19. print(lazy_pinyin('战略'))
  20. # 输出: ['zhan', 'lüe']
  21. print(pinyin('战略', style=Style.NORMAL))
  22. # 输出:[['zhan'], ['lüe']]
  23. """
  24. def post_convert_style(self, han, orig_pinyin, converted_pinyin,
  25. style, strict, **kwargs):
  26. pre_data = super(V2UMixin, self).post_convert_style(
  27. han, orig_pinyin, converted_pinyin, style, strict, **kwargs)
  28. if pre_data is not None:
  29. converted_pinyin = pre_data
  30. return converted_pinyin.replace('v', 'ü')