сортировка фраз по частоте гласных букв

алгоритм на питоне который группирует фразы текста в нескольких файлах txt
по разным признакам - например по числу гласных букв
то есть выводит группы по 10 фраз в которых частота гласных букв достаточно близка





import os
from collections import defaultdict

def count_vowels(phrase):
    vowels = 'аеёиоуыэюяАЕЁИОУЫЭЮЯ'
    return sum(1 for char in phrase if char in vowels)

def group_phrases_by_vowel_frequency(file_paths):
    phrases = []
   
    # Чтение файлов и сбор фраз
    for file_path in file_paths:
        with open(file_path, 'r', encoding='utf-8') as file:
            text = file.read()
            phrases.extend(text.split('.'))  # Разделяем текст на фразы по точкам

    # Убираем лишние пробелы и фильтруем пустые фразы
    phrases = [phrase.strip() for phrase in phrases if phrase.strip()]

    # Словарь для группировки фраз
    groups = defaultdict(list)

    # Подсчет гласных и группировка
    for phrase in phrases:
        vowel_count = count_vowels(phrase)
        groups[vowel_count].append(phrase)

    # Формирование итогового результата
    result = []
    for vowel_count, group in groups.items():
        # Разделяем на подгруппы по 10 фраз
        for i in range(0, len(group), 10):
            result.append(group[i:i + 10])

    return result

# Пример использования
file_paths = ['file1.txt', 'file2.txt']  # файлы для поиска фраз
grouped_phrases = group_phrases_by_vowel_frequency(file_paths)

# Вывод результата
for idx, group in enumerate(grouped_phrases):
    print(f"Группа {idx + 1}:")
    for phrase in group:
        print(f"- {phrase.strip()}")
    print()





  **




Если в конце фразы нет точки, то для разделения фраз можно использовать и перевод строки (\n),
особенно если в файле каждая фраза записана с новой строки.

Вот как можно доработать функцию, чтобы разделять текст и по точкам, и по переводу строки:






import os
from collections import defaultdict

def count_vowels(phrase):
    vowels = 'аеёиоуыэюяАЕЁИОУЫЭЮЯ'
    return sum(1 for char in phrase if char in vowels)

def split_text_into_phrases(text):
    parts = text.split('.')
    phrases = []
    for part in parts:
        subparts = part.split('\n')
        for subpart in subparts:
            phrase = subpart.strip()
            if phrase:
                phrases.append(phrase)
    return phrases

def group_phrases_by_vowel_frequency(file_paths):
    phrases = []
   
    for file_path in file_paths:
        with open(file_path, 'r', encoding='utf-8') as file:
            text = file.read()
            phrases.extend(split_text_into_phrases(text))

    groups = defaultdict(list)

    for phrase in phrases:
        vowel_count = count_vowels(phrase)
        groups[vowel_count].append(phrase)

    result = []
    for vowel_count, group in groups.items():
        for i in range(0, len(group), 10):
            result.append(group[i:i + 10])

    return result

# Пример использования
file_paths = ['file1.txt', 'file2.txt']  # тексты
grouped_phrases = group_phrases_by_vowel_frequency(file_paths)

for idx, group in enumerate(grouped_phrases):
    print(f"Группа {idx + 1}:")
    for phrase in group:
        print(f"- {phrase.strip()}")
    print()


Рецензии