Good to hear. Let me know if you need more. Yes, TOP is the common super type for feature structures.
I still had some more available time after I implemented the part for the feature (match) expressions. So I added also feature assignment. The issue is still open since there are many things still missing like FSArrays of Feature Structures, variables and list variables and so on. However, I do not know yet when I will add these. Best, Peter Am 30.09.2016 um 17:36 schrieb Sebastian Schaaf: > Hi, > > We tested today and for us it looks like you also implemented already the > access to values from annotation-less feature structures (so these derived > from TOP)? > In fact, we could access properly everything we needed, and there was a > second commit after your email down below. > So, great! It definitely helps on our use case. Thanks a ton :). > > Have a nice weekend, > Best, > > Sebastian > > > ----- Ursprüngliche Mail ----- > Von: "Peter Klügl" <peter.klu...@averbis.com> > An: "user" <user@uima.apache.org> > Gesendet: Donnerstag, 29. September 2016 15:00:55 > Betreff: Re: RUTA in Java: access object contents > > Hi, > > > the first protypical implemenation is ready. What's supported right now > is best observed in the new unit test named > testFeatureStructureFeature() here: > > https://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java > > > Can you take a look at the functionality? Let me know this help in your > use case and if you need something else. > > I'll add now some support for accessing feature values of feature > structures where no annotations are required. > > > Best, > > > Peter > > > Am 29.09.2016 um 10:44 schrieb Sebastian Schaaf: >> Hi Peter, >> >> That's great, thanks a ton in advance! >> For us this means we can proceed just in time with a task which requires the >> new RUTA feature. >> >> Keeping fingers crossed. >> >> Best, >> Sebastian >> >> ----- Ursprüngliche Mail ----- >> Von: "Peter Klügl" <peter.klu...@averbis.com> >> An: "user" <user@uima.apache.org> >> Gesendet: Donnerstag, 29. September 2016 10:32:45 >> Betreff: Re: RUTA in Java: access object contents >> >> Hi, >> >> >> yes, I hope I can implement it today or tomorrow. >> >> >> Best, >> >> >> Peter >> >> >> Am 29.09.2016 um 10:30 schrieb Sebastian Schaaf: >>> Hi Peter, >>> >>> As yesterday the RUTA 2.5 release was announced (congrats :) ) and the end >>> of the month is near: do you see chances to work on the ticket for feature >>> structure support? >>> >>> Best, >>> Sebastian >>> >>> >>> ----- Ursprüngliche Mail ----- >>> Von: "Sebastian Schaaf" <sebastian.sch...@scai.fraunhofer.de> >>> An: "user" <user@uima.apache.org> >>> Gesendet: Mittwoch, 14. September 2016 22:08:39 >>> Betreff: Re: RUTA in Java: access object contents >>> >>> Sounds great, thank you in advance! >>> Whatever comes up, don't hesitate to query back to us. >>> >>> Cheers, >>> Sebastian >>> >>> >>> ----- Ursprüngliche Mail ----- >>> Von: "Peter Klügl" <peter.klu...@averbis.com> >>> An: "user" <user@uima.apache.org> >>> Gesendet: Mittwoch, 14. September 2016 18:33:56 >>> Betreff: Re: RUTA in Java: access object contents >>> >>> 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/ >>>>>