Разбить слова в списке по слогам

Рейтинг: 1Ответов: 1Опубликовано: 17.07.2023

Подскажите, как решить? Гугл выдал одно решение, но оно какое-то громоздкое.

Задание.
Имеется файл input.txt, каждая строка которого содержит одно слово.
Разработайте программу, которая читает слова из этого файла, разделяет каждое слово на слоги и сохраняет результат в выходной файл по такому же принципу: одна строка -- одно слово. Пример:

input.txt

программирование
бриллиант
балерина

output.txt

про-грам-ми-ро-ва-ни-е
брил-ли-ант
ба-ле-ри-на

Ответы

▲ 0

С использованием библиотек

import pyphen


def split_into_syllables(word):
    dic = pyphen.Pyphen(lang='ru')
    syllables = dic.inserted(word).split('-')
    return syllables


word = "автоэлектростеклоподъемники"
syllables = split_into_syllables(word)
print(syllables)

Вывод:

['ав', 'то', 'элек', 'тро', 'стек', 'ло', 'подъ', 'ем', 'ни', 'ки']

Без использования библиотек

def split_into_syllables(word):
    vowels = ['а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я']  # список гласных букв
    syllables = []  # список слогов
    current_syllable = ''  # текущий слог

    for letter in word:
        if letter.lower() in vowels:  # если буква - гласная
            current_syllable += letter  # добавляем ее к текущему слогу
            if len(current_syllable) == 2:  # если текущий слог состоит из двух букв
                syllables.append(current_syllable)  # добавляем его в список слогов
                current_syllable = ''  # обнуляем текущий слог
        else:  # если буква - согласная
            current_syllable += letter  # добавляем ее к текущему слогу

    if current_syllable:  # если остался непустой текущий слог
        syllables.append(current_syllable)  # добавляем его в список слогов

    return syllables


word = "машина"
syllables = split_into_syllables(word)
print(syllables)

Вывод:

['ма', 'ши', 'на']

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