Извлекайте полезную информацию из текста с помощью Python и машинного обучения

Поиск по тексту - одно из ключевых направлений приложений машинного обучения в области естественного языка.

Но что, если нам нужно искать несколько ключевых слов в большом документе (более 100 страниц). Кроме того, что, если бы у нас был контекстный поиск (поиск по ключевым словам со схожим значением) в нашем документе! - Обычное решение 'CTRL + F' либо заняло бы много времени, чтобы выполнить эту задачу ( или в случае контекстного поиска он не сможет найти какой-либо значимый текст).

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

Предварительная обработка данных

Первым шагом при создании любого решения на основе машинного обучения является предварительная обработка данных. В нашем случае мы будем предварительно обрабатывать PDF-документ с помощью пакета PyPDF2 на Python, а затем конвертировать весь текст в объект документа Spacy. Для читателей, которые не работали над Spacy - это расширенная библиотека с открытым исходным кодом на Python, используемая для различных задач НЛП. Для пользователей, которые хотят узнать больше о Spacy, перейдите по этой ссылке, чтобы прочитать документацию и узнать больше о Spacy - https://spacy.io/

Сначала мы загрузим документ PDF, очистим текст и затем преобразуем его в объект документа Spacy. Для выполнения этой задачи можно использовать следующий код:

Сначала нам нужно будет загрузить модель Spacy «en_core_web_lg», которая представляет собой предварительно обученную модель английского языка, доступную в Spacy. Spacy также обеспечивает поддержку нескольких языков (больше можно найти в ссылке на документацию). Кроме того, в Spacy есть несколько вариантов моделей (маленькие, средние и большие), и в нашем случае мы будем работать с большой моделью, так как мы должны работать с векторами слов, которые поддерживаются только с большим вариантом модели.

Параметр «setCustomBoundaries ()» используется как метод сегментации предложений клиентов, а не вариант по умолчанию. Тот же метод может быть изменен в зависимости от документа, с которым мы имеем дело.

Когда у нас будет готов объект документа Spacy, мы можем перейти к следующей части обработки входного запроса (ключевых слов), который нам нужно найти в документе.

Обработка запроса - поиск похожих ключевых слов

Прежде чем перейти к кодированию, давайте рассмотрим более широкий подход, которому мы следуем, чтобы получить более точные результаты поиска по искомому документу.

Вплоть до этапа предварительной обработки данных мы уже преобразовали текст нашего PDF-документа в объект документа Spacy. Теперь нам также нужно преобразовать наши ключевые слова в объект документа Spacy, преобразовать их в эквивалентную векторную форму ((300,) измерение), а затем найти похожие ключевые слова, используя косинусное сходство. В конце у нас будет исчерпывающий список похожих ключевых слов вместе с исходными ключевыми словами, по которым мы теперь можем выполнять поиск по нашему документу для получения точных результатов.

Обратитесь к приведенному ниже коду для выполнения этой задачи.

Теперь, когда мы нашли слова, похожие по контексту на наши исходные ключевые слова, давайте займемся последней частью поиска.

Поиск ключевых слов по тексту

Для поиска мы будем использовать класс PhraseMatcher класса Matcher Spacy. На этом этапе важно помнить, что объект документа Spacy отличается от простой строки Python, и поэтому мы не можем напрямую использовать if then else для поиска результатов.

Обратитесь к приведенному ниже коду для выполнения этой задачи.

Приведенный выше код будет искать каждое ключевое слово, которое у нас есть, по всему тексту и вернет нам все предложение, где бы оно ни было найдено.

Приведенный выше код сгенерирует следующий вывод:

Вы можете увеличить или уменьшить количество похожих ключевых слов, которые вы хотите найти для любых исходных ключевых слов. Кроме того, как только вы получите результаты во фрейме данных, вы можете просто добавить еще несколько логик для ранжирования результатов (придать больший вес точному совпадению ключевых слов и т. Д.).

Примечание. Увеличение количества похожих ключевых слов до большого количества может увеличить вычислительные затраты всей программы и, следовательно, должно выбираться с умом.

Вот как вы можете создать свою собственную программу Python на основе машинного обучения для выполнения поиска по любому тексту.

В случае любого другого источника ввода (фотографии, веб-страницы и т. Д.) Вам просто нужно настроить часть предварительной обработки данных (OCR, Web Scraping и т. Д.), А остальная логика должна работать нормально.