fork download
  1. #!/usr/bin/env python
  2. #encoding:UTF-8
  3. import sys
  4. """
  5. Сын учится читать, у него хорошо получается читать по слогам,
  6. но читать тексты с целыми словами получается пока плохо.
  7. Поиск книг типа "читаем по слогам" выдал где то штук 10 разных, мало :(.
  8. Так появилась идея написать скриптик для разбивки текста на слоги.
  9. Написал за вечер для того, что бы разбивать сказки для чтения по слогам :)
  10. 01.06.2013
  11. Sergey Poterianski
  12. s@poterianski.ru
  13. """
  14.  
  15. """
  16. объявляем словарики для согласных, глухих, гласных
  17. """
  18. consonants = ['б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к',
  19. 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ']
  20. thud = ['к', 'п', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ']
  21. vowels = ['а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е']
  22.  
  23. """
  24. usage:
  25. pbs.py [filename] - файлик с текстом для разбивки на слоги
  26. результат выводится в консоль
  27. """
  28. def main():
  29. filename = sys.argv[1]
  30. file = open(filename, 'r')
  31. for line in file:
  32. split2words(line)
  33.  
  34. """
  35. Перебирает строки
  36. """
  37. def split2words(line):
  38. i = 0
  39. result = ''
  40. word = ''
  41. while i < len(line):
  42. c = line[i]
  43. if isconsonant(c) or isvowel(c) \
  44. or c == 'ь' or c == 'Ь' or c == 'ъ' or c == 'Ъ':
  45. word += c
  46. else:
  47. if len(word) > 0:
  48. if len(word) <= 2:
  49. result += word
  50. else:
  51. result += split2syllables(word)
  52. word = ''
  53. result += c
  54. i += 1
  55. print((result.strip()))
  56.  
  57. """
  58. Делит слово на слоги
  59. """
  60. def split2syllables(word):
  61. splited = ''
  62. slog = ''
  63. i = 0
  64. #v = False
  65. scount = vowelcount(word)
  66. if scount == 1:
  67. return word
  68.  
  69. while i < len(word):
  70. c = word[i]
  71. #добавляем букву в слог
  72. slog += c
  73. # если гласная
  74. if isvowel(c):
  75. # смотрим что идет после
  76. # есть буквы
  77. if i+1 < len(word):
  78. c1 = word[i+1]
  79. # если согласная
  80. if isconsonant(c1):
  81. # если последняя в слове - добавляем в слог и выходим
  82. if i+1 >= len(word) - 1:
  83. slog += word[i+1]
  84. i+=1
  85. else:
  86. # не последняя,запоминем проверяем что идет после нее
  87. c2 = word[i+2]
  88. # если идет Й и следом согласный - добавляем в слог
  89. if (c1 == 'й' or c1 == 'Й') and isconsonant(c2):
  90. slog += c1
  91. i += 1
  92. # если после звонкой не парной идет глухой согласный - добавляем в слог
  93. elif (c1 in ['м','н','р','л'] or c1 in ['М','Н','Р','Л']) and isthud(c2):
  94. slog += c1
  95. i += 1
  96. elif i+2 >= len(word) - 1 and (c2 == 'ь' or c2 == 'Ь' or c2 == 'ъ' or c2 == 'Ъ'):
  97. # заканчивается на мягкий
  98. i+=2
  99. slog += c1 + c2
  100. splited += slog
  101. if i+1 < len(word):
  102. splited += '-'
  103. slog = ''
  104. i += 1
  105. return splited
  106. """
  107. считает гласные
  108. """
  109. def vowelcount(word):
  110. cnt = 0
  111. for c in word:
  112. if(isvowel(c)):
  113. cnt += 1
  114. """
  115. Если согласный
  116. """
  117. def isconsonant(char):
  118. x = char.lower()[0]
  119. for c in consonants:
  120. if c == x:
  121. return True
  122. """
  123. Если глухой
  124. """
  125. def isthud(char):
  126. x = char.lower()[0]
  127. for c in thud:
  128. if c == x:
  129. return True
  130. """
  131. Если гласный
  132. """
  133. def isvowel(char):
  134. x = char.lower()[0]
  135. for c in vowels:
  136. if c == x:
  137. return True
  138. return False
  139.  
  140.  
  141. if __name__ == '__main__':
  142. main()
Runtime error #stdin #stdout #stderr 0.02s 27720KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 142, in <module>
  File "./prog.py", line 29, in main
IndexError: list index out of range