Home
Name Modified Size InfoDownloads / 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/

Незнаю насколько это похоже на настоящий ридми, но все же тут приложенно описание кода, буквально построчно что в нем происходит. (сделал это в качестве защиты кода)

  1. import sqlite3 - импортируем модуль sqlite3, который позволит коду работать с бд SQLite

  2. import csv - импортируем модуль csv, который позволит работать с CSV-файлами

  3. def create_markov_chain(text) - создаем функцию create_markov_chain с параметром text. Функция будет создавать цепь Маркова на основе сказок Пушкина

  4. conn = sqlite3.connect('markov_chain.db') - создаем обьект conn который будет подключать бд SQLite

  5. c = conn.cursor() - создается курсор для оперирования базой данных

  6. 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

  1. text = text.lower() - переводим текст в нижний регистр с помощью метода lower()

  2. chars = list(text) - разбиваем текст в список отдельных символов с помощью функции list()

  3. probabilities = {} - создаем пустой словарь probabilities, который будет содержать вероятности перехода от одного символа к следующему

  4. for i in range(len(chars) - 1) - тут код входит в цикл, перебирая индексы всех символов текста, за исключением последнего символа

  5. source_char = chars[i] - получаем текущий символ исходного текста

  6. target_char = chars[i + 1] - получаем следующий символ после текущего символа

  7. if source_char not in probabilities - проверяем, существует ли текущий (исходный) символ в словаре probabilities

  8. probabilities[source_char] = {} - добавляем текущий (исходный) символ в словарь probabilities со значением пустого словаря

  9. if target_char not in probabilities[source_char]: - тут мы уже проверяем, если целевой символ не существует для данного текущего (исходного) символа в словаре probabilities

  10. probabilities[source_char][target_char] = 0 - добавляем целевой символ в словарь probabilities со значением 0

  11. probabilities[source_char][target_char] += 1 - увеличиваем значение целевого символа в словаре probabilities на 1

  12. for source_char in probabilities - код входит в цикл, перебирая исходные символы в словаре probabilities

  13. total_occurrences = sum(probabilities[source_char].values()) - вычисляем сколько раз появлялся целевой символ для данного исходного символа

  14. for target_char in probabilities[source_char] - код входит во внутренний цикл, перебирая все целевые символы для данного исходного

  15. probability = probabilities[source_char][target_char] / total_occurrences - вычисляется вероятность перехода от исходного к целевому символу, разделив значение целевого на общее количество появлений

  16. 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 нашей бд-шки

  1. conn.commit() - ну тут и так все понятно, мы сохраняем изменения в бд путем вызова метода commit() обьекта conn

  2. c.execute("SELECT * FROM markov_chain") - выполняем SQL-запрос для сбора всех записей из таблицы markov_chain

  3. rows = c.fetchall() - получаем результаты выполнения SQL-запроса в переменную rows, которая содержит все строки из таблицы markov_chain

  4. with open('markov_chain.csv', 'w', newline='') as csvfile: - открываем таблицу CSV 'markov_chain.csv' в режиме записи с помощью оператора with open()

  5. writer = csv.writer(file) - создается объект-писатель writer для файла CSV с помощью csv.writer()

  6. writer.writerow(['id', 'source_char', 'target_char', 'probability']) - записываем заголовок CSV-файла с помощью метода writerow(), указывая имена столбцов

  7. writer.writerows(rows) - записываем строки в CSV-файл с помощью метода writerow()

  8. conn.close() - закрываем соединение с базой данных с помощью метода close()

with open('1991.txt', 'r') as file: text = file.read() create_markov_chain(text)

Ну а тут у нас происходит чтение содержимого файла 1991.txt и сохранение его в переменную text. Затем вызывается мейн функция create_markov_chain(text) с передачей ей содержимого файла для создания цепи Маркова. Андрей Александрович, я очень надеюсь что вы зачтете мне данное подробнейшее описание за защиту сие кода

Source: README.markdown, updated 2023-11-02