фразы из слов большого текста
Программа использует модель на основе цепей Маркова, что позволяет генерировать осмысленные последовательности слов, похожие на исходный текст.
Описание кода:
Загружает и обрабатывает большой текст (например, из файла).
Создаёт цепь Маркова на уровне слов.
Генерирует новые фразы заданной длины на основе цепи Маркова.
Позволяет генерировать несколько фраз.
**
import random
import re
class MarkovChainTextGenerator:
def __init__(self, n=2):
"""
Инициализация генератора цепи Маркова.
n - порядок цепи (количество слов в состоянии)
"""
self.n = n
self.model = {}
def preprocess_text(self, text):
"""
Преобразование текста: удаление лишних символов, приведение к нижнему регистру.
"""
text = text.lower()
# Заменяем переносы строк и табы на пробелы
text = re.sub(r'\s+', ' ', text)
# Удаляем все символы кроме букв, цифр и знаков препинания
text = re.sub(r'[^a-zа-яё0-9,.!? ]', '', text)
return text
def build_model(self, text):
"""
Построение модели цепи Маркова из текста.
"""
text = self.preprocess_text(text)
words = text.split()
if len(words) < self.n:
raise ValueError("Текст слишком короткий для выбранного порядка цепи.")
for i in range(len(words) - self.n):
key = tuple(words[i:i+self.n])
next_word = words[i+self.n]
if key not in self.model:
self.model[key] = []
self.model[key].append(next_word)
def generate_phrase(self, length=15):
"""
Генерация новой фразы длиной length слов.
"""
if not self.model:
raise ValueError("Модель цепи Маркова не построена.")
# Случайным образом выбираем начальное состояние
start = random.choice(list(self.model.keys()))
phrase = list(start)
for _ in range(length - self.n):
key = tuple(phrase[-self.n:])
next_words = self.model.get(key)
if not next_words:
# Если для текущего состояния нет продолжения, выбираем новое случайное состояние
key = random.choice(list(self.model.keys()))
next_words = self.model[key]
next_word = random.choice(next_words)
phrase.append(next_word)
# Собираем фразу в строку с правильной пунктуацией
return self.postprocess_phrase(phrase)
def postprocess_phrase(self, words):
"""
Обработка сгенерированной фразы для корректного отображения.
"""
phrase = ' '.join(words)
# Заглавная буква в начале
phrase = phrase.capitalize()
# Исправление пробелов перед знаками препинания
phrase = re.sub(r'\s+([,.!?])', r'\1', phrase)
return phrase
def main():
# Пример: загрузка большого текста из файла
filename = 'мой текст.txt' # путь к вашему файлу с большим текстом
try:
with open(filename, 'r', encoding='utf-8') as f:
text = f.read()
except FileNotFoundError:
print(f"Файл {filename} не найден - создайте файл с большим текстом.")
return
generator = MarkovChainTextGenerator(n=2)
generator.build_model(text)
print("Сгенерированные фразы:")
for i in range(10):
phrase = generator.generate_phrase(length=20)
print(f"{i+1}: {phrase}")
if __name__ == "__main__":
main()
Свидетельство о публикации №125070600712