如何自定义GATE JAPE语法中的单词?

时间:2013-12-02 17:31:09

标签: grammar text-mining gate

我有一组文件,每个文件都有不同的标题。示例如果文档标题显示“心理评估”我想将文档标记为“Medicalrule”。

  1. 我加载了文档,并使用默认值加载了ANNIE。
  2. 处理资源>新> Jape传感器 2.1在文本文档中编写了以下代码并将其另存为.JAPE扩展名
  3. 代码:


    Phase: ConjunctionIdentifier
    Input: Token Split    
    Rule: Medicalrule
    (
    ({Token.string=="Psychological"})+({Token.string == " "})+ ({Token.string == "Evaluation"}):Meddoc({Token.kind=="word"})
    )
    
    --> 
    :Meddoc
      {
        gate.AnnotationSet matchedAnns= (gate.AnnotationSet) bindings.get("Meddoc"); gate.FeatureMap newFeatures= Factory.newFeatureMap();newFeatures.put("rule","Medicalrule");annotations.add(matchedAnns.firstNode(),matchedAnns.lastNode(),"CC", newFeatures);
     }
    

    1. 加载上面创建的.JAPE文件并重新初始化
    2. 运行应用程序后,注释集不会显示标记!

      我在某个地方做错了吗?如果有人可以帮我这么做会很棒。

      感谢您的时间。

      谢谢

2 个答案:

答案 0 :(得分:2)

我确定没有像:Token.string ==“”这样的注释。尝试使用SpaceToken注释。 另外,为什么不尝试使用地名录而不是将文本值硬编码到JAPE代码中?

答案 1 :(得分:1)

我可以在这里看到三个问题。

  • 首先,正如ashingel所说,空格不表示为Token注释 - 这是故意的,因为在大多数情况下,你不关心单词之间的间距,只关心单词本身。
  • 其次,尾随({Token.kind=="word"})表示规则只会在当前句子结束前“心理评估”后跟另一个单词时匹配(因为您在输入中有Split线)。
  • 第三,您只是将Meddoc标签绑定到“评估”令牌,而不是整个匹配。

我会尝试简化规则的LHS:

Phase: ConjunctionIdentifier
Input: Token Split    
Rule: Medicalrule
(
  {Token.string=="Psychological"}
  {Token.string == "Evaluation"}
):meddoc

并且对于RHS(a),您不需要执行显式bindings.get,因为您已经使用了标记块,因此您已经拥有了可用的绑定注释,(b)您应该使用{{1代替outputAS和(c)通常应该避免使用节点的annotations方法,因为如果输入和输出注释集不同,则不安全。如果您使用的是GATE的最新快照,那么add静态方法可以为您提供很多帮助

gate.Utils

如果您使用的是7.1或更早版本,那么:meddoc { Utils.addAnn(outputAS, meddocAnnots,"CC", Utils.featureMap("rule","Medicalrule")); } 方法就不可用,因此它会稍微复杂一些:

addAnn

最后,为了检查,您确实将新的JAPE传感器PR添加到管道的末尾?

相关问题