группы слов на странице и рифмы
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 гласных букв
я наверное не знаю
как наш мир вот стал таким
просто я слова читаю
всё что мы понять хотим
может нам не так и важно
как приходят мысли к нам
повторяя это дважды
всё понятно по словам
..
Свидетельство о публикации №124122507885