Изучаем анализ данных на языках R и Python
15 subscribers
1 photo
4 files
Изучаем анализ данных на языках R и Python. NLP, стилометрия и анализ текстовых данных. А так же - поддержка и помощь начинающим аналитикам данных!
Download Telegram
Вот несколько примеров статистического анализа текстового файла на языке Python:

Подсчет количества слов, предложений и символов в текстовом файле:

filename = 'file.txt'

with open(filename, 'r') as file:
text = file.read()

word_count = len(text.split())
sentence_count = len(text.split('.'))
character_count = len(text)

print("Количество слов:", word_count)
print("Количество предложений:", sentence_count)
print("Количество символов:", character_count)

Определение наиболее часто встречающихся слов в текстовом файле:

import re
from collections import Counter

with open(filename, 'r') as file:
text = file.read()

words = re.findall(r'\w+', text.lower())
word_counts = Counter(words)

most_common_words = word_counts.most_common(5) # Получить 5 наиболее часто встречающихся слов

print("Наиболее часто встречающиеся слова:")
for word, count in most_common_words:
print(word, ":", count)

Вычисление частоты слов в текстовом файле:

from collections import Counter

with open(filename, 'r') as file:
text = file.read()

words = text.lower().split()
word_counts = Counter(words)

total_words = sum(word_counts.values())

word_frequencies = {word: count / total_words for word, count in word_counts.items()}

print("Частота слов:")
for word, frequency in word_frequencies.items():
print(word, ":", frequency)

Вычисление средней длины слова в текстовом файле:

import re

with open(filename, 'r') as file:
text = file.read()

words = re.findall(r'\w+', text)
total_length = sum(len(word) for word in words)
average_length = total_length / len(words)

print("Средняя длина слова:", average_length)

Это лишь некоторые примеры статистического анализа текстового файла на Python. В зависимости от вашей конкретной задачи, вы можете дополнить и адаптировать эти примеры для своих потребностей.
Примеры статистического анализа текстового файла, представленные на языке R:

Подсчет количества слов, предложений и символов в текстовом файле:

filename <- "file.txt"

text <- readLines(filename, warn = FALSE)
word_count <- length(strsplit(text, "\\s+|\\n")[[1]])
sentence_count <- length(gregexpr("\\.", text)[[1]])
character_count <- sum(nchar(text))

print(paste("Количество слов:", word_count))
print(paste("Количество предложений:", sentence_count))
print(paste("Количество символов:", character_count))
Определение наиболее часто встречающихся слов в текстовом файле:

filename <- "file.txt"

text <- readLines(filename, warn = FALSE)
words <- unlist(strsplit(tolower(text), "\\W+"))
word_counts <- table(words)

most_common_words <- head(sort(word_counts, decreasing = TRUE), 5)

print("Наиболее часто встречающиеся слова:")
for (word in names(most_common_words)) {
print(paste(word, ":", most_common_words[[word]]))
}

Вычисление частоты слов в текстовом файле:

filename <- "file.txt"

text <- readLines(filename, warn = FALSE)
words <- unlist(strsplit(tolower(text), "\\W+"))
word_counts <- table(words)

total_words <- sum(word_counts)

word_frequencies <- prop.table(word_counts)

print("Частота слов:")
for (word in names(word_frequencies)) {
print(paste(word, ":", word_frequencies[[word]]))
}

Вычисление средней длины слова в текстовом файле:

filename <- "file.txt"

text <- readLines(filename, warn = FALSE)
words <- unlist(strsplit(text, "\\W+"))

total_length <- sum(nchar(words))
average_length <- total_length / length(words)

print(paste("Средняя длина слова:", average_length))

Это примеры статистического анализа текстового файла, но представленные на языке R. Вы можете использовать эти примеры для анализа текстовых файлов в R, а также адаптировать их под свои конкретные потребности, если необходимо.
С помощью методов стилометрии можно изучать не только описательные характеристики стиля автора, но и свойства его текста, такие как синтаксис, выбор лексики и частотность слов. Анализ стиля автора может дать информацию о его предпочтениях и намерениях при написании текстов, а также может помочь в выявлении некоторых особенностей личности автора, таких как возраст, пол, уровень образования, социальный статус и т.д.

