Hi,

I created an issue for it: https://issues.apache.org/jira/browse/UIMA-5108


I won't be able to fix it this week, and maybe not next week because of
some deadlines. I guess it will be fixed at least in the trunk before of
the end of the month.



Best,


Peter


Am 14.09.2016 um 18:25 schrieb Sebastian Schaaf:
> Hi Peter,
>
> Indeed, I was talking about UIMA objects.
>
> We tried to hunt down the error in deeper means and understood more of the 
> codes. Ahead of any details: again yes, we fail on types extending from TOP. 
> In our case it is "concept", which does not have a covering text.
>
> In "SimpleFeatureEx", the public method "getFeatures" contains a for loop in 
> which the different handleable cases are listed in some 'if else' cascade - 
> this one also contains the support for arrays you wrote about. For our 
> concept type the else case holds, so that an UIMA method 
> "getFeatureByBaseName" gets called. This one fails, because it checks if the 
> extracted feature comes from a type that extends from the type we want to use 
> the feature content for. In other words: our NormalizedNamedEntity type 
> (extending from Annotation) is queried for a feature contained in an instance 
> of type concept. As the latter one extends from TOP (and not from 
> NormalizedNamedEntity) getFeatureByBaseName throws the error. Although the 
> desired content is fine (we get the string we want!).
>
> We also tried to manipulate types, temporarily declaring concept extends 
> legally, so that this check does not fail. And it is fine. For the moment, 
> because regarding our environment this is not an option. Testing with ruta 
> source codes to implement ourselves resulted in many lines of code to be 
> subject to adaptation. Also, the variable 'result' in the discussed for loop 
> may be changed in an inadequate way . we don't know about the details of RUTA.
>
> So, the question is may it be possible for you to implement the handling of 
> cases where features extend from TOP? Maybe first as a patch, so that it has 
> not to be integrated into your release. And we could test whether it fails in 
> our setting.
>
> So far,
> Best,
>
> Sebastian
>
> ----- Ursprüngliche Mail -----
> Von: "Peter Klügl" <peter.klu...@averbis.com>
> An: "user" <user@uima.apache.org>
> Gesendet: Montag, 12. September 2016 13:26:07
> Betreff: Re: RUTA in Java: access object contents
>
> Hi,
>
>
> first of all: what do you mean exactly by "our objects" and "given Java
> objects"? Real Java objects of some arbitrary class or feature
> structures (annotations) in UIMA? I assume that you were referring to
> UIMA objects and the getters are the getters of features in JCasGen
> cover classes. If not, you can skip the answer below ;-)
>
>
> What you describe that should work just fine, if there weren't the
> feature structures (the types extending TOP). Plain feature structures
> are hardly supported in Ruta mainly for historical reasons. And many
> language elements do not make much sense without annotation offsets,
> e.g., sequential matching, conditions like contains and partof, ...
>
>
> There is no real technical reason that feature structures are not
> completely supported, there was just no reason to support them. I
> personally just extended Annotation instead of Feature Structure even if
> there was no explicit semantics of the offsets. This is of course not an
> option if you already have a type system.
>
>
> I actually have to admit that I do not know right now where feature
> structures are and are not supported in Ruta. I added some minimal
> support for Arrays lately, and they are also just feature structures. I
> have to take a look...
>
>
> Back to your example:
>
> If you have
>
> - Type X extends Annotation with feature a with range A
>
> - Type A extends TOP with feature b with range B
>
> - Type B extends TOP with feature z with range String
>
> ... you would normally write:
>
> X.a.b.z=="z";
>
> to match on each annotation of type X, get the value of feature a of
> annotation X, get the value of feature b of the feature structure  of
> type A, get the value of feature z of the feature structure of the type
> B, and compare it to the string "z".
>
>
> The short answer is that you can access the getter just with the name of
> the feature.
>
>
> If this simple example does not work, then the reason is probably a
> simple instanceof comparing the feature structure to AnnotationFS.
> Allowing feature structures in feature expression only should not be
> much work.
>
>
> Do you want me to add this support in Ruta? However, I cannot promise
> that the changes will be part of the upcoming release.
>
>
> Best,
>
>
> Peter
>
>
> Am 12.09.2016 um 09:42 schrieb Sebastian Schaaf:
>> Dear all,
>>
>> As we needed to integrate a rule-based analysis engine into our UIMA 
>> framework, we ended up using RUTA. The package was encouraging, we 
>> proceeded well with projecting our ideas into RUTA (thanks to the 
>> comprehensive documentation).
>>
>> We also saw that there are efforts to offer RUTA in plain Java code 
>> for developers, ignoring the delivered workbench. We could integrate 
>> it well with our modified type system, it is finally running. But, 
>> and that's the reason for this email, currently we are stuck with 
>> extracting some information from our objects, which is not 
>> represented as simple feature. Leaving out the option to introduce 
>> major changes to our codes and not liking the idea of permanent 
>> workarounds, we were wondering if (and if not maybe when) there is 
>> the possibility to generically call methods on given Java objects.
>> Precisely, we have objects with attributes being (linked from other) 
>> objects, plus respective getter methods. So, the information we need 
>> from our objects is retrievable by calling a getter X.getA, resulting 
>> in (background) object A which in turn knows a method .getB, 
>> resulting in the desired B (or more precisely: its string Z):
>>
>> ### Example ###
>> Type X (extends Annotation, has offsets)
>> Type A (extends TOP, has no offsets)
>> Type B (extends TOP, has no offsets)
>> String Z
>>
>> How to call "X.getA().getB().getZ()"?
>> ##############
>>
>> It appeared that RUTA is capable by some whatever (UIMA-?)magic to 
>> get e.g. the covered text of a text annotation by "X.coveredText", 
>> although the object only knows a "getCoveredText" method. Let's call 
>> it a 'pseudo-feature'. No idea how generic this is, but: if just 
>> querying "X.A" RUTA seems to do well, ultimately receiving A. While A 
>> is an object (simple data type expected, like integer and string?) 
>> everything stops. So no obvious chance to receive our B.
>>
>> Is there an easy, somewhat 'native' way to deal with object-derived 
>> data like in the case described above?
>>
>> Thanks in advance!
>>
>> Sebastian
>>
>>
>> ---
>> Sebastian Schaaf, M.Sc. Bioinformatics
>>
>> Fraunhofer-Institute for Algorithms and Scientific Computing (SCAI)
>> Department of Bioinformatics
>> Schloss Birlinghoven
>> D-53754 Sankt Augustin
>>
>> Room: C3-233
>> Tel.: +49 2241 14 2280
>> Email: sebastian.sch...@scai.fraunhofer.de
>> Internet: http://www.scai.fraunhofer.de/
>>

Reply via email to