группы слов на странице и рифмы

import requests
from bs4 import BeautifulSoup
import re

# URL страницы
url = "http://stihi.ru/2024/12/25/7446"

# Получаем HTML-код страницы
response = requests.get(url)
html_content = response.text

# Парсим HTML-код с помощью BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')

# Извлекаем текст (предполагается, что текст стихотворения находится в теге <div> с классом 'text')
text = soup.find('div', class_='text').get_text(separator=' ', strip=True)

# Список предлогов и частиц
prepositions_and_particles = ["об", "не", "в", "на", "с", "по", "к", "и", "а", "как", "это"]

# Разделяем текст на слова
words = re.findall(r'\b\w+\b', text.lower())

# Создаем список для групп из трех слов
groups_of_three = []

# Проходим по словам и формируем группы
for i in range(len(words) - 2):
    # Проверяем, чтобы первое слово не было предлогом
    if words[i] not in prepositions_and_particles:
        # Формируем группу из трех слов, включая предлог перед первым словом
        group = (words[i-1] if i > 0 else '', words[i], words[i+1])
        groups_of_three.append(group)

# Вывод результата
for group in groups_of_three:
    print(' '.join(filter(None, group)))  # Убираем пустые строки






       ** =->





import requests
from bs4 import BeautifulSoup
import re
from collections import defaultdict

# URL страницы
url = "http://stihi.ru/2024/12/25/7446"

# Получаем HTML-код страницы
response = requests.get(url)
html_content = response.text

# Парсим HTML-код с помощью BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')

# Извлекаем текст (предполагается, что текст стихотворения находится в теге <div> с классом 'text')
text = soup.find('div', class_='text').get_text(separator=' ', strip=True)

# Гласные буквы
vowels = "аеёиоуыэюя"

# Разделяем текст на слова
words = re.findall(r'\b\w+\b', text.lower())

# Создаем список для групп слов
groups_of_words = []

# Функция для подсчета гласных в слове
def count_vowels(word):
    return sum(1 for char in word if char in vowels)

# Формируем группы слов с 7-8 гласными
current_group = []
current_vowel_count = 0

for word in words:
    word_vowel_count = count_vowels(word)
   
    if current_vowel_count + word_vowel_count <= 8:
        current_group.append(word)
        current_vowel_count += word_vowel_count
       
        # Если достигли 7-8 гласных, сохраняем группу
        if current_vowel_count >= 7:
            # Убираем дубликаты, сохраняя порядок
            unique_group = list(dict.fromkeys(current_group))
            groups_of_words.append(unique_group)
    else:
        # Сбрасываем текущую группу, если превышаем 8 гласных
        current_group = [word]
        current_vowel_count = word_vowel_count
       
        if current_vowel_count >= 7:
            # Убираем дубликаты, сохраняя порядок
            unique_group = list(dict.fromkeys(current_group))
            groups_of_words.append(unique_group)

# Функция для поиска рифм
def find_rhymes(groups):
    rhyme_dict = defaultdict(set)  # Используем set для автоматического удаления дубликатов
   
    for group in groups:
        for word in group:
            if len(word) > 1:  # Проверяем, чтобы слово было не меньше 2 букв
                rhyme_key = word[-2:]  # Используем последние 2 буквы для поиска рифм
                rhyme_dict[rhyme_key].add(word)  # Добавляем слово в set
   
    # Преобразуем set обратно в список для вывода
    return {key: list(words) for key, words in rhyme_dict.items() if len(words) > 1}  # Возвращаем только рифмы

# Поиск рифм в группах
rhymes = find_rhymes(groups_of_words)


# Вывод результата
print("Группы слов:")
for group in groups_of_words:
    print(' '.join(group))  # Выводим на экран

print("\nРифмы:")
for rhyme_key, rhyme_words in rhymes.items():
    print(f"{rhyme_key}: {', '.join(rhyme_words)}")  # Выводим рифмы







  ** ---------------------------------------------->>





