Hi Peter

We have prepared a short test with 2 methods.
The first one is using #, the second one is using %

We expect the same behaviour. But as you will see there are diferences.

Regards

2017-02-28 16:00 GMT+01:00 Peter Klügl <[email protected]>:

> hmmm ok, maybe my example for testing the rule was too simple.
>
> I will create a more complex example and check the results
>
>
> Peter
>
>
> Am 28.02.2017 um 15:38 schrieb José Vicente Moyano Murillo:
> > Hi Peter,
> >
> > I'm sorry but this example does not work properly. It seems that it is a
> > problem regarding conjunction rules (%)
> >
> > This is our test case and result.
> >
> > We have a book with 5 attributes
> > - name
> > - author
> > - pages
> > - ISBN
> > - Category
> >
> > The rule is validatin name and author.
> >
> > RUTA creates the annotation with the list but the list contains 20 times
> > the las attribute (Category).
> >
> > If we use # it works perfectly. But in general we must use %
> >
> > May be this information will help you.
> >
> > Many thanks
> >
> >
> >
> > 2017-02-28 14:23 GMT+01:00 Peter Kluegl <[email protected]>:
> >
> >> Hi,
> >>
> >>
> >> operations directly on lists and arrays are on my todo list but not yet
> >> implemented.
> >>
> >>
> >> Right now, there are still some options like a variable or restricted
> >> assignments.
> >>
> >>
> >> Here's an example with an ANNOTATIONLIST variable:
> >>
> >>
> >> ANNOTATIONLIST list;
> >> Book{-> CREATE(NeilsBook, "attributes" = list)}<-{
> >>     a1:Attribute{a1.name=="title", a1.ct=="Norse Mythology" ->
> >> ADD(list,a1)}
> >>     % a2:Attribute{a2.name=="author", a2.ct=="Neil Gaiman" ->
> >> ADD(list,a2)};
> >>     };
> >>
> >>
> >> Variables are global, so you need to clear the list maybe somewhere,
> >> e.g. before the first ADD.
> >>
> >>
> >> In the current trunk, something like the following is also possible:
> >>
> >> Book{-> NeilsBook("attributes" = Attribute{OR(Attribute
> >> .name=="title", Attribute.name=="author")})}....
> >>
> >>
> >> Best,
> >>
> >>
> >> Peter
> >>
> >>
> >> Am 28.02.2017 um 14:06 schrieb José Vicente Moyano Murillo:
> >>> Hi Peter, we have another question regarding the same example.
> >>>
> >>> Right now all is working properly (many thanks) and it seems that
> >>> 2.5.1-SNAPSHOT it's fine.
> >>>
> >>> Now we are planning to store some information in the created
> annotation.
> >> We
> >>> want to store all the attributes that matches the RUTA rule.
> >>>
> >>> It is possible to store a1 and a2 in a feature (attributes) of
> NeilsBook?
> >>>
> >>> The example:
> >>>
> >>> Book{-> NeilsBook}<-{
> >>>     a1:Attribute{a1.name=="title", a1.ct=="Norse Mythology"}
> >>>     %
> >>> a2:Attribute{a2.name=="author", a2.ct=="Neil Gaiman"};
> >>> };
> >>>
> >>> We are using this aproach:
> >>>
> >>> Book{-> NeilsBook("attributes" = Attribute )}<-{
> >>>      a1:Attribute{a1.name=="title", a1.ct=="Norse Mythology"}
> >>>      %
> >>> a2:Attribute{a2.name=="author", a2.ct=="Neil Gaiman"};
> >>> };
> >>>
> >>> This example works but it is storing all the annotations "Attribute"
> >>> covered by "Book" and we just want the attributes that matches the
> rule.
> >>>
> >>> Thanks in advance.
> >>>
> >>>
> >>>
> >>>
> >>> 2017-02-24 10:29 GMT+01:00 José Vicente Moyano Murillo <[email protected]
> >:
> >>>
> >>>> Many thanks Peter ¡¡¡
> >>>>
> >>>> 2017-02-24 9:46 GMT+01:00 Peter Klügl <[email protected]>:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>>
> >>>>> the repo:
> >>>>>
> >>>>> <repository>
> >>>>>       <id>apache.snapshots</id>
> >>>>>       <name>Apache Snapshot Repository</name>
> >>>>>       <url>http://repository.apache.org/snapshots</url>
> >>>>>       <releases>
> >>>>>         <enabled>false</enabled>
> >>>>>       </releases>
> >>>>>     </repository>
> >>>>>
> >>>>>
> >>>>> the folder:
> >>>>>
> >>>>> https://repository.apache.org/content/groups/snapshots/org/a
> >>>>> pache/uima/ruta-core/2.5.1-SNAPSHOT/
> >>>>>
> >>>>>
> >>>>> Best,
> >>>>>
> >>>>> Peter
> >>>>>
> >>>>>
> >>>>>
> >>>>> Am 23.02.2017 um 13:47 schrieb José Vicente Moyano Murillo:
> >>>>>> Hi,
> >>>>>>
> >>>>>> ruta-core.jar it's enough.
> >>>>>>
> >>>>>> It will be fantastic if i could access the snapshot repository.
> >>>>>>
> >>>>>> 2017-02-23 13:03 GMT+01:00 Peter Klügl <[email protected]>:
> >>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>>
> >>>>>>> what do you need? Only ruta-core.jar or also the Eclipse
> >> plugins/update
> >>>>>>> site?
> >>>>>>>
> >>>>>>> I will prepare a new RC for the next release soon.
> >>>>>>>
> >>>>>>> There should be snapshot artifacts built by jenkins in the snapshot
> >>>>>>> repository. I am out-of-office today so do not have the link right
> >>>>> now. (If
> >>>>>>> you want to build it yourself, the svn source repo can be accessed
> by
> >>>>>>> anyone)
> >>>>>>>
> >>>>>>>
> >>>>>>> Best,
> >>>>>>>
> >>>>>>>
> >>>>>>> Peter
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> Am 23.02.2017 um 08:06 schrieb José Vicente Moyano Murillo:
> >>>>>>>
> >>>>>>>> Hi Peter, good morning.
> >>>>>>>>
> >>>>>>>> Have we any opportunity to get a fixed version? I mean a snapshot
> or
> >>>>> an
> >>>>>>>> access to the repo.
> >>>>>>>>
> >>>>>>>> Regards
> >>>>>>>>
> >>>>>>>> 2017-02-22 10:38 GMT+01:00 José Vicente Moyano Murillo <
> >>>>> [email protected]>:
> >>>>>>>> you're right
> >>>>>>>>> % is performing some kind of "or".
> >>>>>>>>>
> >>>>>>>>> So we will wait for the new release.
> >>>>>>>>>
> >>>>>>>>> Many thanks
> >>>>>>>>>
> >>>>>>>>> 2017-02-22 9:54 GMT+01:00 Peter Klügl <[email protected]
> >:
> >>>>>>>>>
> >>>>>>>>> I actually wonder why your rules work. I am quite sure that they
> >>>>> match
> >>>>>>>>>> too often, i. e. they match also if only one of the conjunct
> rule
> >>>>>>>>>> elements match.
> >>>>>>>>>>
> >>>>>>>>>> You can simply try that by using a wrong string in the check
> like
> >>>>> "NG"
> >>>>>>>>>> instead of "Neil Gaiman"
> >>>>>>>>>>
> >>>>>>>>>> Anyways, the problem will be fixed in a few minutes and will be
> >>>>> part of
> >>>>>>>>>> the next release.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Best,
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Peter
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Am 22.02.2017 um 09:38 schrieb Peter Klügl:
> >>>>>>>>>>
> >>>>>>>>>>> Thanks. Maybe its just a bug in 2.5.0 I already fixed. I'll
> >>>>> investigate
> >>>>>>>>>> it.
> >>>>>>>>>>
> >>>>>>>>>>> Am 22.02.2017 um 09:24 schrieb José Vicente Moyano Murillo:
> >>>>>>>>>>>
> >>>>>>>>>>>> Thank you very much Peter. Your advice was amazing.
> >>>>>>>>>>>>
> >>>>>>>>>>>> We tried the first option using Conjunct rules and as you said
> >> it
> >>>>> does
> >>>>>>>>>>> not
> >>>>>>>>>>> work with version 2.5.0. But we change a little your example
> and
> >> it
> >>>>>>>>>>> works
> >>>>>>>>>>> perfectly witn 2.4.0 and 2.5.0
> >>>>>>>>>>>> We use theses examples with success:
> >>>>>>>>>>>>
> >>>>>>>>>>>> DECLARE Annotation RuleDetection;
> >>>>>>>>>>>>   Book{ -> CREATE(NeilsBook) } <- {
> >>>>>>>>>>>>        Attribute{Attribute.name=="title",
> Attribute.ct=="Norse
> >>>>>>>>>>>>
> >>>>>>>>>>> Mythology"}"
> >>>>>>>>>>>        %
> >>>>>>>>>>>>                Attribute{Attribute.name=="author",
> >>>>>>>>>>>> Attribute.ct=="Neil
> >>>>>>>>>>>> Gaiman"};"
> >>>>>>>>>>>>   };
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> DECLARE Annotation RuleDetection;
> >>>>>>>>>>>>   Book{ -> CREATE(NeilsBook) } <- {
> >>>>>>>>>>>>         Attribute{FEATURE("name","title"), FEATURE("ct",
> "Norse
> >>>>>>>>>>>>
> >>>>>>>>>>> Mythology")}"
> >>>>>>>>>>>        %
> >>>>>>>>>>>>                 Attribute{FEATURE("name","author"),
> >> FEATURE("ct",
> >>>>>>>>>>>> "Neil
> >>>>>>>>>>>> Gaiman")};
> >>>>>>>>>>>>   };
> >>>>>>>>>>>>
> >>>>>>>>>>>> DECLARE Annotation RuleDetection;
> >>>>>>>>>>>>   Book{ -> CREATE(NeilsBook) } <- {
> >>>>>>>>>>>>        Attribute{Attribute.name=="title",
> Attribute.ct=="Norse
> >>>>>>>>>>>>
> >>>>>>>>>>> Mythology"}"
> >>>>>>>>>>>        %
> >>>>>>>>>>>>                 Attribute{FEATURE("name","author"),
> >> FEATURE("ct",
> >>>>>>>>>>>> "Neil
> >>>>>>>>>>>> Gaiman")};
> >>>>>>>>>>>>   };
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> May be the problem is with when we use Identifiers:
> >>>>>>>>>>>>     a1:Attribute and  a2:Attribute
> >>>>>>>>>>>>
> >>>>>>>>>>>> In any case thank you very much for your help.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> 2017-02-21 17:46 GMT+01:00 Peter Klügl <
> >> [email protected]
> >>>>>> :
> >>>>>>>>>>>> Hi,
> >>>>>>>>>>>>> I'd normally say that you need the conjunt rules construct to
> >>>>> specify
> >>>>>>>>>>>> an
> >>>>>>>>>>> AND between two rule element independent of the position:
> >>>>>>>>>>>>> Book{-> NeilsBook}<-{
> >>>>>>>>>>>>>      a1:Attribute{a1.name=="title", a1.ct=="Norse
> Mythology"}
> >>>>>>>>>>>>>      % a2:Attribute{a2.name=="author", a2.ct=="Neil
> Gaiman"};
> >>>>>>>>>>>>>      };
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> However, I just noted that there is a problem with conjunct
> >>>>> rules. I
> >>>>>>>>>>>>> haven't used it in a long time and the test coverage much
> lower
> >>>>> than
> >>>>>>>>>>>> the
> >>>>>>>>>>> other constructs. I'll create a ticket for it and fix it.
> >>>>>>>>>>>>> Without conjunct rules, you need some boolean variables for
> >>>>> cheking
> >>>>>>>>>>>> the
> >>>>>>>>>>> AND, which looks all but declarative:
> >>>>>>>>>>>>> BOOLEAN ft, fa;
> >>>>>>>>>>>>> FOREACH(book) Book{}{
> >>>>>>>>>>>>>      book{-> ft = false, fa = false};
> >>>>>>>>>>>>>      book->{a1:Attribute{a1.name=="title", a1.ct=="Norse
> >>>>>>>>>>>>> Mythology"->
> >>>>>>>>>>>>> ft=true};};
> >>>>>>>>>>>>>      book->{a2:Attribute{a2.name=="author", a2.ct=="Neil
> >>>>> Gaiman"->
> >>>>>>>>>>>>> fa=true};};
> >>>>>>>>>>>>>      book{ft,fa -> NeilsBook};
> >>>>>>>>>>>>> }
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> ... or with a BLOCK...
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> BLOCK(book) Book{}{
> >>>>>>>>>>>>>      Document{-> ft = false, fa = false};
> >>>>>>>>>>>>>      a1:Attribute{a1.name=="title", a1.ct=="Norse
> Mythology"->
> >>>>>>>>>>>>>
> >>>>>>>>>>>> ft=true};
> >>>>>>>>>>>      a2:Attribute{a2.name=="author", a2.ct=="Neil Gaiman"->
> >>>>> fa=true};
> >>>>>>>>>>>>>      Document{ft,fa -> NeilsBook};
> >>>>>>>>>>>>> }
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> If the order of the attributes is known, you can avoid the
> AND
> >>>>> check
> >>>>>>>>>>>> and
> >>>>>>>>>>> just specify a sequential constraint:
> >>>>>>>>>>>>> Book{-> NeilsBook}<-{
> >>>>>>>>>>>>>      a1:Attribute{a1.name=="title", a1.ct=="Norse
> Mythology"}
> >>>>>>>>>>>>>      # a2:Attribute{a2.name=="author", a2.ct=="Neil
> Gaiman"};
> >>>>>>>>>>>>>      };
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> If you need to check on the complete title with the URL, you
> >> can
> >>>>>>>>>>>> replace
> >>>>>>>>>>> the coveredText comparison with a REGEXP condition.
> >>>>>>>>>>>>> (tested with UIMA Ruta 2.5.0)
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Peter
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Am 21.02.2017 um 13:58 schrieb José Vicente Moyano Murillo:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hello everyone
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I'm planning to use RUTA to create some annotations. But i'm
> >> not
> >>>>>>>>>>>>> able to
> >>>>>>>>>>> accomplish my objective.
> >>>>>>>>>>>>>> This is my case right now:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I have a text annotated with some annotations "*Book*".
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Under "*Book*" annotation i have a few annotations
> >> "*Attribute*"
> >>>>>>>>>>>>>> that
> >>>>>>>>>>>>>> stores some information about the book. Each "*Attribute*"
> >> has a
> >>>>>>>>>>>>> feature
> >>>>>>>>>>> "
> >>>>>>>>>>>>>> *name*" and a feature "*parent*" to its parent (one "*Book*"
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> annotation).
> >>>>>>>>>>> And example could be a text with 2 "*Book*" annotations:
> >>>>>>>>>>>>>> "*Book*" annotation number 1 with 3 nested attributes
> >>>>>>>>>>>>>> 1.- *Attribute* with name feature equals "title" -> covered
> >>>>> text:
> >>>>>>>>>>>>> "Norse
> >>>>>>>>>>> Mythology
> >>>>>>>>>>>>>> <http://www.barnesandnoble.com/w/norse-mythology-neil-
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> gaiman/1124023596;jsessionid=FD1D8F9690602616CA59B38CFE9290
> >>>>>>>>>>>>> 06.prodny_store02-atgap08?ean=9780393609097>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> "
> >>>>>>>>>>>>>> 2.- *Attribute* with name feature equals "author" ->
> covered
> >>>>> text:
> >>>>>>>>>>>>> "Neil
> >>>>>>>>>>> Gaiman"
> >>>>>>>>>>>>>> 3.- *Attribute* with name feature equals "language" - >
> >> covered
> >>>>>>>>>>>>>> text:
> >>>>>>>>>>>>>> "English"
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> "*Book*" annotation number 2 with 3 nested attributes
> >>>>>>>>>>>>>> 1.- *Attribute* with name feature equals "title" -> covered
> >>>>> text:
> >>>>>>>>>>>>> "Never
> >>>>>>>>>>> Never
> >>>>>>>>>>>>>> <http://www.barnesandnoble.com/w/never-never-james-
> patterson
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> /1123863634;
> >>>>>>>>>>> jsessionid=FD1D8F9690602616CA59B38CFE929006.prodny_store02-
> >>>>>>>>>>>> atgap08?ean=
> >>>>>>>>>>> 9780316433174>
> >>>>>>>>>>>>>> "
> >>>>>>>>>>>>>> 2.- *Attribute* with name feature equals "author" ->
> covered
> >>>>> text:
> >>>>>>>>>>>>> "James
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Patterson"
> >>>>>>>>>>>>>> 3.- *Attribute* with name feature equals "language" - >
> >> covered
> >>>>>>>>>>>>>> text:
> >>>>>>>>>>>>>> "English"
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I need to respect this schema but i have this question:
> >>>>>>>>>>>>>> It is possible to create and annotation over a book for a
> >> given
> >>>>>>>>>>>>> author
> >>>>>>>>>>> name
> >>>>>>>>>>>>>> and a given title name?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thank's in advance
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>
>
>

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;

import org.antlr.runtime.RecognitionException;
import org.apache.uima.UIMAException;
import org.apache.uima.cas.Type;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.fit.util.CasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.cas.FSArray;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.ruta.descriptor.RutaBuildOptions;
import org.apache.uima.ruta.descriptor.RutaDescriptorFactory;
import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
import org.apache.uima.ruta.engine.Ruta;
import org.junit.Test;

public class RutaAnnotatorTest {

	
	@Test
	public void testCapture_ABBA01() throws UIMAException, IOException, RecognitionException, URISyntaxException {
		String str = "A B B A X";
		String rutaRule =
				"PACKAGE ruta;\n "
				+ "DECLARE Detection (FSArray anchors);\n  "
				+ "ANNOTATIONLIST list;\n"
				+ "Document{ -> CREATE(Detection, \"anchors\" = list)} <- {"
				+ "		w1:CW{w1.ct==\"A\" -> ADD(list, w1)}" 
				+ " 	# "
				+ "		w2:CW{w2.ct==\"B\" -> ADD(list, w2)}"
				+ "		# "
				+ "		w3:CW{w3.ct==\"B\" -> ADD(list, w3)}" 
				+ "		# "
				+ "		w4:CW{w4.ct==\"A\" -> ADD(list, w4)};" 
				+ "};";
		
		
		RutaDescriptorFactory factory = new RutaDescriptorFactory();
		RutaDescriptorInformation descriptorInformation = factory.parseDescriptorInformation(rutaRule);
		
		for(String tmp : descriptorInformation.getTypeShortNames()) {
			System.out.println(tmp);
		}
		
		RutaBuildOptions options = new RutaBuildOptions();
		TypeSystemDescription typeSystemDescription = factory.createTypeSystemDescription("", descriptorInformation, options, null);
				
		JCas cas = JCasFactory.createJCas(typeSystemDescription);
		cas.setDocumentText(str);
	
		Ruta.apply(cas.getCas(), rutaRule);
				
		Type detectionType = CasUtil.getAnnotationType(cas.getCas(), "ruta.Anonymous.Detection");
		ArrayList<AnnotationFS> detections = new ArrayList(CasUtil.select(cas.getCas(), detectionType));
		
		if(detections.size()!=1) {
			System.out.println("Located more than one [ruta.Anonymous.Detection]. KO");
		} else {
			System.out.println("Located one [ruta.Anonymous.Detection]. OK");
			
			AnnotationFS detection = detections.get(0);
			FSArray anchors = (FSArray) detection.getFeatureValue(detectionType.getFeatureByBaseName("anchors"));
			if(anchors.size()!=4) {
				System.out.println("Expected 4 CW inside feature 'anchors'. Contains " + anchors.size() + ". KO");
			}
			System.out.println("======= anchors ============ ");
			for(int i = 0; i < anchors.size(); i++) {
				System.out.println(((AnnotationFS)anchors.get(i)).getCoveredText());
			}
		}
	}
	
	
	@Test
	public void testCapture_ABBA02() throws UIMAException, IOException, RecognitionException, URISyntaxException {
		String str = "A B B A X";
		String rutaRule =
				"PACKAGE ruta;\n "
				+ "DECLARE Detection (FSArray anchors);\n  "
				+ "ANNOTATIONLIST list;\n"
				+ "Document{ -> CREATE(Detection, \"anchors\" = list)} <- {"
				+ "		w1:CW{w1.ct==\"A\" -> ADD(list, w1)}" 
				+ " 	% "
				+ "		w2:CW{w2.ct==\"B\" -> ADD(list, w2)}"
				+ "		% "
				+ "		w3:CW{w3.ct==\"B\" -> ADD(list, w3)}" 
				+ "		% "
				+ "		w4:CW{w4.ct==\"A\" -> ADD(list, w4)};" 
				+ "};";
		
		
		RutaDescriptorFactory factory = new RutaDescriptorFactory();
		RutaDescriptorInformation descriptorInformation = factory.parseDescriptorInformation(rutaRule);
		
		for(String tmp : descriptorInformation.getTypeShortNames()) {
			System.out.println(tmp);
		}
		
		RutaBuildOptions options = new RutaBuildOptions();
		TypeSystemDescription typeSystemDescription = factory.createTypeSystemDescription("", descriptorInformation, options, null);
				
		JCas cas = JCasFactory.createJCas(typeSystemDescription);
		cas.setDocumentText(str);

		Ruta.apply(cas.getCas(), rutaRule);		
		
		Type detectionType = CasUtil.getAnnotationType(cas.getCas(), "ruta.Anonymous.Detection");
		ArrayList<AnnotationFS> detections = new ArrayList(CasUtil.select(cas.getCas(), detectionType));
		
		if(detections.size()!=1) {
			System.out.println("Located more than one [ruta.Anonymous.Detection]. KO");
		} else {
			System.out.println("Located one [ruta.Anonymous.Detection]. OK");
			
			AnnotationFS detection = detections.get(0);
			FSArray anchors = (FSArray) detection.getFeatureValue(detectionType.getFeatureByBaseName("anchors"));
			if(anchors.size()!=4) {
				System.out.println("Expected 4 CW inside feature 'anchors'. Contains " + anchors.size() + ". KO");
			}
			System.out.println("======= anchors ============ ");
			for(int i = 0; i < anchors.size(); i++) {
				System.out.println(((AnnotationFS)anchors.get(i)).getCoveredText());
			}
		}
	}


}

Reply via email to