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!