Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воган Ли - Python для хакеров (Библиотека программиста) - 2023.pdf
Скачиваний:
5
Добавлен:
07.04.2024
Размер:
14.76 Mб
Скачать

Решения для практических проектов

Это приложение содержит решения для практических проектов каждой главы. Вы можете скачать их сайта книги https://nostarch.com/real-world-python/.

Глава 2. Определение авторства с помощью стилометрии

Охота на собаку Баскервилей с помощью распределения

practice_hound_dispersion.py

"""Создаем график распределения с помощью NLP (nltk).""" import nltk

import file_loader

corpus = file_loader.text_to_string('hound.txt') tokens = nltk.word_tokenize(corpus)

tokens = nltk.Text(tokens) # Обертка NLTK для автоматического анализа текста. dispersion = tokens.dispersion_plot(['Holmes',

'Watson',

'Mortimer',

'Henry',

'Barrymore',

'Stapleton',

'Selden',

'hound'])

354      Решения для практических проектов

Тепловая карта пунктуации

practice_heatmap_semicolon.py

"""Создаем тепловую карту пунктуации.""" import math

from string import punctuation import nltk

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.colors import ListedColormap import seaborn as sns

# Устанавливаем seaborn через pip install seaborn.

PUNCT_SET = set(punctuation)

def main():

# Загружаем файлы текстов в словарь по автору. strings_by_author = dict()

strings_by_author['doyle'] = text_to_string('hound.txt') strings_by_author['wells'] = text_to_string('war.txt') strings_by_author['unknown'] = text_to_string('lost.txt')

#Токенизируем строки текста, сохраняя только знаки препинания. punct_by_author = make_punct_dict(strings_by_author)

#Преобразуем знаки препинания в численные значения и отображаем тепловые

карты.

for author in punct_by_author:

heat = convert_punct_to_number(punct_by_author, author)

arr = np.array((heat[:6561])) # Обрезаем до наибольшего размера для квадратной матрицы

arr_reshaped = arr.reshape(int(math.sqrt(len(arr))), int(math.sqrt(len(arr))))

fig, ax = plt.subplots(figsize=(7, 7)) sns.heatmap(arr_reshaped,

cmap=ListedColormap(['blue', 'yellow']), square=True,

ax=ax)

ax.set_title('Heatmap Semicolons {}'.format(author)) plt.show()

def text_to_string(filename):

"""Считываем файл текста и возвращаем строку.""" with open(filename) as infile:

return infile.read()

def make_punct_dict(strings_by_author):

"""Возвращаем словарь токенизированных знаков препинания по корпусу и автору."""