【问题标题】:GATE JAPE rule priorities not respectedGATE JAPE 规则优先级未得到遵守
【发布时间】:2016-07-21 10:54:56
【问题描述】:

我有以下文字:

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-Rule 而不是 TableRow

【问题讨论】:

  • 因为规则不匹配相同的文本区间...
  • 顺便说一句 TableRow 在此文本上无法匹配,因为两个 Lookup-s 之间有一个冒号 (:) 标记
  • @dedek 我更新了规则,但另一个仍然匹配!如果我删除 reversedTableRowrule,则 tableRowRule 将匹配。现在出了什么问题?

标签: nlp grammar gate


【解决方案1】:

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

来自the documentation

使用 appelt 样式,同一区域只能触发一条规则 文本,根据一组优先级规则。优先在 如下方式。

  1. 从与文档的区域相匹配的所有规则开始 某个点 X,匹配最长区域的那个被触发。
  2. 如果 多个规则匹配同一地区,最高的 优先级被解雇了
  3. 如果有多个相同的规则 优先级,语法中前面定义的优先级被触发。

...

还要注意,根据控件样式,执行规则可能 “消耗”文本的那部分,使其无法匹配 其他规则。这可能是一个问题,例如,如果一个规则使用 上下文使其更具体,然后该上下文被 后来的规则,由于使用例如 “Brill”控制风格。



规则TableRow通过以下修改可以赢得更长的时间,注意我添加了:tableRow标签,其中不包含前导数字令牌。

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

【讨论】:

  • 感谢您的回答。那么有没有办法解决它,除了将不同文件中的规则分开 -> 不同阶段?
  • @Paul 你希望TableRow 被触发,ReversedTableRow 不会被示例文本触发吗?
  • @Paul :您还可以在同一个文件中有多个阶段。只需将TableRow 移动到单独的第一阶段并在ReversedTableRow 内部,您可以检查{Lookup.majorType == "keyword", !TableRow} 之类的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多