Thanks everyone, and sorry for the delayed response. I tried adding ddm.setSeverity(degreeOfTextRelation); as Pei suggested, but I found that setAttributesFromOriginal is not even being called, but rather, just mapToMentions. (It says that "with 3.1 don't need to map to proper mention type, already creating as proper type"). I am working from the 3.1 tag. Should I check out the trunk and see if James' changes help? Thanks Chase
On Mon, Mar 24, 2014 at 3:30 PM, Dligach, Dmitriy < dmitriy.dlig...@childrens.harvard.edu> wrote: > Hi Everybody, > > I wanted to clarify something in connection with this thread of emails: > > The relation extractor is a machine learning system. Thus, it is going to > be pretty hard to reverse engineer it to determine why a specific mistake > has been made... However, if there is a certain pattern, say, of location_of > that it cannot seem to handle, it should be fixable by adding more training > examples that annotate this pattern. > > Dima > > > > > On Mar 24, 2014, at 15:21, Masanz, James J. <masanz.ja...@mayo.edu> wrote: > > > For the text "aneurysm in the middle cerebral artery" > > 3.1 creates 3 location of relations > > aneurysm : middle cerebral artery > > aneurysm : cerebral artery > > aneurysm : artery > > > > trunk also creates 3 location of relations > > aneurysm : middle cerebral artery > > aneurysm : cerebral artery > > aneurysm : artery > > > > bodyLocation is not set for the IdentifiedAnnotation for "aneurysm" in > either case. > > > > I've created CTAKES-290 > > > > That jira issue will not address the fact the relation extractor does > not create annotations for location of relations in "Rash on arm and leg". > > I'll leave that determination to someone more familiar with the relation > extractor > > > > -- James > > > > -----Original Message----- > > From: Finan, Sean [mailto:sean.fi...@childrens.harvard.edu] > > Sent: Monday, March 24, 2014 12:52 PM > > To: dev@ctakes.apache.org > > Subject: RE: getSeverity etc. for relation extractor > > > > Hi James, I don't have an exact phrase to use. We used the location_of > with a brain aneurysm project, but the corpus is elsewhere now. However, > it would tag things such as [aneurysm] : [middle cerebral artery] and > [aneurysm] : [cerebral artery] - which is different from arm/leg, but an > example of 2 locations for one entity. > > ________________________________________ > > From: Masanz, James J. [masanz.ja...@mayo.edu] > > Sent: Monday, March 24, 2014 11:05 AM > > To: 'dev@ctakes.apache.org' > > Subject: RE: getSeverity etc. for relation extractor > > > > I ran 3.1 against "pain in arm and leg" and I get just one location_of > relation. > > And again no location_of relations for "rash on arm and leg" > > > > Sean, what was the exact phrase you used with the incubator version? > (or was that a while ago and lost) > > > > -----Original Message----- > > From: Finan, Sean [mailto:sean.fi...@childrens.harvard.edu] > > Sent: Friday, March 21, 2014 3:59 PM > > To: dev@ctakes.apache.org > > Subject: RE: getSeverity etc. for relation extractor > > > > Hi James, > > > > It is starting to resemble a row of falling dominoes ... > > > > I ran with an incubator version of the "location of" extractor and it > did seem to find multiple locations for a single d/d. Functionality may > have changed since then. > > > > Thanks for all of your attention to this topic. > > > > Sean > > > > -----Original Message----- > > From: Masanz, James J. [mailto:masanz.ja...@mayo.edu] > > Sent: Friday, March 21, 2014 4:34 PM > > To: 'dev@ctakes.apache.org' > > Subject: RE: getSeverity etc. for relation extractor > > > > Running from trunk, I don't get any relations for "Rash on arm and leg" > :( > > > > If I change the text to "pain in arm and leg" I get one > LocationOfTextRelation annotation with arg1=SignSymptomMention (pain) and > arg2=AnatomicalSiteMention (arm) > > > > Does the relation extractor support creating a 2nd relation involving > pain - the one between pain and leg (is this just an unfortunate choice of > example) or does the relation extractor need enhancement before it would > create mutiple location_of for a single SignSymptomMention or > DiseaseDisorderMention > > > > BTW, I will have to debug the setting of bodyLocation in the code > because even for "pain in arm", when running from trunk, the > LocationOfTextRelation annotation is being created, but the bodyLocation > within the SignSymptomMention is not being set because the code in > TemplateFillerAnnotator expects arg1 and arg2 to be swapped from what they > currently are. I'll take a look at what it was in cTAKES 3.1 and find out > if this is a bug in TemplateFillerAnnotator or something else. > > > > -- James > > > > -----Original Message----- > > From: Finan, Sean [mailto:sean.fi...@childrens.harvard.edu] > > Sent: Friday, March 21, 2014 12:30 PM > > To: dev@ctakes.apache.org > > Subject: RE: getSeverity etc. for relation extractor > > > >> until we have a definite, well-defined need (from a user). > > > > "Rash on arm and leg" > > > >> I don't follow what you mean by your item B) below > > > > [Rash].getLocationRelation() > [Rash : Arm] > > [Rash].getLocation() > [Arm] > > > > > > > > -----Original Message----- > > From: Masanz, James J. [mailto:masanz.ja...@mayo.edu] > > Sent: Friday, March 21, 2014 12:58 PM > > To: 'dev@ctakes.apache.org' > > Subject: RE: getSeverity etc. for relation extractor > > > > Yes, if there is more than one severity or location relation for a given > identified annotation, currently the template filler does just take the > last severity and or last location. > > > > I suggest not changing the type system to allow a list (FSArray), or at > least holding off until we have a definite, well-defined need (from a user). > > > > I think instead, ideally, we would make the template filler smarter at > picking which severity / which location when there is more than one for > the given identified annotation. Therefore I'd rather not make it a list > now, when in the long run I think it should be a single value. And in the > meantime if someone has a need, they can look through the relations. > > > > Pei, I don't follow what you mean by your item B) below > > > > -- James > > > > -----Original Message----- > > From: Chen, Pei [mailto:pei.c...@childrens.harvard.edu] > > Sent: Thursday, March 20, 2014 2:03 PM > > To: dev@ctakes.apache.org > > Subject: RE: getSeverity etc. for relation extractor > > > > Awesome! > > Thanks James... > > > > On Sean's point about many-to-one relationships. I think the current > type system only supports 1 degree_of and severity_of for each > IdentifiedAnnotation? > > Does the TemplateFiller component currently just take the last one in > the list currently? > > Should we modify the type system to support this in the future- > something like the below? > > A) Support many-to-one > > B) Separate out getting the relations and getting the actual identified > annotations. > > > > One suggestion would be: > > IdentifiedAnnotation.getBodyLocations(): FSArray<IdentifiedAnnotation> > > IdentifiedAnnotation.getBodyLocationRelations(): > FSArray<LocationOfTextRelation> > > IdentifiedAnnotation.getSeverity(): FSArray<Modifier> > > IdentifiedAnnotation.getSeverityRelations(): > FSArray<DegreeOfTextRelation> > > > > What do others think? > > --Pei > > > >> -----Original Message----- > >> From: Masanz, James J. [mailto:masanz.ja...@mayo.edu] > >> Sent: Thursday, March 20, 2014 2:50 PM > >> To: 'dev@ctakes.apache.org' > >> Subject: RE: getSeverity etc. for relation extractor > >> > >> I saw the jira was assigned to me and had a few minutes so I > >> implemented a fix and committed. > >> It was more than just the one line. > >> The name of the index in which the binary text relations has changed > >> (now separate indexes instead of one for all binary text relations) so > >> I had to change which index was searched. > >> > >> -----Original Message----- > >> From: Chen, Pei [mailto:pei.c...@childrens.harvard.edu] > >> Sent: Thursday, March 20, 2014 9:28 AM > >> To: dev@ctakes.apache.org > >> Subject: RE: getSeverity etc. for relation extractor > >> > >> Thanks for confirm James. It seem like a bug... > >> Chase, > >> if you confirm if adding ddm.setSeverity(degreeOfTextRelation); works > >> for you, I can commit the changes in trunk. > >> > >> Which also brings up some interesting points: > >> 1) Should we populate IdentifiedAnnotation.severity() and > >> bodylocationof() Directly in RelationExtractorAnnotator instead of the > template filler? > >> It would seem more intuitive and faster than iterating through the > >> relations afterwards again. > >> 2)Chase brought up a good point, should we add some of the commonly > >> used components to the defaultpipeline? (DrugNER, RelationExtractor, > >> TemplateFiller)? Seems easier to get onboard I think. > >> > >> --Pei > >> > >> > >>> -----Original Message----- > >>> From: Chen, Pei > >>> Sent: Wednesday, March 19, 2014 5:58 PM > >>> To: dev@ctakes.apache.org > >>> Subject: RE: getSeverity etc. for relation extractor > >>> > >>> Chase, > >>> I am not sure why or the reasoning behind this, but it might explain > >>> why Severity is null for your DiseaseDisorderMention example: > >>> Line 319 in TemplateFillerAnnotator.java: > >>> > >>> If I'm reading this logic correctly, it will only populate severity for > >>> SignSymptomMention.... Can't think of why not to populate it if it > exists in > >>> the BinaryTextRelations- > >>> have you tried adding: ddm.setSeverity(degreeOfTextRelation); > >>> instead of logging the error ??? > >>> > >>> if (eventMention instanceof > >>> DiseaseDisorderMention) { > >>> DiseaseDisorderMention ddm = > >>> (DiseaseDisorderMention) eventMention; > >>> logger.error("Need to implement attr > >> for " + relation + " for > >>> DiseaseDisorderMention"); > >>> } else if (eventMention instanceof > >>> SignSymptomMention) { > >>> SignSymptomMention ssm = > >>> (SignSymptomMention) eventMention; > >>> > >>> ssm.setSeverity(degreeOfTextRelation); > >>> > >>> Would you mind opening a Jira attach a patch/test if it works for you? > >>> -Pei > >>> > >>>> -----Original Message----- > >>>> From: Chase Master [mailto:chasemast...@gmail.com] > >>>> Sent: Wednesday, March 19, 2014 4:09 PM > >>>> To: dev@ctakes.apache.org > >>>> Subject: Re: getSeverity etc. for relation extractor > >>>> > >>>> Thanks, > >>>> I tried using the AggregateTemplateFiller.xml from the > >>>> template-filler module, and I specified the relation extractor > >>>> pipeline that I was using before from the relation-extractor > >>>> project (there is also a different one in the template-filler > >>>> project called "RelationExtractorAggregateWithoutOrangeBook"). > >>>> However, I don't see a difference, the severity is still null. > >>>> > >>>> Just wondering - is there some reason that the TemplateFiller is > >>>> not included by default? It seems confusing that there are > >>>> getters for properties that aren't set in general ...even when one > >>>> runs the default clinical pipeline instead of the > >>>> RelationExtractorAggregate, these getters are there, but there are no > relations. > >>>> > >>>> > >>>> Thanks > >>>> Chase > >>>> > >>>> > >>>> On Wed, Mar 19, 2014 at 1:04 PM, Chen, Pei > >>>> <pei.c...@childrens.harvard.edu>wrote: > >>>> > >>>>> If I remember correctly, I think those attributes were set in > >>>>> IdentifiedAnnotation via: > >>>>> ctakes-template-filler/desc/analysis_engine/TemplateFillerAnnotator. > >>>>> xm > >>>>> l > >>>>> One can look at the logic in: > >>>>> org.apache.ctakes.template.filler.ae.TemplateFillerAnnotator [1] > >>>>> > >>>>> Have you tried added that to the pipeline? > >>>>> > >>>>> [1] > >>>>> http://svn.apache.org/repos/asf/ctakes/trunk/ctakes-template-fil > >>>>> le > >>>>> r/ > >>>>> sr > >>>>> c/main/java/org/apache/ctakes/template/filler/ae/TemplateFillerA > >>>>> nn > >>>>> ot > >>>>> at > >>>>> or.java > >>>>> > >>>>> --Pei > >>>>> > >>>>>> -----Original Message----- > >>>>>> From: Chase Master [mailto:chasemast...@gmail.com] > >>>>>> Sent: Wednesday, March 19, 2014 1:56 PM > >>>>>> To: dev@ctakes.apache.org > >>>>>> Subject: getSeverity etc. for relation extractor > >>>>>> > >>>>>> Hi, > >>>>>> > >>>>>> I am trying to output the relations associated with > >>>>> DiseaseDisorderMentions > >>>>>> and other types. But I want to start by iterating over > >>>>>> DiseaseDisorderMention, not BinaryTextRelations since I want > >>>>>> to be sure > >>>>> to > >>>>>> find them all, even if they have no associated relation. > >>>>>> > >>>>>> I always get null when using any of the getters like > >>>>>> "getSeverity()". I > >>>>> am > >>>>>> using the example text "He had a slight fracture in the > >>>>>> proximal right > >>>>> fibula". > >>>>>> When I iterate over BinaryTextRelations, I see the following > >>>>>> valid > >>>>> values: > >>>>>> BinaryTextRelation slightFracture = iterator.next(); > >>>>>> slightFracture.getArg1().getArgument().getCoveredText() is > >> "fracture" > >>>>>> slightFracture.getArg2().getArgument().getCoveredText() is "slight". > >>>>>> However, for the "fracture" DiseaseDisorderMention, > >>>>>> getSeverity() is > >>>>> null. > >>>>>> If it wasn't, I would then grab > >>>>>> disease.getSeverity().getArg1().getArgument().getCoveredText() > >>>>>> , > >>>>>> or for Arg2. > >>>>>> > >>>>>> Thanks, > >>>>>> Chase > >>>>> > >