Кроме того, с помощью стилометрических методов можно проводить исследования на различные темы, например, исследовать эволюцию стиля автора, выявлять стилометрические различия между группами авторов или же использовать стилометрию для идентификации авторства, то есть для проверки, написал ли конкретный автор данный текст или нет.


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

Ниже приведен пример кода на Python, который демонстрирует как можно проанализировать стилометрические характеристики текстов автора для двух разных периодов времени и сравнить их:


import nltk
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.probability import FreqDist
import statistics

# примеры текстов для двух разных периодов времени
text1 = "Во времена своей молодости Лев Толстой писал романы, например, Войну и мир."
text2 = "В более поздние годы жизни Лев Толстой писал более философские произведения, такие как Воскресение."

# токенизация предложений и слов
sentences1 = sent_tokenize(text1)
words1 = word_tokenize(text1)
sentences2 = sent_tokenize(text2)
words2 = word_tokenize(text2)

# вычисление стилометрических характеристик текстов для первого периода
avg_sentence_length1 = sum([len(sent.split(' ')) for sent in sentences1]) / len(sentences1)
avg_word_length1 = sum([len(word) for word in words1]) / len(words1)
word_freq1 = FreqDist(words1)
std_dev1 = statistics.stdev(word_freq1.values())

# вычисление стилометрических характеристик текстов для второго периода
avg_sentence_length2 = sum([len(sent.split(' ')) for sent in sentences2]) / len(sentences2)
avg_word_length2 = sum([len(word) for word in words2]) / len(words2)
word_freq2 = FreqDist(words2)
std_dev2 = statistics.stdev(word_freq2.values())

# вывод результатов
print("Первый период:")
print("Средняя длина предложения: ", avg_sentence_length1)
print("Средняя длина слова: ", avg_word_length1)
print("Дисперсия частоты употребления слов: ", std_dev1)
print("\nВторой период:")
print("Средняя длина предложения: ", avg_sentence_length2)
print("Средняя длина слова: ", avg_word_length2)
print("Дисперсия частоты употребления слов: ", std_dev2)
Для исследования эволюции стиля автора на протяжении его жизни на R можно использовать следующий подход:

Собрать корпус текстов автора на протяжении его жизни.
Применить методы стилометрии для извлечения признаков из каждого текста.
Использовать методы машинного обучения, такие как кластеризация или классификация, для определения изменений в стиле автора.

Например, предположим, что у нас есть корпус текстов Эрнеста Хемингуэя на протяжении его жизни. Мы можем использовать библиотеку stylo в R для извлечения стилометрических признаков из каждого текста, а затем использовать метод главных компонент (PCA) для сокращения размерности признакового пространства и визуализации изменений в стиле автора.
А можно обойтись и без использования специализированной библиотеки.

Вот пример кода, который демонстрирует этот подход:


# Загрузка данных
text1 <- readLines("text1.txt")
text2 <- readLines("text2.txt")

# Создание функции для вычисления количества слов в тексте
word_count <- function(text) {
words <- unlist(strsplit(text, "\\W+"))
words <- words[words != ""]
return(length(words))
}

# Вычисление количества слов в каждом тексте
n_words1 <- word_count(text1)
n_words2 <- word_count(text2)

# Вычисление доли уникальных слов в каждом тексте
unique_words1 <- length(unique(strsplit(text1, "\\W+")[[1]]))/n_words1
unique_words2 <- length(unique(strsplit(text2, "\\W+")[[1]]))/n_words2

# Построение графика изменения доли уникальных слов в текстах на протяжении жизни автора
years <- seq(1900, 2020, 10)
unique_words <- c(0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65)
plot(years, unique_words, type="o", xlab="Год", ylab="Доля уникальных слов", main="Эволюция стиля автора")

Этот код предполагает, что тексты хранятся в файлах "text1.txt" и "text2.txt", каждый в отдельности. Функция "word_count" вычисляет количество слов в тексте, а затем мы вычисляем долю уникальных слов в каждом тексте. Затем мы используем эти данные для построения графика изменения доли уникальных слов в текстах на протяжении жизни автора.
Создание сайта на WordPress — это отличный выбор для любого бизнеса! Вот несколько причин, почему:

