我有以下文字:
1 hwb wert: 330 kWh
在第一步中,以下映射正在寻找:
330 kWh
映射为:Lookup.major = "unit"
hwb wert
映射为:Lookup.major = "keyword"
JAPE规则:
Phase: composedUnits
Input: Token Lookup
Options: control=appelt debug=true
Rule: TableRow
Priority:10
(
({Lookup.majorType == "keyword"})
({Token.kind == punctuation})[0,4]
({Lookup.majorType == "unit"})
)
Rule: ReversedTableRow
Priority: -2
(
({Token.kind == number})
({Lookup.majorType == "keyword"})
)
我无法理解为什么ReversedTableRow
- 规则匹配而不是TableRow
。
答案 0 :(得分:2)
appelt 优先级仅适用于相同的文本区域(例如,早期匹配获胜和较长匹配获胜)。以前的规则消耗的文本无法与以后的规则匹配...
使用 appelt 样式,相同区域只能使用一个规则 文本,根据一组优先权规则。优先活动在 以下方式。
- 从匹配文档区域的所有规则开始 某些点X ,与最长区域匹配的那个是红色的。
- 如果 多个规则匹配相同的区域,最高的一个 优先级是红色
- 如果有多个规则相同 优先级,语法早期定义的优先级为红色。
醇>
...
另请注意,根据控件样式,可以使用规则 '消耗'文本的那一部分,使其无法匹配 按其他规则。例如,如果一个规则使用,这可能是一个问题 上下文使其更具体,然后错过了上下文 后来的规则,因使用例如而被消费 'Brill'控制风格。
规则TableRow
可以通过以下修改赢得更长时间,请注意我添加了:tableRow
标签,该标签不包含前导号码标记。
(
({Token.kind == number})?
(
({Lookup.majorType == "keyword"})
({Token.kind == punctuation})[0,4]
({Lookup.majorType == "unit"})
):tableRow
)