
- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему Python?
- •План книги
- •Версия Python, платформа и IDE
- •Установка Python
- •Запуск Python
- •Использование виртуальной среды
- •Вперед!
- •Глава 1. Спасение моряков с помощью теоремы Байеса
- •Теорема Байеса
- •Проект #1. Поиск и спасение
- •Стратегия
- •Установка библиотек Python
- •Код для теоремы Байеса
- •Время сыграть
- •Итоги
- •Дополнительная литература
- •Усложняем проект. Более грамотный поиск
- •Усложняем проект. Поиск лучшей стратегии с помощью MCS
- •Усложняем проект. Вычисление вероятности обнаружения
- •Глава 2. Установление авторства с помощью стилометрии
- •Проект #2: «Собака Баскервилей», «Война миров» и «Затерянный мир»
- •Стратегия
- •Установка NLTK
- •Корпусы текстов
- •Код стилометрии
- •Итоги
- •Дополнительная литература
- •Практический проект: охота на собаку Баскервилей с помощью распределения
- •Практический проект: тепловая карта пунктуации
- •Усложняем проект: фиксирование частотности
- •Глава 3. Суммаризация текста с помощью обработки естественного языка
- •Стратегия
- •Веб-скрапинг
- •Код для «У меня есть мечта»
- •Установка gensim
- •Код для суммаризации речи «Заправляйте свою кровать»
- •Проект #5. Суммаризация речи с помощью облака слов
- •Модули Word Cloud и PIL
- •Код для создания облака слов
- •Итоги
- •Дополнительная литература
- •Усложняем проект: ночные игры
- •Усложняем проект: суммаризация суммаризаций
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Одноразовый блокнот
- •Шифр «Ребекка»
- •Проект #6. Цифровой ключ к «Ребекке»
- •Стратегия
- •Код для шифрования
- •Отправка сообщений
- •Итоги
- •Дополнительная литература
- •Глава 5. Поиск Плутона
- •Проект #7. Воссоздание блинк-компаратора
- •Стратегия
- •Данные
- •Код блинк-компаратора
- •Использование блинк-компаратора
- •Проект #8. Обнаружение астрономических транзиентов путем дифференцирования изображений
- •Стратегия
- •Код для детектора транзиентов
- •Использование детектора транзиентов
- •Итоги
- •Дополнительная литература
- •Практический проект: представление орбитальной траектории
- •Практический проект: найди отличия
- •Усложняем проект: сосчитаем звезды
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Цель миссии «Аполлон-8»
- •Траектория свободного возврата
- •Задача трех тел
- •Проект #9. На Луну с «Аполлоном-8»!
- •Использование модуля turtle
- •Стратегия
- •Код программы для расчета свободного возврата «Аполлона-8»
- •Выполнение симуляции
- •Итоги
- •Дополнительная литература
- •Практический проект: симуляция шаблона поисков
- •Практический проект: запусти меня!
- •Практический проект: останови меня!
- •Усложняем проект: симуляция в истинном масштабе
- •Усложняем проект: реальный «Аполлон-8»
- •Глава 7. Выбор мест высадки на Марсе
- •Посадка на Марс
- •Карта MOLA
- •Проект #10. Выбор посадочных мест на Марсе
- •Стратегия
- •Код для выбора мест посадки
- •Результаты
- •Итоги
- •Дополнительная литература
- •Практический проект: убедимся, что рисунки становятся частью изображения
- •Практический проект: визуализация профиля высот
- •Практический проект: отображение в 3D
- •Практический проект: совмещение карт
- •Усложняем проект: три в одном
- •Усложняем проект: перенос прямоугольников
- •Глава 8. Обнаружение далеких экзопланет
- •Транзитная фотометрия
- •Проект #11. Симуляция транзита экзопланеты
- •Стратегия
- •Код для транзита
- •Эксперименты с транзитной фотометрией
- •Проект #12. Получение изображений экзопланет
- •Стратегия
- •Код для пикселизатора
- •Итоги
- •Дополнительная литература
- •Практический проект: обнаружение инопланетных мегаструктур
- •Практический проект: обнаружение транзита астероидов
- •Практический проект: добавление эффекта потемнения к краю
- •Практический проект: обнаружение пятен на звездах
- •Практический проект: обнаружение инопланетной армады
- •Практический проект: обнаружение планеты с луной
- •Практический проект: измерение продолжительности экзопланетного дня
- •Усложняем проект: генерация динамической кривой блеска
- •Глава 9. Как различить своих и чужих
- •Обнаружение лиц на фотографиях
- •Проект #13. Программирование робота-часового
- •Стратегия
- •Результаты
- •Обнаружение лиц в видеопотоке
- •Итоги
- •Дополнительная литература
- •Практический проект: размытие лиц
- •Усложняем проект: обнаружение кошачьих мордочек
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Распознавание лиц с помощью LBPH
- •Схема распознавания лиц
- •Извлечение гистограмм локальных бинарных шаблонов
- •Проект #14. Ограничение доступа к инопланетному артефакту
- •Стратегия
- •Поддержка модулей и файлов
- •Код для захвата видео
- •Код для обучения алгоритма распознавания лиц
- •Код для прогнозирования лиц
- •Результаты
- •Итоги
- •Дополнительная литература
- •Усложняем проект: добавление пароля и видеозахвата
- •Усложняем проект: похожие лица и близнецы
- •Усложняем проект: машина времени
- •Глава 11. Создание интерактивной карты побега от зомби
- •Проект #15. Визуализация плотности населения с помощью хороплетной карты
- •Стратегия
- •Библиотека анализа данных
- •Библиотеки bokeh и holoviews
- •Установка pandas, bokeh и holoviews
- •Работа с данными по уровню безработицы и плотности населения в округах и штатах
- •Разбираем код holoviews
- •Код для отрисовки хороплетной карты
- •Планирование маршрута
- •Итоги
- •Дополнительная литература
- •Усложняем проект: отображение на карте изменения численности населения США
- •Глава 12. Находимся ли мы в компьютерной симуляции?
- •Проект #16. Жизнь, Вселенная и пруд черепахи Йертл
- •Код симуляции пруда
- •Следствия симуляции пруда
- •Измерение затрат на пересечение строк или столбцов сетки
- •Результаты
- •Стратегия
- •Итоги
- •Дополнительная литература
- •Дополнение
- •Усложняем проект: поиск безопасного места в космосе
- •Усложняем проект: а вот и Солнце
- •Усложняем проект: взгляд глазами собаки
- •Усложняем проект: кастомизированный поиск слов
- •Усложняем проект: что за сложную паутину мы плетем
- •Усложняем проект: идем вещать с горы
- •Решения для практических проектов
- •Глава 2. Определение авторства с помощью стилометрии
- •Охота на собаку Баскервилей с помощью распределения
- •Тепловая карта пунктуации
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Составление графика символов
- •Отправка секретов шифром времен Второй мировой войны
- •Глава 5. Поиск Плутона
- •Представление орбитальной траектории
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Симуляция шаблона поисков
- •Заведи меня!
- •Останови меня!
- •Глава 7. Выбор мест высадки на Марсе
- •Убеждаемся, что рисунки становятся частью изображения
- •Визуализация профиля высоты
- •Отображение в 3D
- •Совмещение карт
- •Глава 8. Обнаружение далеких экзопланет
- •Обнаружение инопланетных мегаструктур
- •Обнаружение транзита астероидов
- •Добавление эффекта потемнения к краю
- •Обнаружение инопланетной армады
- •Обнаружение планеты с луной
- •Измерение продолжительности экзопланетного дня
- •Глава 9. Как различить своих и чужих
- •Размытие лиц
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата

