Вопрос 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