GATE JAPE规则优先级未得到尊重

时间:2016-07-21 10:54:56

标签: nlp grammar gate

我有以下文字:

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

1 个答案:

答案 0 :(得分:2)

appelt 优先级仅适用于相同的文本区域(例如,早期匹配获胜和较长匹配获胜)。以前的规则消耗的文本无法与以后的规则匹配...

来自the documentation

  

使用 appelt 样式,相同区域只能使用一个规则   文本,根据一组优先权规则。优先活动在   以下方式。

     
      
  1. 从匹配文档区域的所有规则开始   某些点X ,与最长区域匹配的那个是红色的。
  2.   
  3. 如果   多个规则匹配相同的区域,最高的一个   优先级是红色
  4.   
  5. 如果有多个规则相同   优先级,语法早期定义的优先级为红色。
  6.   

...

  

另请注意,根据控件样式,可以使用规则   '消耗'文本的那一部分,使其无法匹配   按其他规则。例如,如果一个规则使用,这可能是一个问题   上下文使其更具体,然后错过了上下文   后来的规则,因使用例如而被消费   'Brill'控制风格。

规则TableRow可以通过以下修改赢得更长时间,请注意我添加了:tableRow标签,该标签不包含前导号码标记。

(
 ({Token.kind == number})?
 (
  ({Lookup.majorType == "keyword"})
  ({Token.kind == punctuation})[0,4]
  ({Lookup.majorType == "unit"})
 ):tableRow
)