Проект #4. Суммаризация речи с помощью gensim 97
другой?». То же и со многими приложениями Python: зачастую, когда нужно написать скрипт, вы узнаете, что это уже кто-то сделал. Один из примеров — gensim, открытая библиотека для обработки естественного языка при помощи статистического машинного обучения.
Слово gensim означает «генерация подобного» (generate similar). В этой библио теке используется основанный на графах алгоритм ранжирования TextRank. Создан он был на базе PageRank, разработанного Ларри Пейджем (Larry Page) и применяемого для ранжирования веб-страниц в поиске Google. В случае PageRank важность веб-сайта определяется количеством ссылок на него с других страниц. Чтобы использовать этот подход в обработке текста, алгоритмы измеряют, насколько каждое предложение похоже на другие. Предложение, имеющее наибольшее сходство, считается наиболее важным.
В текущем проекте мы задействуем gensim для обобщения напутственной речи адмирала Уильяма Макрейвена «Заправляйте свою кровать» («Make Your Bed»), с которой он выступил в Университете Техаса в Остине в 2014 году. Эта мотивирующая 20-минутная речь собрала более 10 миллионов просмотров на YouTube; позже на ее основе была издана книга, ставшая в 2017 году бестселлером New York Times.
ЗАДАЧА
Написать программу Python, использующую модуль gensim для суммаризации речи.
Установка gensim
Модуль gensim работает на всех ведущих операционных системах, но зависит от NumPy и SciPy. Если эти библиотеки у вас не установлены, вернитесь к главе 1 и выполните инструкции из раздела «Установка библиотек Python» на с. 31.
Чтобы установить gensim в Windows, используйте pip install -U gensim . Для установки из терминала используйте pip install --upgrade gensim. Для окружения conda используйте conda -c conda-forge gensim. Подробнее о gensim вы можете узнать на странице https://radimrehurek.com/gensim/.
Код для суммаризации речи «Заправляйте свою кровать»
Проработав программу dream_summary.py в проекте 3, вы познакомились с основами извлечения текста. Поскольку кое-какие детали вы уже знаете, то можете использовать gensim в качестве упрощенной альтернативы dream_summary.py. Назовите эту новую программу bed_summary.py или скачайте ее с сайта книги.

