I am trying to get existing annotations and their features within a Sentence annotation i.e for each sentence, there may be multiple annotations which have a i.e majorType, string and type features.
I want a new ‘Sentence contains’ annotation with a feature map of the contained annotations and their respective features.
I believe it should be an extension of the below rule from the excellent Gate Jape Grammar Tutorial pdf :
Phase:usingJAVAinRHS
Input: Lookup
Options: control = all
Rule: javainRHS1
(
{Lookup.majorType == Team}
)
:team
-->
{
gate.AnnotationSet team = (gate.AnnotationSet)bindings.get("team");
gate.Annotation teamAnn = (gate.Annotation)team.iterator().next();
gate.FeatureMap features = Factory.newFeatureMap();
features.put("teamOfSport", teamAnn.getFeatures().get("minorType"));
features.put("rule","javainRHS1");
outputAS.add(team.firstNode(), team.lastNode(), "Team",features); }
Except in my new rule, I want to annotate the Sentence, then get the contained annotation:
Phase:usingJAVAinRHS
Input: Lookup Sentence
Options: control = all
Rule: javainRHS1
(
{Sentence contains {Lookup.majorType == Team}}
)
:team
-->
{
gate.AnnotationSet team = (gate.AnnotationSet)bindings.get("team");
gate.Annotation teamAnn = (gate.Annotation)team.iterator().next();
gate.FeatureMap features = Factory.newFeatureMap();
features.put("teamOfSport", teamAnn.getFeatures().get("minorType"));
features.put("rule","javainRHS1");
outputAS.add(team.firstNode(), team.lastNode(), "Team",features); }
How do you get the feature map of the contained annotations?
Many thanks
You can use foreach to get all annotation contained in a sentence and store in feature map based on their majorType or kind.
Imports: {
import static gate.Utils.*;
}
Phase:usingJAVAinRHS
Input: Lookup Sentence
Options: control = appelt
Rule: javainRHS1
(
{Sentence contains {Lookup.majorType == Team}}
)
:team
-->
{
gate.AnnotationSet team = (gate.AnnotationSet)bindings.get("team");
gate.FeatureMap features = Factory.newFeatureMap();
for(Annotation annotation:team.inDocumentOrder())
{
if(annotation.getType() == "Lookup"){
features.put(annotation.getFeatures().get("majorType"),stringFor(doc,annotation));
}
else{
features.put(annotation.getType(), stringFor(doc,annotation));
}
}
features.put("rule","javainRHS1");
outputAS.add(team.firstNode(), team.lastNode(), "Team",features);
}