_constants.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import re
  4. from pypinyin import phonetic_symbol
  5. # 声母表
  6. _INITIALS = [
  7. 'b',
  8. 'p',
  9. 'm',
  10. 'f',
  11. 'd',
  12. 't',
  13. 'n',
  14. 'l',
  15. 'g',
  16. 'k',
  17. 'h',
  18. 'j',
  19. 'q',
  20. 'x',
  21. 'zh',
  22. 'ch',
  23. 'sh',
  24. 'r',
  25. 'z',
  26. 'c',
  27. 's',
  28. ]
  29. # 声母表, 把 y, w 也当作声母
  30. _INITIALS_NOT_STRICT = _INITIALS + ['y', 'w']
  31. # 韵母表
  32. _FINALS = [
  33. 'i',
  34. 'u',
  35. 'ü',
  36. 'a',
  37. 'ia',
  38. 'ua',
  39. 'o',
  40. 'uo',
  41. 'e',
  42. 'ie',
  43. 'üe',
  44. 'ai',
  45. 'uai',
  46. 'ei',
  47. 'uei',
  48. 'ao',
  49. 'iao',
  50. 'ou',
  51. 'iou',
  52. 'an',
  53. 'ian',
  54. 'uan',
  55. 'üan',
  56. 'en',
  57. 'in',
  58. 'uen',
  59. 'ün',
  60. 'ang',
  61. 'iang',
  62. 'uang',
  63. 'eng',
  64. 'ing',
  65. 'ueng',
  66. 'ong',
  67. 'iong',
  68. 'er',
  69. 'ê',
  70. ]
  71. # 带声调字符与数字表示声调的对应关系
  72. PHONETIC_SYMBOL_DICT = phonetic_symbol.phonetic_symbol.copy()
  73. PHONETIC_SYMBOL_DICT_KEY_LENGTH_NOT_ONE = dict(
  74. (k, v)
  75. for k, v in PHONETIC_SYMBOL_DICT.items()
  76. if len(k) > 1
  77. )
  78. # 匹配带声调字符的正则表达式
  79. RE_PHONETIC_SYMBOL = re.compile(
  80. r'[{0}]'.format(
  81. re.escape(''.join(x for x in PHONETIC_SYMBOL_DICT if len(x) == 1))
  82. )
  83. )
  84. # 匹配使用数字标识声调的字符的正则表达式
  85. RE_TONE2 = re.compile(r'([aeoiuvnmêü])([1-5])$')
  86. # 匹配 TONE2 中标识韵母声调的正则表达式
  87. RE_TONE3 = re.compile(r'^([a-zêü]+)([1-5])([a-zêü]*)$')
  88. # 匹配单个数字
  89. RE_NUMBER = re.compile(r'\d')