当前位置: 首页 > 知识库问答 >
问题:

TokensRegex-使用在注释中捕获的组作为注释函数的参数

裴鸿熙
2023-03-14
{
    ruleType:   "tokens",
    pattern:    ( /the/ /prior/ [ {ner:"DATE"} & {normalized:/THIS (P\d\w.*)/} ]+ ),
    action:     ( Annotate($0, "normalized", "PREV_IMMEDIATE " + $$1.text) ) }

我对这条规则有两个问题:

>

  • 在注释函数的最后一个参数中,我找不到正确的语法来将文本字符串与捕获组变量组合在一起。上面的“操作”字段导致以下异常:

    ParseException:在第34行第72列遇到“+”“+”。我期待其中之一:“)”...“,”...

    显然,当我使用“+”将字符串追加到一起时,最后一个参数没有正确地强制转换为字符串。
    将最后一个参数中的字符串组合到注释函数中的正确方法是什么?

    这应该会给出捕获组“(P\D\W.*)”的文本。
    但似乎没有捕获该组。
    是因为在注释中捕获组(而不是在标记文本中捕获组)根本不起作用吗?
    还是我做错了什么?

    一般来说,如果这两个问题不能直接解决,还有什么替代方案呢?
    生成一个自定义版本的“english.sutime.txt”并让OOTB注释者使用它?

    提前感谢您的任何帮助!

  • 共有1个答案

    苏乐
    2023-03-14

    感谢您指出“priore”应视为指以前的时间。我们也会将此添加到我们的规则中。对于在SUTime规则中添加“prior”,最简单的事情是更改:

    { pattern: ( /this|the/ /past|previous|last/ ),
      action: Tag($0, "TemporalOp", PREV_IMMEDIATE) }
    

    致:

    { pattern: ( /this|the/ /past|previous|last|prior/ ),
      action: Tag($0, "TemporalOp", PREV_IMMEDIATE) }
    

    如果prev_immediate不起作用,可以尝试将其更改为prev。其用意是prev_immediateprev充当以下时间表达式的运算符,以获得该时间表达式的“previous”或“past”出现,但是prev_immediate操作没有经过很好的测试。这些运算符在后面的规则中应用:

    { name: "temporal-composite-6b",
      priority: 4,
      pattern: ( ( $REL_MOD ) ( [ $hasTemporal & !{ temporal::IS_TIMEX_SET } ] ) ),
      result: RelativeTime( GetTag($1[0], "TemporalOp"), $2[0].temporal.value )
    }
    
      null

    要访问它们,需要将MatchWithResults设置为true

    {
      ruleType:   "tokens",
      matchWithResults: TRUE,
      pattern:    ( /the/ /prior/ [ {ner:"DATE"} & {normalized:/THIS (P\d\w.*)/} ] ),     
    }
    

    然后,可以使用$$0.matchresults[2].normalized.group(1)访问(P\d\w.*)的匹配项。$$0从TokensRegex获取整个捕获组。matchResults[2]获取索引2处标记的matchResults。normalized.group(1)获取对应于规范化注释的Java字符串表达式的捕获组。

    注意,这种模式实际上在SUTime中不起作用,因为normalized字段是在SUTime完成所有规则之后由NER填充的。

     类似资料:
    • 在执行通知时,如何获取的和?我正在使用Spring 4.0.6、AspectJ 1.7.4

    • 我使用Spring AOP拦截方法执行。 我有一个界面,如下所示: 以下是接口的实现: 现在我希望任何使用@AwesomeAnnoting注释的参数的方法都应该被Spring AOP捕获。 所以我写了以下方面,这是有效的。 但是,当我尝试查找参数注释时,我没有得到任何注释。如上所述,annotationMatrix为空。 所以我的问题是: 为什么annotationMatrix为空?可能是因为参数

    • 我刚刚发现了Python3的函数注释(https://www.python.org/dev/peps/pep-3107/)这对于记录参数或返回类型似乎很有用。它还可以在我的pycharm IDE中提供更好的intellisense。 我有一个关于输入类型模糊的参数的问题。例如,它可以是一个列表或numpy数组或一些“类似数组”的数量。为函数注释此类输入参数的最佳方法是什么?例子: 我还有一个例子,

    • 问题内容: 在Jackson中,当用注释构造函数时,必须用注释其参数。所以这个构造函数 变成这个: 我不明白为什么有必要。你能解释一下吗? 问题答案: Jackson必须知道以什么顺序将字段从JSON对象传递给构造函数。使用反射无法在Java中访问参数名称-这就是为什么您必须在注释中重复此信息的原因。

    • 我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?