Простота: Легкий в управлении интерфейс — обновляйте сайт без технических знаний.
Гибкость: Более 50 000 плагинов для расширения функционала, от магазинов до форм обратной связи.
SEO-дружественность: Оптимизация для поисковых систем прямо из коробки.
Мобильная адаптация: Ваш сайт будет отлично выглядеть на любом устройстве.
Безопасность: Регулярные обновления и плагины для защиты данных.
Экономия: Бесплатная платформа и доступные готовые решения.
Готовы вывести свой бизнес в онлайн? Свяжитесь с нами для разработки вашего идеального сайта на WordPress!

#WordPress #ВебРазработка #СозданиеСайтов #SEO #МобильнаяВерсия #Гибкость
Perl для NLP и Стилометрии
Perl — это язык программирования, который исторически использовался для обработки текста, и благодаря своей гибкости и мощным инструментам для работы со строками, он продолжает оставаться полезным в задачах обработки естественного языка (NLP). Perl идеально подходит для написания скриптов и автоматизации небольших, но важных задач анализа текста.

Perl и стилометрия

Стилометрия фокусируется на анализе текстов для выявления характерных черт стиля авторов. Perl предоставляет отличные возможности для быстрого и эффективного анализа текстов за счёт своей мощной обработки строк и регулярных выражений.

Ключевые задачи стилометрии, которые можно решить с помощью Perl:

Извлечение и анализ частотности слов: Простой подсчёт слов и их распределения в тексте.
Обработка структуры текста: Анализ длины предложений, слов и синтаксических конструкций для выявления уникальных черт авторского стиля.
Сравнение текстов: Автоматическое сравнение различных текстов на основе статистических показателей.
Perl позволяет быстро обрабатывать большие объёмы текста и извлекать нужные данные с помощью регулярных выражений. Его библиотеки, такие как Lingua::EN::Fathom и Lingua::StopWords, позволяют исследователям легко анализировать частотность слов и ключевые фразы.

Пример задачи:
Подсчёт количества слов в тексте с использованием Perl:

use strict;
use warnings;

my $text = "Это пример текста для анализа стилометрии.";
my %word_count;

# Разбиваем текст на слова и подсчитываем их количество
foreach my $word (split(/\s+/, $text)) {
$word_count{lc($word)}++;
}

# Выводим результаты
while (my ($word, $count) = each %word_count) {
print "$word: $count\n";
}

Этот скрипт выполняет базовый подсчёт слов, что полезно для предварительного анализа текстов.

Perl для NLP
Перл может использоваться для решения небольших, но важных задач в области NLP. Хотя для сложных моделей машинного обучения и глубокого анализа чаще используют другие языки, такие как Python, Perl остаётся отличным выбором для написания скриптов, автоматизации и предварительной обработки текстов.

Основные задачи NLP, которые можно решать с помощью Perl:

Токенизация: Разделение текста на слова или предложения.
Удаление стоп-слов: Исключение часто встречающихся, но незначимых слов (таких как "и", "или", "но").
Обработка морфологии: Простейшая лемматизация или стемминг для приведения слов к их базовой форме.
Perl также поддерживает наборы инструментов для работы с естественным языком, например, через модули Lingua::EN::Tokenizer и Lingua::EN::Sentence, которые упрощают разбиение текста на составляющие.

Пример задачи NLP:
Токенизация текста:

use strict;
use warnings;
use Lingua::EN::Tokenizer::Simple;

my $tokenizer = Lingua::EN::Tokenizer::Simple->new();
my $text = "This is a simple example of tokenizing a text in Perl.";

# Токенизация текста
my @tokens = $tokenizer->tokenize($text);

# Вывод токенов
foreach my $token (@tokens) {
print "$token\n";
}

Этот скрипт демонстрирует, как легко можно разбить текст на отдельные слова с использованием Perl.