98 Глава 3. Суммаризация текста с помощью обработки естественного языка
Импорт модулей, веб-скрапинг и подготовка строки речи
В листинге 3.6 повторяется код из dream_summary.py, использованный для подготовки речи в качестве строки. Описание этого кода находится на с. 88.
Листинг 3.6. Импорт модулей и скачивание речи как строки bed_summary.py, часть 1
import requests import bs4
from nltk.tokenize import sent_tokenize
from gensim.summarization import summarize
url = 'https://jamesclear.com/great-speeches/make-your-bed-by-admiral
-william-h-mcraven' page = requests.get(url) page.raise_for_status()
soup = bs4.BeautifulSoup(page.text, 'html.parser')
p_elems = [element.text for element in soup.find_all('p')]
speech = ' '.join(p_elems)
Мы будем тестировать gensim на необработанной речи, взятой из интернета, поэтому модули для ее очистки вам не понадобятся. Модуль gensim производит все подсчеты внутренне, то есть Counter не понадобится, но потребуется gensim- функция summarize(), которая будет делать суммаризацию текста . Еще одно отличие — это адрес url .
Суммаризация речи
Листинг 3.7 завершает программу, делает суммаризацию речи и выводит результаты.
Листинг 3.7. Выполнение gensim, удаление повторяющихся строк и вывод резюме
bed_summary.py, часть 2
print("\nSummary of Make Your Bed speech:") summary = summarize(speech, word_count=225) sentences = sent_tokenize(summary)
sents = set(sentences) print(' '.join(sents))
Начинаем с вывода заголовка резюме. Далее вызываем функцию summarize(), которая делает суммаризацию речи в 225 слов. Из этого количества слов получится примерно 15 предложений с учетом того, что средняя длина предложения составит 15 слов. Помимо подсчета слов можно передать в summarize()

Проект #4. Суммаризация речи с помощью gensim 99
отношение, например ratio=0.01. В этом случае длина обобщения составит 1 % от длины документа.
В идеале можно сделать суммаризацию речи и вывести результат за один шаг.
print(summarize(speech, word_count=225))
К сожалению, иногда gensim повторяет предложения в резюме, что мы наблюдаем в следующем примере:
Summary of Make Your Bed speech:
Basic SEAL training is six months of long torturous runs in the soft sand, midnight swims in the cold water off San Diego, obstacle courses, unending calisthenics, days without sleep and always being cold, wet and miserable. Basic SEAL training is six months of long torturous runs in the soft sand, midnight swims in the cold water off San Diego, obstacle courses, unending calisthenics, days without sleep and always being cold, wet and miserable.
--snip--
Чтобы избежать повторов текста, сначала нужно разделить предложения в переменной суммаризации с помощью функции NLTK sent_tokenize(). Далее создадим из этих предложений множество, в котором будут удалены повторы. В завершение выведем результат.
Поскольку множества не упорядочены, то при повторном выполнении программы последовательность предложений может изменяться.
Summary of Make Your Bed speech:
If you can't do the little things right, you will never do the big things right.And, if by chance you have a miserable day, you will come home to a bed that is made — that you made — and a made bed gives you encouragement that tomorrow will be better.If you want to change the world, start off by making your bed.During SEAL training the students are broken down into boat crews. It's just the way life is sometimes.If you want to change the
world get over being a sugar cookie and keep moving forward.Every day during training you were challenged with multiple physical events — long runs, long swims, obstacle courses, hours of calisthenics — something designed to test your mettle. Basic SEAL training is six months of long torturous runs in the soft sand, midnight swims in the cold water off San Diego, obstacle courses, unending calisthenics, days without sleep and always being cold, wet and miserable.
>>>
======= RESTART: C:\Python372\sequel\wordcloud\bed_summary.py =======
Summary of Make Your Bed speech:
It's just the way life is sometimes.If you want to change the world get over being a sugar cookie and keep moving forward.Every day during training you were challenged with multiple physical events — long runs, long swims, obstacle courses, hours of calisthenics — something designed to test your mettle. If you can't do the little things right, you will never do the big