- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему 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. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
Усложняем проект: ночные игры 109
Настройка параметров max_words и relative_scaling также влияет на представление облака слов. В зависимости от нужного вам уровня детализации все эти вариации могут как помочь, так и навредить.
Итоги
Вэтой главе мы использовали техники экстрактивной суммаризации, чтобы создать краткий обзор речи Мартина Лютера Кинга-младшего «У меня есть мечта». Затем мы использовали бесплатный готовый модуль gensim для суммаризации речи адмирала Макрейвена, что потребовало еще меньшего количества кода.
Взавершение же мы применили модуль wordcloud для создания интересного дизайна с использованием облака слов.
Дополнительная литература
Книга «Automate the Boring Stuff with Python: Practical Programming for Total Beginners»1 (No Starch Press, 2015) Эла Свейгарта (Al Sweigart) раскрывает тему регулярных выражений (глава 7) и веб-скрапинга (глава 11), включая использование модулей requests и Beautiful Soup.
«Make Your Bed: Little Things That Can Change Your Life… And Maybe the World»2, 2nd ed. (Grand Central Publishing, 2017) Уильяма Макрейвена (William H. McRaven) — книга для по саморазвития, в основу которой легло напутственное обращение адмирала в Техасском университете. Саму речь вы также можете найти онлайн на https://www.youtube.com/.
Усложняем проект: ночные игры
Используйте wordcloud для создания новой игры в рамках сюжета «Ночных игр». Сделайте суммаризацию описаний фильмов из Википедии или IMDb и узнайте, смогут ли ваши друзья угадать название кино. На рис. 3.8 показаны некоторые примеры.
Если вы не особо увлекаетесь кино, то выберите другую сферу. В качестве альтернативы можно взять известные романы, эпизоды «Звездного пути» («Star Trek») или тексты песен (рис. 3.9).
1Свейгарт Э. «Автоматизация рутинных задач с помощью Python: практическое руководство для начинающих».
2Макрейвен У. «Заправляй кровать. 10 простых правил, которые помогут изменить твою жизнь и, возможно, весь мир».
110 Глава3. Суммаризация текстаспомощьюобработкиестественногоязыка
Рис. 3.8. Облака слов для двух фильмов, вышедших в 2010 году: «Как приручить дракона» («How to Train Your Dragon») и «Принц Персии» («Prince of Persia»)
Рис. 3.9. Облако слов, созданное из текста песни «I.G.Y.» Дональда Фейгена
В последние годы вновь становятся популярными настольные игры, так что вы можете поддержать этот тренд и напечатать облака слов на карточках. Возможен
Усложняем проект: суммаризация повести 111
и альтернативный вариант — в рамках цифрового пространства: дайте игроку несколько вариантов ответов для каждого облака слов. При этом игра должна отслеживать количество верных ответов.
Усложняем проект: суммаризация суммаризаций
Протестируйте свою программу из проекта 3 на ранее суммаризованном тексте, например страницах Википедии. Всего пять предложений сформировали хороший обзор gensim.
Ввести максимальное количество слов в предложении для суммаризации: 30 Ввести количество предложений в резюме: 5
СУММАРИЗАЦИЯ:
Gensim is implemented in Python and Cython.
Gensim is an open-source library for unsupervised topic modeling and natural language processing, using modern statistical machine learning.
[12] Gensim is commercially supported by the company rare-technologies.com, who also provide student mentorships and academic thesis projects for Gensim via their Student Incubator programme.
The software has been covered in several new articles, podcasts and interviews.
Gensim is designed to handle large text collections using data streaming and incremental online algorithms, which differentiates it from most other machine learning software packages that target only in-memory processing.
Далее попробуйте применить версию gensim из проекта 4 к скучным соглашениям на обслуживание, которые никто никогда не читает. Пример соглашения об использовании служб Microsoft доступен по адресу https://www.microsoft.com/ en-us/servicesagreement/default.aspx1. Конечно же, чтобы оценить результаты, вам придется прочитать все соглашение, чего практически никто не делает. Такой вот замкнутый круг!
Усложняем проект: суммаризация повести
Напишите программу, которая делает суммаризацию романа «Собака Баскервилей» по главам. Пусть резюме глав будут краткими — около 75 слов каждое.
Для получения копии повести с названиями глав выполните скрапинг текста с сайта Project Gutenberg при помощи следующей строки кода:
url = 'http://www.gutenberg.org/files/2852/2852-h/2852-h.htm'.
1 https://www.microsoft.com/ru-ru/servicesagreement/ — на русском языке.
112 Глава3. Суммаризация текстаспомощьюобработкиестественногоязыка
Чтобы разделить элементы глав, а не абзацев, используйте такой код:
chapter_elems = soup.select('div[class="chapter"]') chapters = chapter_elems[2:]
Вам также понадобится выбрать элементы абзацев (p_elems) из каждой главы, используя тот же способ, что и в dream_summary.py.
Сниппеты ниже показывают некоторые результаты при использовании 75 слов для суммаризации каждой главы:
--snip--
Chapter 3:
"Besides, besides—" "Why do you hesitate?" "There is a realm in which the most
acute and most experienced of detectives is helpless." "You mean that the thing is supernatural?" "I did not positively say so." "No, but you evidently think it." "Since the tragedy, Mr. Holmes, there have come to my ears several incidents which are hard to reconcile with the settled order of Nature." "For example?" "I find that before the terrible event occurred several people had seen a creature upon the moor which corresponds with this Baskerville demon, and which could not possibly be any animal known to science.
--snip--
Chapter 6:
"Bear in mind, Sir Henry, one of the phrases in that queer old legend which Dr. Mortimer has read to us, and avoid the moor in those hours of darkness when the powers of evil are exalted." I looked back at the platform when we had left it far behind and saw the tall, austere figure of Holmes standing motionless and gazing after us.
Chapter 7:
I feared that some disaster might occur, for I was very fond of the old man, and I knew that his heart was weak." "How did you know that?" "My friend Mortimer told me." "You think, then, that some dog pursued Sir Charles, and that he died of fright in consequence?" "Have you any better explanation?" "I have not come to any conclusion." "Has Mr. Sherlock Holmes?" The words took away my breath for an instant but a glance at the placid face and steadfast eyes of my companion showed that no surprise was intended.
--snip--
Chapter 14:
"What's the game now?" "A waiting game." "My word, it does not seem a very cheerful place," said the detective with a shiver, glancing round him at the gloomy slopes of the hill and at the huge lake of fog which lay over the Grimpen Mire.
Far away on the path we saw Sir Henry looking back, his face white in the moonlight, his hands raised in horror, glaring helplessly at the frightful thing which was hunting him down.
--snip--
Усложняем проект: важно не только что ты говоришь, но и как! 113
Усложняем проект: важно не только что ты говоришь, но и как!
Написанные вами на данный момент программы суммаризации текста выводят предложения строго по степени их важности. Это означает, что последнее предложение речи (или любого текста) в резюме может стать первым. Цель суммаризации — находить важные предложения, но ничто не мешает нам изменить порядок их отображения.
Напишите программу суммаризации текста, отображающую наиболее важные предложения в исходном порядке их появления. Сравните результаты с результатами программы в проекте 3. Удалось ли таким образом заметно улучшить резюме?