【问题标题】:How to custom tag word(s) in GATE JAPE grammar?如何在 GATE JAPE 语法中自定义标记词?
【发布时间】:2013-12-02 17:31:09
【问题描述】:

我有一组文档,每个文档都有不同的标题。例如,如果文档标题为“心理评估”,我想将文档标记为“医学规则”。

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

代码:


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 文件并重新初始化

应用程序运行后,注释集不显示标签!

我在某处做错了吗?如果有人可以帮助我,那就太好了。

珍惜你的时间。

谢谢

【问题讨论】:

    标签: grammar text-mining gate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      • 首先,正如 asshingel 所说,空格不表示为 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) 您应该使用 outputAS 而不是annotations 和 (c) 您通常应该避免使用节点的 add 方法,因为如果输入和输出注释集不同,它是不安全的。如果您使用的是 GATE 的最新快照,那么 gate.Utils 静态方法可以在这里为您提供很多帮助

      :meddoc {
          Utils.addAnn(outputAS, meddocAnnots,"CC",
                       Utils.featureMap("rule","Medicalrule"));
      }
      

      如果您使用的是 7.1 或更早版本,则 addAnn 方法不可用,因此稍微复杂一些:

      :meddoc {
        try {
          outputAS.add(Utils.start(meddocAnnots), Utils.end(meddocAnnots),"CC",
                       Utils.featureMap("rule","Medicalrule"));
        } catch(InvalidOffsetException e) { // can't happen, but won't compile without
          throw new JapeException(e);
        }
      }
      

      最后,只是为了检查一下,您确实将新的 JAPE Transducer PR 添加到管道的末尾?

      【讨论】:

      • 是的,我确实将 JAPE Transducer PR 添加到管道末端,谢谢 Lan 和 Ashingel
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多