Группы слов: Мы используем два вложенных цикла для формирования всех возможных групп из трех и более слов.
Подсчет гласных: Мы проверяем, чтобы количество гласных в группе находилось в диапазоне от 7 до 8.
Функция ends_match: Эта функция проверяет, совпадают ли последние буквы последнего слова с любым из предыдущих слов в группе.
Фильтрация групп: Мы отбираем только те группы, которые удовлетворяют условию совпадения окончаний.
Сортировка: Группы сортируются по последнему слову.
Сохранение в файл: Все отобранные группы записываются в файл output.txt с кодировкой UTF-8.
Теперь код будет формировать группы слов, соответствующие вашим критериям, и сохранять их в текстовый файл.

буквы должны совпадать в конце последнего слова каждой группы слов
например
первая группа слов эт**
вторая группа слов мож**

и так далее по списку групп слов

Понял вас! Давайте изменим код так, чтобы он проверял совпадение букв в конце последнего слова каждой группы слов с последним словом предыдущей группы. Это позволит нам создать цепочку групп слов, где последние буквы будут совпадать.


Вот обновленный код:

import requests
from bs4 import BeautifulSoup
import re

# URL страницы
url = "http://stihi.ru/2024/12/25/7446"

# Получаем HTML-код страницы
response = requests.get(url)
html_content = response.text

# Парсим HTML-код с помощью BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')

# Извлекаем текст (предполагается, что текст стихотворения находится в теге <div> с классом 'text')
text = soup.find('div', class_='text').get_text(separator=' ', strip=True)

# Гласные буквы
vowels = "аеёиоуыэюя"

# Разделяем текст на слова
words = re.findall(r'\b\w+\b', text.lower())

# Создаем список для групп слов
groups_of_words = []

# Функция для подсчета гласных в строке
def count_vowels(group):
    return sum(1 for char in ' '.join(group) if char in vowels)

# Проходим по всем возможным группам слов
for i in range(len(words)):
    for j in range(i + 2, len(words)):  # Начинаем с i + 2, чтобы было как минимум 3 слова
        group = words[i:j + 1]  # Получаем группу слов от i до j
        if 7 <= count_vowels(group) <= 8:
            groups_of_words.append(group)

# Функция для проверки совпадения окончаний
def ends_match(last_word, previous_last_word):
    return any(last_word.endswith(suffix) for suffix in [previous_last_word[-1:], previous_last_word[-2:]])

# Отбор групп с учетом совпадений
result_groups = []
previous_last_word = ""

for group in groups_of_words:
    last_word = group[-1]
    if not previous_last_word or ends_match(last_word, previous_last_word):
        result_groups.append(group)
        previous_last_word = last_word  # Обновляем последнее слово

# Сортируем группы по последнему слову
result_groups.sort(key=lambda g: g[-1])

# Сохраняем группы в файл
with open('output.txt', 'w', encoding='utf-8') as f:
    for group in result_groups:
        f.write(' '.join(group) + '\n')

# Вывод результата
for group in result_groups:
    print(' '.join(group))  # Выводим на экран



Объяснение изменений:
Функция ends_match: Теперь она принимает два аргумента: последнее слово текущей группы и последнее слово предыдущей группы. Она проверяет, совпадают ли последние 1 или 2 буквы.
Отбор групп: Мы проходим по всем группам и добавляем их в result_groups, если они соответствуют условию совпадения с последним словом предыдущей группы. Переменная previous_last_word обновляется после добавления группы.
Сохранение в файл: Все отобранные группы записываются в файл output.txt с кодировкой UTF-8.
Теперь код будет формировать цепочку групп слов, где последние буквы будут совпадать, как вы и хотели.

ты считаешь слова в группе но это не нужно ..
число слов определяет число гласных букв в них
то есть это 7-8 гласных букв





я наверное не знаю
как наш мир вот стал таким
просто я слова читаю
всё что мы понять хотим

может нам не так и важно
как приходят мысли к нам
повторяя это дважды
всё понятно по словам
..


Рецензии