Преимущества использования Perl для NLP и стилометрии
Мощная работа с текстом: Perl обладает встроенными инструментами для обработки строк, что делает его идеальным для текстового анализа.
Скорость разработки: Perl позволяет быстро создавать и запускать небольшие скрипты для автоматизации задач.
Регулярные выражения: Perl — один из лучших языков для использования регулярных выражений, что делает его отличным выбором для сложной обработки текста.
Гибкость и простота: Несмотря на свою мощность, Perl остаётся простым для написания скриптов, что позволяет эффективно решать небольшие задачи NLP.
Хотя Perl не так часто используется для сложных задач машинного обучения и глубокого анализа текстов, он остаётся крайне полезным инструментом для решения небольших задач NLP и стилометрии. Благодаря мощным возможностям обработки строк, регулярным выражениям и гибкости, Perl предоставляет быстрые и эффективные решения для анализа текста, особенно в тех случаях, когда требуется написать скрипт для быстрого анализа или автоматизации процессов.
Библиотеки, такие как nltk (Natural Language Toolkit), scikit-learn и spacy, позволяют автоматизировать анализ текстов и выявление стилевых характеристик. Например, при помощи nltk можно проводить частотный анализ слов, а с помощью scikit-learn — обучать модели классификации для предсказания авторства.

Пример задачи стилометрии:
Классификация авторства с использованием моделей машинного обучения, обученных на частоте употребления слов и синтаксических особенностях текста.

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Пример текстов от двух авторов
texts = ["Текст первого автора", "Ещё один текст первого автора",
"Текст второго автора", "Ещё один текст второго автора"]
labels = ["Author 1", "Author 1", "Author 2", "Author 2"]

# Векторизация текстов
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)

# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.3, random_state=42)

# Обучение модели
model = MultinomialNB()
model.fit(X_train, y_train)

# Предсказание и оценка точности
y_pred = model.predict(X_test)
print(f"Точность модели: {accuracy_score(y_test, y_pred)}")
Стилометрия с R

Стилометрия — это метод анализа текстов, направленный на изучение стилевых особенностей авторов и произведений.
Задачи стилометрии включают:

Авторство текста: Определение, кто является автором текста, на основе его языковых особенностей.

Стилевые изменения: Отслеживание эволюции стиля автора с течением времени.

Сравнение текстов: Поиск сходства и различий между различными текстами или авторами.

В R существуют пакеты, такие как stylo и tm, которые облегчают выполнение этих задач. Например, stylo позволяет легко проводить анализ частотности слов, построение кластерных деревьев и многомерное шкалирование для анализа сходства текстов.

Пример задач стилометрии в R:

Классификация авторства на основе частоты использования слов и выражений.

Измерение текстовой сложности, анализ синтаксических конструкций и длины предложений.
NLP в R

NLP (обработка естественного языка) включает широкий спектр методов для анализа текстов и извлечения информации. R активно используется для таких задач, как:

Токенизация: Разбиение текста на слова, предложения или другие значимые элементы.
Лемматизация и стемминг: Приведение слов к их исходной или базовой форме.
Анализ тональности: Определение эмоциональной окраски текста (положительная, отрицательная, нейтральная).
Обнаружение тем: Выявление ключевых тем или скрытых структур в больших текстовых коллекциях.

Пакеты quanteda, text2vec, topicmodels и wordcloud предоставляют мощные инструменты для выполнения этих задач.

Примеры задач NLP в R:

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

Преимущества использования R для стилометрии и NLP

Обширные библиотеки: R обладает множеством пакетов, которые облегчают решение задач в области обработки текста.
Визуализация данных: Встроенные инструменты для визуализации, такие как ggplot2, позволяют создавать графики и диаграммы для представления результатов анализа.
Интеграция с другими инструментами: R легко интегрируется с другими языками и платформами, такими как Python или Hadoop, что расширяет его возможности.
При работе с большими объемами текстов, такими как собрание сочинений автора, важно учитывать, что простые количественные метрики, такие как длина текста, могут быть недостаточными для глубокого анализа.

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

1. Анализ частот слов

Можно использовать TF-IDF (Term Frequency-Inverse Document Frequency) для оценки значимости слов в текстах. Это поможет выявить ключевые темы и идеи в сочинениях.

2. Тематическое моделирование и кластеризация

