Автор книги: Валентин Арьков
Жанр: Руководства, Справочники
Возрастные ограничения: +12
сообщить о неприемлемом содержимом
Текущая страница: 3 (всего у книги 3 страниц)
2.10. Стоп-слова
Загружаем библиотеку обработки естественного языка NLTK – Natural Language ToolKit.
Нам понадобится список stop_words, см. рис.
В буквальном переводе их называют «стоп-словами». Имеются в виду служебные слова, которые нужно удалить перед анализом. То есть слова, которые «нужно остановить на входе», то есть «запрещено пропускать». Сюда относятся предлоги, местоимения, числительные и прочие слова, не имеющие самостоятельного значения для предварительного анализа содержания текста. Можно сказать, что это своеобразная фильтрация.
Задание. Просмотрите в Википедии статьи Stop word, Шумовые слова.
Рис. Загрузка списка «стоп-слов»
Построим облако слов по результатам фильтрации. Как видим, состав облака слов немного изменился, см. рис.
Рис. Облако слов с фильтрацией стандартных стоп-слов
Как видим, большинство слов никак не связаны с тематикой анализируемого текста. Можно видеть такие слова как «человек», «самый», «говорить», «видеть» и так далее.
Рис. Облако слов после фильтрации
Рассмотрим результаты стандартной «фильтрации» стоп-слов, см. рис. Пока что остается много «лишних» слов.
Рис. Результаты фильтрации
Проверим, входят ли общеупотребительные служебные слова в наш список «стоп-слов». Сформируем вспомогательный массив из нескольких простых слов, таких как «это» и «наш». Проверим вхождение слов в список в цикле и выведем результаты на экран.
Как видим, результаты неутешительные, см. рис.
Такой неполный список вряд ли нас удовлетворит. Тем более, что вряд ли существует такой «универсальный» список слов, ведь для каждой задачи списки будут отличаться. В одной ситуации одни и те же слова могут быть полезными, информативными. А в другой ситуации это будет информационный шум.
Рис. Проверка списка фильтрации
2.11. Персонализация стоп-слов
Попробуем составить свой список стоп-слов – для нашей конкретной задачи. Для начала нам понадобится список уникальных лемматизированных слов из нашего текста, отсортированный по алфавиту. Разделим строку текста на слова, разделенные пробелами. Чтобы удалить дубликаты, преобразуем список в множество и обратно, см. рис.
Рис. Список уникальных словCформируем табличный объект DataFrame и запишем его в файл в формате MS Excel. Для этого используем функцию to_excel. Указываем название файла, см. рис.
Рис. Записываем список слов в файл
Этот файл располагается в рабочем каталоге в облачном хранилище, но только на время работы данного блокнота. Файл можно найти во вкладке Files.
Рис. Вывод в файл
Загружаем файл на локальный компьютер и открываем в табличном редакторе. Удаляем первый столбец с номерами строк, см. рис.
Рис. Список слов в Excel
Сохраним таблицу в новом файле и назовем этот файл stop_words. xlsx. Оставляем шумовые слова и удаляем из нашей таблицы слова, имеющие отношение к теме документа: «статистика», «экономика», «предприятие» и т. п.
Удаляем ненужную строку целиком. Для этого наводим курсор на заголовок строки, щелкаем правой кнопкой мыши и выбираем Удалить.
Конечно, потребуется некоторое время для удаления важных, ключевых слов. В нашем примере их набралось около сотни, см. рис. Этот список нам пригодится и в дальнейшей работе.
Главная проблема – это знания эксперта, способность специалиста выделить важное из большого массива информации.
Кроме того, для каждой темы потребуется свой специализированный набор стоп-слов. Сюда же попадают ошибки написания или распознавания слов, например, «ящук». Итак, список слов стал немного короче, см. рис.
Рис. Сокращённый список
Сохраняем таблицу Excel в новом файле stop_words. xlsx. Загружаем файл в рабочую область облачного блокнота. Для чтения файла используем функцию read_excel из библиотеки pandas. Получаем табличный объект pandas DataFrame. Просматриваем содержимое с помощью функций head и tail – несколько первых и последних строк, см. рис.
Рис. Загрузка файла
Мы указали, что в нашем файле нет строки заголовков для загруженных столбцов: header=None. Поэтому в качестве заголовка столбца указан его порядковый номер 0. Строки тоже начинаются с нулевой. Как мы помним, в Питоне нумерация обычно начинается с нуля.
Извлекаем значения ячеек таблицы с помощью свойства values. Преобразуем полученный столбец в объект типа список tolist. Выводим на экран начало и конец списка. Здесь мы не используем команду print. Просто пишем названия нужных переменных через запятую. Для Colab это сработает.
Попутно выясняем размер нашего списка – команда len – length – длина (списка).
Сравниваем содержимое таблицы и списка. Убеждаемся, что ничего по дороге не потеряли.
Рис. Преобразуем таблицу в список
Затем в цикле проверяем присутствие каждого слова в нашем специализированном списке стоп-слов my_stop_words.
Просматриваем полученный «отфильтрованный» текст. Теперь здесь остались только информативные ключевые слова, см. рис.
Рис. Отфильтрованный текст
Нам осталось удалить лишние пробелы в тексте. Для этого построим цикл с предварительным условием while. Функция find возвращает номер позиции искомой подстроки в исходной строке либо минус единицу, если подстрока не найдена.
Если в тексте есть два пробела подряд, то их нужно заменить на одиночный пробел. Операция поиска и замены replace повторяется до тех пор, пока не закончатся двойные пробелы.
Выводим отфильтрованный текст на экран и видим, что остались только одиночные пробелы, см. рис.
Рис. Удаление лишних пробелов
Сгенерируем облако слов по отфильтрованному тексту. Можно видеть, что на графике представлены только выбранные ключевые слова, см. рис. Этот вариант был получен вручную.
Рис. Отфильтрованное облако слов
Применим маску и перестроим облако слов, см. рис.
Сохраняем картинку в файл.
Рис. Облако слов по маске
2.12. Гистограмма
По существу, облако слов – это наглядное представление гистограммы частот.
Вернемся к исходному тексту и построим для него гистограмму частот. Какие слова встречаются чаще всего? Это простые общеупотребительные «служебные» слова, см. рис.
Рис. Гистограмма частот слов исходного текста
Как видим, частота слов довольно быстро убывает. При этом первые 30 слов не несут особого смысла и не подходят в качестве ключевых.
Это явление пытались объяснить и даже использовали для этого слово «закон», хотя здесь далеко до настоящих законов природы.
Задание. Просмотрите в Википедии статью Закон Ципфа.
Проведём анализ частоты ключевых слов в нашем отфильтрованным тексте.
Построим столбиковую диаграмму частот, см. рис.
Можно видеть, что первые пять-десять слов встречаются чаще всего. Именно они будут выделены в облаке слов самым крупным шрифтом.
Скорее всего, эти слова соответствуют теме рассматриваемого текста.
Рис. Гистограмма частот отфильтрованного текста
Задание. Выберите длинное видео на канале автора [1]. Загрузите расшифровку видео и составьте по нему свой список стоп-слов. Постройте облако слов и гистограмму частот. Затем используйте свой список стоп-слов для обработки другого текста на ту же самую тему. Это может быть следующая лекция выбранного цикла. Список стоп-стол можно уточнять и дополнять.
2.13. Частотный анализ текста книги
Попробуем повторить основные шаги анализа текста для учебного пособия в формате PDF.
Для опытов используем страницу автора на сайте издательства:
https://ridero.ru/
Переходим в раздел Магазин. В строке поиска вводим: Арьков Валентин, см. рис.
Рис. Страница книг автора
Выбираем первую книгу и бесплатно загружаем вариант в формате PDF.
Рис. Загрузка книги
Если открыть файл PDF в Блокноте, мы обнаружим много служебной информации, см. рис. А нам для анализа нужен только текст – без картинок и форматирования.
Рис. Содержимое файла PDF
Откроем PDF с помощью текстового редактора MS Word. Последние версии позволяют открыть такой формат на редактирование. Затем сохраняем его как обычный текст в формате *.TXT. На всякий случай откроем файл в Блокноте и сохраним в формате UTF-8.
Затем загружаем фал по проверенной технологии, см. рис.
Рис. Загружаем файл
Построим облако слов. Для начала – без фильтрации, см. рис.
Рис. Облако слов без фильтрации
Дальнейшие действия понятны. Мы их уже рассмотрели.
Задание. Загрузите учебное пособие автора на сайте Ридеро [2]. Постройте облако слов и гистограмму частот.
Благодарность
Автор выражает признательность организаторам программы переподготовки МИФИ и Университета 2030 за оригинальные идеи и демонстрацию технологий, которые были использованы в данной работе.
Ссылки
1. Канал автора на Youtube для анализа видео:
https://www.youtube.com/@ACYTV
2. Книги автора на сайте Ридеро:
https://ridero.ru/books/catalog/?offset=0&q=Арьков+Валентин
3. Пример авторской программы для анализа распределения на Python:
https://github.com/Valentin-Arkov/Statistics/blob/master/Frequency_Distribution_Analysis.ipynb
Литература
Марк Лутц. Python. Карманный справочник. М.: Диалектика, 2019. 320 с.
Марк Лутц. Изучаем Python. Том 1. М.: Диалектика, 2019. 832 с.
Марк Лутц. Изучаем Python. Том 2. М.: Вильямс, 2020. 720 с.
Майкл Доусон. Программируем на Python. СПб.: Питер, 2020. 416 с.
Эрик Мэтиз. Изучаем Python. СПб.: Питер, 2021. 512 c.
Дж. Вандер Плас. Python для сложных задач. Наука о данных и машинное обучение. СПб.: Питер, 2018. 576 с.
Уэс Маккинни. Python и анализ данных. М.: ДМК Пресс, 2015. 484 с.
Джоэл Грас. Data Science. Наука о данных с нуля. СПб.: БХВ-Петербург, 2020. 411 с.
Послесловие
Если читателю удалось добраться до конца текста и при этом освоить материал – поздравляем!
Можно похвалить себя и отметить данное событие.
Можно даже материально поддержать наш проект по изданию учебных материалов, покупая наше пособие по цене читателя на сайте издательства Ридеро. Но это только по желанию.
До новых встреч!
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.