с помощью рута аннотируйте строку, содержащую аннотацию, и извлекайте необходимые данные - PullRequest
1 голос
/ 05 ноября 2019

Аннотируйте строку, содержащую определенные аннотации для извлечения текста. Аннотируйте строку для Заемщика и Со-Заемщика и получите их соответствующие номера SSN

Borrower Name: Alice Johnson                           SSN: 123-456-7890  
Co-Borrower Name: Bob Symonds                          SSN: 987-654-3210

код

PACKAGE uima.ruta.test;
TYPESYSTEM utils.PlainTextTypeSystem;
ENGINE utils.PlainTextAnnotator;
EXEC(PlainTextAnnotator, {Line});
DECLARE Borrower, Name;
DECLARE BorrowerName(String value, String label);
CW{REGEXP("\\bBorrower") -> Borrower} CW{REGEXP("Name") -> Name};
Borrower Name COLON n:CW[1,3]{-> CREATE(BorrowerName, "label"="Borrower Name", "value"=n.ct)};
DECLARE SSN;
DECLARE BorrowerSSN(String label, String value);
W{REGEXP("SSN") -> SSN};
SSN COLON n:NUM[3,3]{-> CREATE(BorrowerSSN, "label"="Borrower SSN", "value"=n.ct)};
DECLARE Co;
CW{REGEXP("Co") -> Co};
DECLARE CoBorrowerName(String label, String value);
Co Borrower Name COLON n:CW[1,3]{-> CREATE(CoBorrowerName, "label"="Co-Borrower Name", "value"=n.ct)};
DECLARE BorrowerLine;
Line{CONTAINS(Borrower),CONTAINS(Name)->MARK(BorrowerLine)};

Пожалуйста, предложите, как аннотировать строку, содержащую аннотацию, и получить конкретное значение метки для требуемой аннотации.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Дополнение к ответу Виорела:

PlainTextAnnotator создает аннотации типа Line, и эти аннотации охватывают всю строку, что означает, что пробелы в начале или в конце также включены. Как следствие, полученные аннотации не видны для следующих правил. Чтобы избежать этой проблемы, вы можете, например, обрезать пробелы в следующих аннотациях:

EXEC(PlainTextAnnotator, {Line});
ADDRETAINTYPE(WS);
Line{-> TRIM(WS)};
REMOVERETAINTYPE(WS);
0 голосов
/ 05 ноября 2019

Чтобы избавиться от обработки отдельных строк, вы можете собрать все индикаторы в список слов (т. Е. В текстовый файл, содержащий один индикатор на строку) и поместить его в папку вашего проекта resources (см. это для более подробной информации). Затем вы можете просто пометить все индикаторы нужным типом индикатора:

WORDLIST IndicatorList ='IndicatorList.txt';
DECLARE Indicator;
Document{->MARKFAST(Indicator, IndicatorList )};

Это приведет к выводу Indicator вспомогательных аннотаций, таких как "Имя заемщика".

Как только вы это сделаете, вы можететеперь перебираем строки и находим целевые аннотации.

DECLARE Invisible;
SPECIAL{-PARTOF(Invisible), REGEXP("[-]")-> Invisible};
BLOCK(line) Line{CONTAINS(Indicator)}{

    //Ex. pattern: Borrower Name: Alice Johnson         SSN: 123-456-7890
    Indicator COLON c:CW[1,3]{-> CREATE(BorrowerName, "label"="Borrower Name", "value"=c.ct)} Indicator;
    FILTERTYPE(Invisible);
    Indicator COLON n:NUM[3,3]{-> CREATE(BorrowerSSN, "label"="BorrowerSSN", "value"=n.ct)};
    REMOVEFILTERTYPE(Invisible);
}

Надеюсь, это поможет.

...