2016-06-14 2 views
3

Возможна ли последовательность в uima ruta. Например:Возможна ли последовательность? Uima ruta

входного файла:

some text 
Fig 1.1 
Table 1.1 
Fig 1.2 
some text 
Pic 1.2 
Table 1.2 
some text 
Table 1.3 
Pic 1.3 
some text 
Fig 1.4 
some text 
Table 1.4 
some text 
Table 1.5 
Fig 1.6 
Box 1.1 
Fig 1.5 

Как я могу найти недостающий рисунок (рис 1,3)

+0

Пожалуйста, добавьте больше информации. –

+0

Вы можете определить числовые переменные, либо два INT, либо один DOUBLE, сохранить числа фигуры в переменных и затем сопоставить значения, чтобы определить, отсутствует ли фигура. –

+0

Да, у меня была идея сохранить число в переменной, Но я не знаю, как его сравнить. Можете ли вы это объяснить? –

ответ

0

Вот пример того, как это может быть сделано с UIMA Ruta 2.5.0.

Введите текст:

some text 
Fig 1.1 
some text 
Pic 1.2 
some text 
Pic 1.3 
some text 
Fig 1.4 
some text 

Правило сценария:

DECLARE FigureInd; 
DECLARE FigureMention (INT chapter, INT section); 

ACTION FM(INT chap, INT sect) = CREATE(FigureMention, "chapter" = chap, "section" = sect); 

"Fig"-> FigureInd; 

INT c, s; 
(FigureInd NUM{PARSE(c)} PERIOD NUM{PARSE(s)}){-> FM(c,s)}; 

DECLARE FigMissing; 
f1:FigureMention #{-> FigMissing} f2:FigureMention 
    {f1.chapter == f2.chapter, f1.section < (f2.section - 1)}; 

INT pc, ps; 
f:FigureMention{-> pc=f.chapter, ps=f.section} 
    FigMissing->{ 
    (ANY @NUM{PARSE(c)} PERIOD NUM{PARSE(s)}){c==pc,s==ps+1-> FM(c,s), pc=c, ps=s}; 
    }; 

Создано FigureMention аннотаций:

Fig 1.1 
Pic 1.2 
Pic 1.3 
Fig 1.4 

Раствор для UIMA Ruta 2.4.0 очень похож, но не позволяет прямое использование признаков выражений метки аннотации. Значения этих функций должны храниться в дополнительных переменных. И нужно применить булевскую проверку после установки переменных. Здесь решение для UIMA Ruta 2.4.0:

DECLARE FigureInd; 
DECLARE FigureMention (INT chapter, INT section); 

ACTION FM(INT chap, INT sect) = CREATE(FigureMention, "chapter" = chap, "section" = sect); 

"Fig"-> FigureInd; 

INT c, s; 
(FigureInd NUM{PARSE(c)} PERIOD NUM{PARSE(s)}){-> FM(c,s)}; 

DECLARE FigMissing; 
INT c1,c2,s1,s2; 
(FigureMention<-{FigureMention{-> ASSIGN(c1, FigureMention.chapter), ASSIGN(s1, FigureMention.section)};} 
    #{-> FigMissing} 
    FigureMention<-{FigureMention{-> ASSIGN(c2, FigureMention.chapter), ASSIGN(s2, FigureMention.section)};}) 
    {c1 == (c2), s1 < (s2 - 1)}; 

INT pc, ps; 
f:FigureMention{-> pc=FigureMention.chapter, ps=FigureMention.section} 
    FigMissing->{ 
    (ANY @NUM{PARSE(c)} PERIOD NUM{PARSE(s)}){c==(pc),s==(ps+1)-> FM(c,s), pc=c, ps=s}; 
    }; 

(ОТКАЗ: Я разработчик UIMA Рута)

+0

UIMA Ruta 2.5.0 в настоящее время находится в стадии рассмотрения и еще не выпущен, но для артефактов есть [http://www.reapit.org/content/repositories/orgapacheuima-1097/). –

+0

Вы упомянули что значения этих функций должны храниться в дополнительных переменных. Можете ли вы упомянуть, как это сделать? Вышеупомянутый скрипт выдает ошибки при их использовании как таковые. –

+0

Да, я добавлю еще один ответ для UIMA Ruta 2.4.0, поскольку UIMA Ruta 2.5.0 задерживается. –

0

Следующий скрипт создает аннотацию с минимальным и максимальным значениями недостающих фигур UIMA Ruta 2.4.0:

DECLARE FigureInd; 
DECLARE FigureMention (INT chapter, INT section); 
DECLARE FigureMissing (INT minChapter, INT minSection, INT maxChapter, INT maxSection); 

ACTION Mention(INT chap, INT sect) = CREATE(FigureMention, "chapter" = chap, "section" = sect); 
ACTION Missing(INT minc, INT mins, INT maxc, INT maxs) = CREATE(FigureMissing, "minChapter" = minc, "minSection" = mins, "maxChapter" = maxc, "maxSection" = maxs); 

"Fig"-> FigureInd; 

INT c, s; 
(FigureInd NUM{PARSE(c)} PERIOD NUM{PARSE(s)}){-> Mention(c,s)}; 

DECLARE FigMissing; 
INT c1,c2,s1,s2; 
(FigureMention<-{FigureMention{-> ASSIGN(c1, FigureMention.chapter), ASSIGN(s1, FigureMention.section)};} 
    #{-> Missing(c1,s1+1,c2,s2-1)} 
    FigureMention<-{FigureMention{-> ASSIGN(c2, FigureMention.chapter), ASSIGN(s2, FigureMention.section)};}) 
    {c1 == (c2), s1 < (s2 - 1)}; 

В UIMA Руте, нет перебирает логические выражения (например, в то время как), только по сравнению с существующими примечаниями. Это усложняет создание отдельных аннотаций для каждого недостающего изображения на одном и том же смещении. Однако это можно сделать с помощью рекурсивного БЛОКА. Сценарий ответа скорее создает одну аннотацию, определяющую диапазон недостающих цифр.

Для текста exmaple вопроса создаются два аннотаций FigureMissing:

FigureMissing 
- begin: 41 
- end: 112 
- minChapter: 1 
- minSection: 3 
- maxChapter: 1 
- maxSection: 3 

FigureMissing 
- begin: 123 
- end: 165 
- minChapter: 1 
- minSection: 5 
- maxChapter: 1 
- maxSection: 5 

Если второй FigureMissing не должен быть создан, дополнительное правило может удалить его снова в зависимости от существующих FigureMentions. Разумеется, это было бы намного проще, если бы были созданы отдельные аннотации FirgureMssing, например BLOCK.

ОТКАЗ: Я разработчик UIMA Рута