我有一组文件,每个文件都有不同的标题。示例如果文档标题显示“心理评估”我想将文档标记为“Medicalrule”。
代码:
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);
}
运行应用程序后,注释集不会显示标记!
我在某个地方做错了吗?如果有人可以帮我这么做会很棒。
感谢您的时间。
谢谢
答案 0 :(得分:2)
我确定没有像:Token.string ==“”这样的注释。尝试使用SpaceToken注释。 另外,为什么不尝试使用地名录而不是将文本值硬编码到JAPE代码中?
答案 1 :(得分:1)
我可以在这里看到三个问题。
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添加到管道的末尾?