注意:这似乎与Setting feature value to the count of containing annotation in UIMA Ruta密切相关。但我不能完全回答我的情况。
我正在分析假定以下结构的纯文本文档:
我被要求通过检查他们的标题是否满足条件来识别部分。一个有用且显而易见的条件是:标题是否与给定的正则表达式匹配?一个不太有用但可能更容易实现的条件是:标题是否包含给定的文本
我可以并且已经通过获取正则表达式和节标题的元组列表来实现这一点,并且在设计时,对于列表中的每个成员都是如此:
BLOCK(forEach) SECTION{} {
...
HEADING{REGEXP(".*table.*contents.*", true) ->
SETFEATURE("value", "Table of Contents")};
...
}
SECTION{ -> SETFEATURE("value", "Table of Contents")}
<- { HEADING.headingValue == "Table of Contents"; };
这种方法相当简单,但有一些很大的缺点:
所以我想重构以实现以下目标:
SECTION.value=="Table of Contents"
而不是TableOfContentsSection
)在查看UIMA Ruta参考文献以了解哪些选项可用于实现这些目标后,我选择了以下内容:
WORDTABLE
存储section title, words to find / regex if possible, lookup type
的元组 - 例如,Table of Contents,contents,sectiontitles
MARKTABLE
标记中间注释类型LookupMatch
,其hint
功能包含节标题,其lookup
功能包含我们正在讨论的查找类型HEADING
,查看LookupMatch.lookup == "sectiontitle"
是否在内部,如果是,请将LookupMatch.hint
复制到标题的value
字段。SECTION
,查看HEADING
是否在value
内;如果是,请将value
复制到SECTION.value
字段。发现实施步骤3和4并不容易,这并不奇怪。这就是我所处的位置以及我寻求帮助的原因。
// STEP 1
WORDTABLE Structure_Heading_WordTable =
'/uima/resource/structure/Structure_Heading_WordTable.csv';
// STEP 2
Document.docType == "Contract"{
-> MARKTABLE(LookupMatch, // annotation
2, // lookup column #
Structure_Heading_WordTable, // word table to lookup
true, // case-insensitivity
0, // length before case-insensitivity
"", // characters to ignore
0, // matches to ignore
"hint" = 1, "lookup" = 3 // features
)
};
// STEPS 3 AND 4 ... ???
BLOCK(ForEach) LookupMatch.lookup == "sectiontitle"{} {
???
}
HEADING{ -> SETFEATURE("value", ???)} <- {
???
};
这是我对它的第一次真正尝试:
HEADING{ -> SETFEATURE("value", lookupMatchHint)} <- {
LookupMatch.lookup == "HeadingWords"{ -> GETFEATURE("hint", lookupMatchHint)};
};
如何有条件地将要素值从一个注释复制到另一个注释? GETFEATURE
假设你只得到1 ......