You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@uima.apache.org by Philip Ogren <ph...@ogren.info> on 2007/06/26 23:50:16 UTC
typeSystemInit() method in CasAnnotator_ImplBase but not JCasAnnotator_ImplBase
Thilo had pointed me towards the method typeSystemInit() in a recent
posting as a way of getting type system information in an annotator. Is
there a reason that this method exists in CasAnnotator_ImplBase but not
JCasAnnotator_ImplBase? Or is this an omission? My intuition is that
might have been left out on purpose because when using the JCas you
typically would have a fixed type system that is determined at compile
time. Still, it seems useful to be able to override typeSystemInit()
even if it is only called once. I didn't really think carefully about
which Annotator_ImplBase I should use. Are there far reaching
consequences I should consider - or is it really just about convenience
at the API level?
Thanks,
Philip
Re: typeSystemInit() method in CasAnnotator_ImplBase but not JCasAnnotator_ImplBase
Posted by Adam Lally <al...@alum.rpi.edu>.
On 6/26/07, Philip Ogren <ph...@ogren.info> wrote:
> Thilo had pointed me towards the method typeSystemInit() in a recent
> posting as a way of getting type system information in an annotator. Is
> there a reason that this method exists in CasAnnotator_ImplBase but not
> JCasAnnotator_ImplBase? Or is this an omission? My intuition is that
> might have been left out on purpose because when using the JCas you
> typically would have a fixed type system that is determined at compile
> time. Still, it seems useful to be able to override typeSystemInit()
> even if it is only called once. I didn't really think carefully about
> which Annotator_ImplBase I should use. Are there far reaching
> consequences I should consider - or is it really just about convenience
> at the API level?
>
Yes, I think this was left out because JCas-annotators don't need to
acquire Type and Feature handles in the same way that CAS-annotators
do. Maybe that was a mistake.
The logic in CasAnnotator_ImplBase to determine if the type system
changed is pretty simple - in each call to process(CAS) it just calls
the following method to checksif CAS.getTypeSystem() is == to the type
system of the CAS it got last:
/**
* Checks it the type system of the given CAS is different from the
last type system this
* component was operating on. If it is different, calls the
typeSystemInit method on the
* component.
*/
private void checkTypeSystemChange(CAS aCAS) throws
AnalysisEngineProcessException {
TypeSystem typeSystem = aCAS.getTypeSystem();
if (typeSystem != mLastTypeSystem) {
typeSystemInit(typeSystem);
mLastTypeSystem = typeSystem;
}
}
So a workaround is to just copy this logic to your annotator.
-Adam