Тематическое моделирование, например, с использованием LDA (Latent Dirichlet Allocation), помогает обнаружить скрытые темы в больших объемах текстов.
Кластеризация текстов может помочь группировать сочинения по схожести содержания.

3. Анализ тональности

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

4. Семантический анализ

Использование методов обработки естественного языка (NLP) для извлечения значений и смыслов, таких как анализ синтаксиса и семантики.

5. Статистический анализ

Если необходимо сравнить характеристики разных текстов (например, стиль, длина, сложность), можно использовать более сложные метрики, такие как средняя длина предложений, количество уникальных слов и т. д.
Кульбак-Лейбнер (Kullback-Leibler Divergence): используется для измерения различия между двумя распределениями вероятностей, что может быть полезно в задачах сравнения текстов.

Мера Жаккара (Jaccard Similarity): используется для сравнения сходства между множествами (например, набором слов в текстах).

Косинусное сходство: часто используется для измерения сходства между векторными представлениями текстов.
Channel name was changed to «NLP в Data Science. Стилометрия и борьба с плагиатом.»
Channel name was changed to «Изучаем анализ данных на языках R и Python»
Подготовка данных и проведение факторного анализа.

Шаг 1: Генерация данных

Реальные данные могут быть представлены в различных формах: текст, изображения, аудио, видео и т.д. На начальном этапе данные могут находиться в форме текста, изображений, аудиофайлов и т.п., но для анализа они должны быть приведены к численному формату. В R это делается с помощью функций, которые считывают данные из файлов или преобразуют их в числовой формат.

Например, если данные находятся в формате Excel, то сначала загружается файл с данными, затем выбирается нужный лист, и данные конвертируются в численный формат.

Шаг 2: Преобразование данных

Преобразование в числовые данные включает в себя очистку данных от лишних символов, таких как пробелы, запятые, скобки и т. д. Затем данные переводятся в числовую форму с помощью специальных функций, таких как as.numeric().

Также могут использоваться функции для преобразования текстовых данных в числовые. Например, функция as.factor() позволяет преобразовывать текстовые данные в категориальный формат.

Шаг 3: Нормализация данных

Нормализация данных выполняется для того, чтобы привести данные к общему масштабу. Это облегчает сравнение данных, так как разные данные могут иметь разные единицы измерений и шкалы. Например, температура может измеряться в градусах Цельсия, а расстояние — в километрах. Нормализация позволяет работать с данными независимо от их единиц измерения.

Для нормализации данных используются специальные функции, такие как scale(). Они помогают перевести данные в диапазон от 0 до 1, что делает их удобными для сравнения.

Шаг 4: Объединение данных в одну матрицу

Объединение данных производится с помощью функции cbind(). Она объединяет данные из разных источников в одну таблицу. Это удобно для последующего анализа, потому что все данные хранятся в одном месте.

Шаг 5: Проведение факторного анализа

Факторный анализ проводится с помощью специальной функции factor() из библиотеки stats. Эта функция принимает аргументы, такие как данные, метод анализа и количество факторов. По умолчанию она использует метод главного компонента для определения факторов.

Параметры функции включают:

method: метод анализа, например, "principal", "promax", minres.
rotation: метод вращения факторов, например, Varimax, Promax, Quartimax.
scores: количество факторов, которые следует извлечь, например 2, 3, 5.
Функция возвращает объект класса "factor" с параметрами, такими как факторы, их загрузки, коэффициенты корреляции и индексы адекватности.

Как выбрать параметры для функции fa()

При выборе параметров для функции fa() необходимо учитывать природу данных и цели анализа.

Метод анализа: определяет, как данные обрабатываются. Часто используются методы principal, promax, varimax.
Вращение факторов: выбирает метод вращения, например Varimax или Promax.
Количество факторов: задаётся параметром scores. Оно определяет, сколько факторов извлекать из данных.
Выбор метода анализа и метода вращения факторов зависит от типа данных и целей анализа. Выбор количества факторов основывается на природе данных и целях анализа.
Пример кода на Python с использованием spaCy для выделения имен собственных.

import spacy

# Загрузка многоязычной модели для spaCy
nlp = spacy.load("xx_ent_wiki_sm")

