Advertisement
Guest User

rbs.py

a guest
Apr 5th, 2017
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.76 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #encoding:UTF-8
  3. import sys
  4. """
  5. Сын учится читать, у него хорошо получается читать по слогам,
  6. но читать тексты с целыми словами получается пока плохо.
  7. Поиск книг типа "читаем по слогам" выдал где то штук 10 разных, мало :(.
  8.  
  9. Так появилась идея написать скриптик для разбивки текста на слоги.
  10. Написал за вечер для того, что бы разбивать сказки для чтения по слогам :)
  11.  
  12. 01.06.2013
  13. Sergey Poterianski
  14. """
  15.  
  16. """
  17. объявляем словарики для согласных, глухих, гласных
  18. """
  19. consonants = [u'б', u'в', u'г', u'д', u'ж', u'з', u'й', u'к',
  20. u'л', u'м', u'н', u'п', u'р', u'с', u'т', u'ф', u'х', u'ц', u'ч', u'ш', u'щ']
  21. thud = [u'к', u'п', u'с', u'т', u'ф', u'х', u'ц', u'ч', u'ш', u'щ']
  22. vowels = [u'а', u'у', u'о', u'ы', u'и', u'э', u'я', u'ю', u'ё', u'е']
  23.  
  24. """
  25. usage:
  26.    pbs.py [filename] - файлик с текстом для разбивки на слоги
  27.    результат выводится в консоль
  28. """
  29. def main():
  30.     filename = sys.argv[1]
  31.     file = open(filename, 'r')
  32.     for line in file:
  33. #        split2words(line.decode(encoding='UTF-8',errors='strict')) для питона 3.6
  34.         split2words(line)
  35. """
  36. Перебирает строки
  37. """
  38. def split2words(line):
  39.     i = 0
  40.     result = ''
  41.     word = ''
  42.     while i < len(line):
  43.         c = line[i]
  44.         if isconsonant(c) or isvowel(c) \
  45.         or c == u'ь' or c == u'Ь' or c == u'ъ' or c == u'Ъ':
  46.             word += c
  47.         else:
  48.             if len(word) > 0:
  49.                 if len(word) <= 2:
  50.                     result += word
  51.                 else:
  52.                     result += split2syllables(word)
  53.                 word = ''
  54.             result += c
  55.         i += 1
  56.     print(result.strip())
  57.  
  58. """
  59. Делит слово на слоги
  60. """
  61. def split2syllables(word):
  62.     splited = ''
  63.     slog = ''
  64.     i =  0
  65.     #v = False
  66.     scount = vowelcount(word)
  67.     if scount == 1:
  68.         return word
  69.  
  70.     while i < len(word):
  71.         c = word[i]
  72.         #добавляем букву в слог
  73.         slog += c
  74.         # если гласная
  75.         if isvowel(c):
  76.             # смотрим что идет после
  77.             # есть буквы
  78.             if i+1 < len(word):
  79.                 c1 = word[i+1]
  80.                 # если согласная
  81.                 if isconsonant(c1):
  82.                     # если последняя в слове - добавляем в слог и выходим
  83.                     if i+1 >= len(word) - 1:
  84.                         slog += word[i+1]
  85.                         i+=1
  86.                     else:
  87.                         # не последняя,запоминем проверяем что идет после нее
  88.                         c2 = word[i+2]
  89.                         # если идет Й и следом согласный - добавляем в слог
  90.                         if (c1 == u'й' or c1 == u'Й') and isconsonant(c2):
  91.                             slog += c1
  92.                             i += 1
  93.                         # если после звонкой не парной идет глухой согласный - добавляем в слог
  94.                         elif (c1 in [u'м',u'н',u'р',u'л'] or c1 in [u'М',u'Н',u'Р',u'Л']) and isthud(c2):
  95.                             slog += c1
  96.                             i += 1
  97.                         elif i+2 >= len(word) - 1 and (c2 == u'ь' or c2 == u'Ь' or c2 == u'ъ' or c2 == u'Ъ'):
  98.                             # заканчивается на мягкий
  99.                             i+=2
  100.                             slog += c1 + c2
  101.             splited += slog
  102.             if i+1 < len(word):
  103.                 splited += '-'
  104.             slog = ''
  105.         i += 1
  106.     return splited
  107. """
  108. считает гласные
  109. """
  110. def vowelcount(word):
  111.     cnt = 0
  112.     for c in word:
  113.         if(isvowel(c)):
  114.             cnt += 1
  115. """
  116. Если согласный
  117. """
  118. def isconsonant(char):
  119.     x = char.lower()[0]
  120.     for c in consonants:
  121.         if c == x:
  122.             return True
  123. """
  124. Если глухой
  125. """
  126. def isthud(char):
  127.     x = char.lower()[0]
  128.     for c in thud:
  129.         if c == x:
  130.             return True
  131. """
  132. Если гласный
  133. """
  134. def isvowel(char):
  135.     x = char.lower()[0]
  136.     for c in vowels:
  137.         if c == x:
  138.             return True
  139.     return False
  140.  
  141.  
  142. if __name__ == '__main__':
  143.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement