UIMA, извлечение полуструктурированных (табличных) данных из текста - PullRequest
0 голосов
/ 09 мая 2019

Я работаю над приложением, использующим Apache UIMA для задачи NLP о извлечении сущности для конкретного домена.

Вариант использования следующий:

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

Какие проблемы :

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

Итак, есть вопросы:

  1. Я ищу что-то более гибкое и удобочитаемое с точки зрения правил аннотации, т. Е. Могу ли я использовать Ruta в таких сценариях, когда необходимо аннотировать данные в форме таблиц? Любые примеры правил будут очень полезны. Исследования по этой теме пока мало что дали.
  2. Я ищу подход к извлечению данных, если метаданных не существует (см. Ниже. Подойдет ли Рута здесь или что-нибудь еще? Любые примеры приветствуются
  3. Я ищу инструменты, которые упростят работу с аннотированным текстом, то есть для профилирования, тестирования. Опять Рута решит это?

Примеры:

  1. OCR с метаданными, данные после этапа извлечения:
<table> 
    <tr> 
      <th>Name</th> 
      <th>Favorite Color</th> 
    </tr> 
    <tr> 
      <td>Bob</td> 
      <td>Yellow</td> 
    </tr> 
    <tr> 
      <td>Michelle</td> 
      <td>Purple</td> 
    </tr> 
</table>
  1. OCR без метаданных , данные после этапа извлечения:
Name    Favorite Color
Bob Yellow
Michelle    Purple

1 Ответ

0 голосов
/ 22 мая 2019

Вопрос 1:

По моему очень субъективному мнению, Рута очень хорошо подходит для этих задач, особенно если обработка текста должна быть реализована в UIMA. Существует множество вариантов задания этой задачи извлечения в Руте в зависимости от доступной аннотации и структуры таблиц. Вот примерный набор правил, основанный на выводе HtmlAnnotator (фактически, это только одно правило):

PACKAGE uima.example;

TYPESYSTEM utils.HtmlTypeSystem;

ENGINE utils.HtmlAnnotator;

EXEC(HtmlAnnotator, {TAG});

ADDRETAINTYPE(WS);
TAG{->TRIM(WS)};
REMOVERETAINTYPE(WS);

DECLARE Relation (Annotation attribute, Annotation value);

BLOCK(tables) TABLE{} {
    TR{-CONTAINS(TH)-> CREATE(Relation, "attribute" = a, "value" = v)}
        <-{# a:TD v:TD;};
}

Вопрос 2:

Конечно, вы можете воссоздать структуру таблицы вопроса 1, используя правила, а затем применить те же правила. Определение структуры таблицы в значительной степени зависит от имеющейся у вас информации о таблицах и от того, какой вывод производит преобразователь текста, например, знаете ли вы, какие атрибуты / значения будут иметь место, или используете вкладки преобразователя для разделения ячеек. Вот снова примерный набор правил, основанный на выводе PlainTextAnnotator:

PACKAGE uima.example;

TYPESYSTEM utils.PlainTextTypeSystem;

ENGINE utils.PlainTextAnnotator;

EXEC(PlainTextAnnotator, {Line});

ADDRETAINTYPE(WS);
Line{->TRIM(WS)};
Paragraph{->TRIM(WS)};
REMOVERETAINTYPE(WS);

DECLARE Relation (Annotation attribute, Annotation value);
DECLARE Attribute, Value;

DECLARE TextTable, Row;
DECLARE HeaderInd, HeaderLine;

// mock some annotations
"Name" -> HeaderInd;
"Color" -> HeaderInd;

Line{CONTAINS(HeaderInd, 50, 100, true)-> HeaderLine};

Paragraph{STARTSWITH(HeaderLine)-> TextTable};
TextTable->{Line{-PARTOF(HeaderLine)-> Row};};

FOREACH(row) Row{}{

    row{CONTAINS(W,2,2)} ->{W{-> Attribute} W{-> Value};};
    row{-> CREATE(Relation, "attribute" = Attribute, "value" = Value)};
}

Вопрос 3:

UIMA Ruta Workbench предоставляет несколько полезных инструментов IDE, в том числе профилирование и тестирование .

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я разработчик UIMA Ruta

...