# Текст для анализа
text = "Иван и Марья Ивановна были в парке. Петр и Ирина пошли в магазин."

# Применяем spaCy для анализа текста
doc = nlp(text)

# Выделяем имена собственные (на основе модели NER)
persons = []

for ent in doc.ents:
if ent.label_ == "PERSON":
persons.append(ent.text)

# Выводим имена собственные
print("Найденные имена собственные:", persons)
Поиск имен собственных с использованием pymorphy3

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import nltk
from nltk.corpus import stopwords
import pymorphy3
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# Загрузка стоп-слов для русского языка
nltk.download('stopwords')
russian_stopwords = stopwords.words('russian')

# Чтение файла
with open(path_to_text_file, 'r', encoding='utf-8') as file:
text_data = file.readlines()

# Объединение текста в один большой текст для анализа
full_text = ' '.join(text_data)

# Создание экземпляра морфологического анализатора
morph = pymorphy3.MorphAnalyzer()

# Разделение текста на слова
words = full_text.split()

# Поиск имен собственных с использованием pymorphy3
proper_nouns = set()
for word in words:
parsed_word = morph.parse(word)[0]
if 'Name' in parsed_word.tag: # Проверка, является ли слово именем собственным
proper_nouns.add(word)

# Выводим найденные имена собственные таблицей
proper_nouns_df = pd.DataFrame(list(proper_nouns), columns=["Имена собственные"])
print("\nНайденные имена собственные:")
print(proper_nouns_df)
Задача: узнать методом Монте-Карло, какое в среднем будет расстояние между двумя случайными точками в круге

import numpy as np
import matplotlib.pyplot as plt
# Метод Монте Карло
# Количество точек для симуляции
num_points = 10000

# Генерация случайных точек в квадрате [0, 1] x [0, 1]
x = np.random.uniform(0, 1, num_points)
y = np.random.uniform(0, 1, num_points)

# Определение, попадает ли точка в круг (радиус = 1, центр = (0, 0))
inside_circle = x**2 + y**2 <= 1

# Оценка числа π
pi_estimate = 4 * np.sum(inside_circle) / num_points

# Графическое отображение
plt.figure(figsize=(8, 8))
plt.scatter(x, y, c=inside_circle, cmap='coolwarm', s=1, label='Точки')
circle = plt.Circle((0, 0), 1, color='blue', fill=False, linewidth=2, label='Круг радиусом 1')
plt.gca().add_artist(circle)
plt.title(f'Оценка числа π методом Монте-Карло\nЧисло точек: {num_points}, π ≈ {pi_estimate:.4f}')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.axis('equal')
plt.show()
Пример использования цепей Маркова для генерации текста

import os
import pandas as pd
import markovify
from tqdm import tqdm

# Папка с текстами
folder_path = "data"

# Чтение текстовых файлов в один DataFrame
files = [f for f in os.listdir(folder_path) if f.endswith(".txt")]

# Создаем список для хранения данных
data = []

# Чтение каждого файла и добавление в DataFrame
for file in tqdm(files, desc="Чтение файлов"):
with open(os.path.join(folder_path, file), 'r', encoding='utf-8') as f:
text = f.read().lower() # Приводим текст к нижнему регистру
data.append({'id': os.path.splitext(file)[0], 'text': text})

# Создаем DataFrame
df_texts = pd.DataFrame(data)

# Объединяем все тексты в один
all_text = " ".join(df_texts['text'])

# Строим марковскую модель
# Используем прогресс-бар для анализа текста
print("Создание марковской цепи...")
text_model = markovify.Text(all_text, state_size=2)

# Функция для генерации фразы
def generate_phrase(model, length=10):
phrase = []
current_sentence = model.make_sentence()
if not current_sentence:
return ""

phrase.append(current_sentence)

# Генерация дополнительных фраз
for _ in range(length - 1):
current_sentence = model.make_sentence()
if not current_sentence:
break
phrase.append(current_sentence)

return " ".join(phrase)

# Пример генерации фразы
generated_phrase = generate_phrase(text_model, length=10)
print("Generated phrase:", generated_phrase)