Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Расстановка переносов в русских словах

#python #строки #текст


Недавно пробегала тема (автор ее почему-то удалил потом) с просьбой помочь в реализации
расстановки переносов в русских словах на Python. Условие данное им было таким:  

а) две идущие подряд гласные можно разделить, если первой из них предшествует согласная,
а за второй идет хотя бы одна буква (буква й при этом рассматривается с предшествующей
гласной как единое целое);
б) две идущие подряд согласные можно разделить, если первой из них предшествует гласная,
а в той части слова, которая идет за второй согласной, имеется хотя бы одна гласная
(буквы ь,ъ при этом рассматриваются как единое целое с предшествующей согласной);
в) если правила, указанные в пунктах (а) и (б) применить невозможно, то следует
попытаться разбить слово так, чтобы первая часть содержала более чем одну букву и
оканчивалась на гласную, а вторая содержала хотя бы одну гласную.  

Не уверен, что полностью реализовал выполнение всех условий, поэтому если будут предложения
по оптимизации, с удовольствием приму.  

Если работа скрипта устроит, пользуйтесь на здоровье, если кому нужно. Код в ответе.  
    


Ответы

Ответ 1



#!/usr/bin/env python3 # -*- encode: utf-8 -*- def w_wrap(word: str) -> str: def is_vow(let: str) -> bool: _vowels = ['а', 'о', 'и', 'е', 'ё', 'э', 'ы', 'у', 'ю', 'я', 'А', 'О', 'И', 'Е', 'Ё', 'Э', 'Ы', 'У', 'Ю', 'Я'] return let in _vowels def is_cons(let: str) -> bool: _consonants = ['б', 'в', 'г', 'д', 'ж', 'з', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'щ', 'ш', 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ'] return let in _consonants def vow_inds(wrd: str): return [i for i in range(len(wrd) - 2) if is_vow(wrd[i])] vow_indices = vow_inds(word) if vow_indices and vow_indices[0] + 2 < len(word): for ind in vow_indices: sep = '-' ind += 1 if (is_cons(word[ind]) or word[ind] in 'йЙ') and not is_vow(word[ind + 1]): ind += 1 if len(word[:ind]) == 1: # не даем отделять единичные гласные sep = '' if len(word) > 3 and word[ind] in 'ьЬЪъ': if word[-1] in 'ьЬЪъ': sep = '' ind += 1 return word[:ind] + sep + w_wrap(word[ind:]) return word t_word = input('Введите слово: ') print('Варианты расстановки переносов слова "{}" - [ {} ]'.format(t_word, w_wrap(t_word))) Пример: print(w_wrap('собака')) # со-ба-ка print(w_wrap('обезьяна')) # обезь-яна print(w_wrap('программирование')) # прог-рам-ми-ро-ва-ние

Комментариев нет:

Отправить комментарий