Name | Modified | Size | Downloads / Week |
---|---|---|---|
README.markdown | 2023-11-02 | 6.9 kB | |
ZaitsevMA_3IB1.7z.gpg | 2023-11-02 | 22.0 kB | |
Totals: 2 Items | 28.9 kB | 0 |
sourceforge.net/projects/sukhov-postavte-5-ballov/
Незнаю насколько это похоже на настоящий ридми, но все же тут приложенно описание кода, буквально построчно что в нем происходит. (сделал это в качестве защиты кода)
-
import sqlite3 - импортируем модуль sqlite3, который позволит коду работать с бд SQLite
-
import csv - импортируем модуль csv, который позволит работать с CSV-файлами
-
def create_markov_chain(text) - создаем функцию create_markov_chain с параметром text. Функция будет создавать цепь Маркова на основе сказок Пушкина
-
conn = sqlite3.connect('markov_chain.db') - создаем обьект conn который будет подключать бд SQLite
-
c = conn.cursor() - создается курсор для оперирования базой данных
-
c.execute('''CREATE TABLE IF NOT EXISTS markov_chain ( id INTEGER PRIMARY KEY AUTOINCREMENT, source_char TEXT, target_char TEXT, probability REAL )''')
Тут мы выполняем SQL-запрос для создания таблицы markov_chain в базе данных, используя недавно созданный курсор, если она еще не существует. Таблица будет содержать столбцы id, source_char, target_char и probability
-
text = text.lower() - переводим текст в нижний регистр с помощью метода lower()
-
chars = list(text) - разбиваем текст в список отдельных символов с помощью функции list()
-
probabilities = {} - создаем пустой словарь probabilities, который будет содержать вероятности перехода от одного символа к следующему
-
for i in range(len(chars) - 1) - тут код входит в цикл, перебирая индексы всех символов текста, за исключением последнего символа
-
source_char = chars[i] - получаем текущий символ исходного текста
-
target_char = chars[i + 1] - получаем следующий символ после текущего символа
-
if source_char not in probabilities - проверяем, существует ли текущий (исходный) символ в словаре probabilities
-
probabilities[source_char] = {} - добавляем текущий (исходный) символ в словарь probabilities со значением пустого словаря
-
if target_char not in probabilities[source_char]: - тут мы уже проверяем, если целевой символ не существует для данного текущего (исходного) символа в словаре probabilities
-
probabilities[source_char][target_char] = 0 - добавляем целевой символ в словарь probabilities со значением 0
-
probabilities[source_char][target_char] += 1 - увеличиваем значение целевого символа в словаре probabilities на 1
-
for source_char in probabilities - код входит в цикл, перебирая исходные символы в словаре probabilities
-
total_occurrences = sum(probabilities[source_char].values()) - вычисляем сколько раз появлялся целевой символ для данного исходного символа
-
for target_char in probabilities[source_char] - код входит во внутренний цикл, перебирая все целевые символы для данного исходного
-
probability = probabilities[source_char][target_char] / total_occurrences - вычисляется вероятность перехода от исходного к целевому символу, разделив значение целевого на общее количество появлений
-
c.execute("INSERT INTO markov_chain (source_char, target_char, probability) VALUES (?, ?, ?)", (source_char, target_char, probability))
Тут выполняется SQL-запрос для вставки значений source_char, target_char и probability в таблицу markov_chain нашей бд-шки
-
conn.commit() - ну тут и так все понятно, мы сохраняем изменения в бд путем вызова метода commit() обьекта conn
-
c.execute("SELECT * FROM markov_chain") - выполняем SQL-запрос для сбора всех записей из таблицы markov_chain
-
rows = c.fetchall() - получаем результаты выполнения SQL-запроса в переменную rows, которая содержит все строки из таблицы markov_chain
-
with open('markov_chain.csv', 'w', newline='') as csvfile: - открываем таблицу CSV 'markov_chain.csv' в режиме записи с помощью оператора with open()
-
writer = csv.writer(file) - создается объект-писатель writer для файла CSV с помощью csv.writer()
-
writer.writerow(['id', 'source_char', 'target_char', 'probability']) - записываем заголовок CSV-файла с помощью метода writerow(), указывая имена столбцов
-
writer.writerows(rows) - записываем строки в CSV-файл с помощью метода writerow()
-
conn.close() - закрываем соединение с базой данных с помощью метода close()
with open('1991.txt', 'r') as file: text = file.read() create_markov_chain(text)
Ну а тут у нас происходит чтение содержимого файла 1991.txt и сохранение его в переменную text. Затем вызывается мейн функция create_markov_chain(text) с передачей ей содержимого файла для создания цепи Маркова. Андрей Александрович, я очень надеюсь что вы зачтете мне данное подробнейшее описание за защиту сие кода