Adobe PDF Extract API — это мощный инструмент для получения информации из ваших PDF-файлов. Это включает в себя макет и стиль вашего PDF, табличные данные в удобном для использования формате CSV, изображения и необработанный текст. Учитывая все обстоятельства, необработанный текст может быть наименее интересным аспектом API. Одна полезная возможность — взять необработанный текст и предоставить его поисковым системам (см. Использование PDF-файлов с Jamstack — Добавление поиска с извлечением текста). Но еще одна интересная возможность работы с текстом связана с обработкой естественного языка, или НЛП.
В широком смысле (очень широко, см. Статью в Википедии для более глубокого понимания) НЛП — это понимание содержания текста. Голосовые помощники — отличный пример этого из реального мира. Что делает устройства Alexa и Google Voice такими мощными, так это то, что они не просто слышат, что вы говорите, но и понимают намерение того, что вы сказали. Это отличается от необработанного текста.
Если я скажу «я работаю в Adobe», это будет другое утверждение, чем «я живу в глинобитном доме». Понимание различий между одними и теми же словами требует машинного обучения, искусственного интеллекта и других слов, которые доступны только очень умным людям.
Организации, работающие с входящими PDF-файлами или имеющие дело с большой историей существующих документов, могут использовать сочетание API извлечения PDF-файлов и NLP, чтобы лучше узнать, что содержится в их PDF-файлах.
В этой статье мы рассмотрим пример, демонстрирующий совместную работу этих двух мощных функций. Наше демонстрационное приложение будет сканировать каталог PDF-файлов. Для каждого PDF сначала извлекается текст из PDF. Затем он передаст этот текст в NLP API. В обеих операциях мы можем сохранить результаты для более быстрой обработки позже.
Для нашего NLP API мы будем использовать сервис от Diffbot. У Diffbot есть несколько API, но мы сосредоточимся на их сервисе естественного языка. Их API довольно прост в использовании, но предоставляет множество данных, в том числе:
- Сущности или, по сути, субъекты документа.
- Тип этих сущностей, например, имя — это сущность, а тип — человек.
- Факты, раскрытые в документе: «Основателем такой-то компании был Джо Такой-то».
- Настроение (насколько негативно или позитивно что-то).
API Diffbot также можно обучить с помощью пользовательских данных, чтобы он мог лучше анализировать ваш ввод. Проверьте их документы для получения дополнительной информации, и их быстрый старт — отличный пример. Они предоставляют двухнедельную пробную версию и не требуют кредитной карты для регистрации.
Вот простой пример того, как вызывать их API с помощью Node.js:
Итак, давайте создадим нашу демонстрацию. У нас уже есть папка PDF-файлов, поэтому мой общий процесс будет таким:
- Получите список PDF-файлов.
- Для каждого посмотрите, есть ли у меня уже текст. Получив PDF-файл с именемcatsrule.pdf, я буду искать catrule.txt.
- Если нет, используйте наш API извлечения, чтобы получить текст.
- Для каждого посмотрите, получил ли я уже результаты НЛП. Получив PDF-файл с именемcatsrule.pdf, я буду искать catrule.json.
Вот код, представляющий эту логику, за вычетом фактических реализаций любого API (я также удалил операторы require):
Сохраняя результаты, этот сценарий можно запускать несколько раз по мере добавления новых PDF-файлов. Теперь давайте посмотрим на наши вызовы API. Во-первых, getText
:
По большей части это взято прямо из нашей Extract API docs. Наш SDK возвращает ZIP-файл, поэтому мы используем пакет NPM (AdmZip), чтобы получить результат JSON из ZIP. Затем мы отфильтровываем текстовые элементы из нашего результата JSON, чтобы создать одну большую текстовую строку. Конечный результат таков: если в качестве входных данных задано имя файла PDF, мы получаем текстовую строку.
Теперь давайте посмотрим на код, выполняющий обработку текста на естественном языке:
Это практически идентично предыдущему примеру. Обратите внимание, что вы можете настроить значение fields
, чтобы изменить то, что Diffbot делает с вашим текстом. В результате получается впечатляюще большой объем данных. Подобно PDF Extract API, JSON может состоять из сотен строк. Если вы хотите увидеть сырой результат, вы можете посмотреть пример здесь. Предупреждение: при форматировании это примерно шестьдесят две тысячи строк данных.
Ну что теперь? Отличный вопрос! В качестве быстрой демонстрации я подумал, что было бы неплохо отфильтровать данные НЛП до списка людей, упомянутых в PDF, а также категорий. Для людей я посмотрел на возвращенные сущности. Вот один пример:
Обратите внимание на значение в allTypes
, которое указывает, что это человек. Вот пример организации, не являющейся физическим лицом, из небольшой компании в Вашингтоне:
Категории немного проще, так как они не нуждаются в какой-либо фильтрации (кроме уникальности):
Зная, где взять материал, я написал скрипт, который сканировал мои каталоги PDF и для каждого PDF пытался «собрать» данные:
Как и прежде, мы убрали операторы require. Конечным результатом этого сценария является файл JSON с каждым PDF-файлом и списком людей и категорий. Для обоих мы фильтруем уникальные значения. (Конечно, это может быть проблематично для имен, но я полагаю, что вероятность появления двух людей с одинаковым именем в PDF-файле невелика.)
Используя эти данные, мы можем затем создать веб-приложение для его загрузки и отображения на экране:
Код для веб-приложения не очень интересен, но если вы хотите увидеть его или любой другой образец из этой статьи, вы можете найти его здесь: https://github.com/cfjedimaster/document-services-demos /tree/main/article_support/nlp
Если вы хотите попробовать это сами, подпишитесь на бесплатную пробную версию PDF Extract API и оформите заказ на Diffbot, чтобы более подробно ознакомиться с их потрясающими API!