Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id DFD77200B52 for ; Mon, 25 Jul 2016 23:09:18 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id DE5AD160A7D; Mon, 25 Jul 2016 21:09:18 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 098B9160A67 for ; Mon, 25 Jul 2016 23:09:17 +0200 (CEST) Received: (qmail 36318 invoked by uid 500); 25 Jul 2016 21:09:17 -0000 Mailing-List: contact commits-help@ctakes.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ctakes.apache.org Delivered-To: mailing list commits@ctakes.apache.org Received: (qmail 36309 invoked by uid 99); 25 Jul 2016 21:09:17 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Jul 2016 21:09:17 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id B441818797E for ; Mon, 25 Jul 2016 21:09:16 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.374 X-Spam-Level: X-Spam-Status: No, score=0.374 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id bJws72HQj7xh for ; Mon, 25 Jul 2016 21:09:15 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 23E305F239 for ; Mon, 25 Jul 2016 21:09:15 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 51925E0054 for ; Mon, 25 Jul 2016 21:09:14 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 1C7E43A02CB for ; Mon, 25 Jul 2016 21:09:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1754048 - in /ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal: ae/EventTimeCNNAnnotator.java eval/NeuralEventTimeRelationsCNNEvaluation.java Date: Mon, 25 Jul 2016 21:09:13 -0000 To: commits@ctakes.apache.org From: clin@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160725210914.1C7E43A02CB@svn01-us-west.apache.org> archived-at: Mon, 25 Jul 2016 21:09:19 -0000 Author: clin Date: Mon Jul 25 21:09:13 2016 New Revision: 1754048 URL: http://svn.apache.org/viewvc?rev=1754048&view=rev Log: Check in the Region-based CNN implementation for event-time. Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeCNNAnnotator.java ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/NeuralEventTimeRelationsCNNEvaluation.java Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeCNNAnnotator.java URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeCNNAnnotator.java?rev=1754048&r1=1754047&r2=1754048&view=diff ============================================================================== --- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeCNNAnnotator.java (original) +++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeCNNAnnotator.java Mon Jul 25 21:09:13 2016 @@ -12,6 +12,7 @@ import org.apache.ctakes.temporal.nn.eve import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation; import org.apache.ctakes.typesystem.type.relation.RelationArgument; import org.apache.ctakes.typesystem.type.relation.TemporalTextRelation; +import org.apache.ctakes.typesystem.type.syntax.BaseToken; import org.apache.ctakes.typesystem.type.textsem.EventMention; import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation; import org.apache.ctakes.typesystem.type.textsem.TimeMention; @@ -37,6 +38,10 @@ public class EventTimeCNNAnnotator exten @Override public void process(JCas jCas) throws AnalysisEngineProcessException { + + Map> coveringMap = + JCasUtil.indexCovering(jCas, EventMention.class, EventMention.class); + //get all gold relation lookup Map, BinaryTextRelation> relationLookup; relationLookup = new HashMap<>(); @@ -71,10 +76,12 @@ public class EventTimeCNNAnnotator exten String context; if(arg2.getBegin() < arg1.getBegin()) { // ... time ... event ... scenario - context = eventTimeRelationPrinter.getTokensBetween(jCas, sentence, arg2, "t", arg1, "e", 5); +// context = eventTimeRelationPrinter.getTokensBetween(jCas, sentence, arg2, "t", arg1, "e", 5); + context = getTokensBetweenExpanded(jCas, sentence, arg2, "t", arg1, "e", 5, coveringMap); } else { // ... event ... time ... scenario - context = eventTimeRelationPrinter.getTokensBetween(jCas, sentence, arg1, "e", arg2, "t", 5); +// context = eventTimeRelationPrinter.getTokensBetween(jCas, sentence, arg1, "e", arg2, "t", 5); + context = getTokensBetweenExpanded(jCas, sentence, arg1, "e", arg2, "t", 5, coveringMap); } //derive features based on context: @@ -127,6 +134,107 @@ public class EventTimeCNNAnnotator exten } /** + * Print context from left to right. + * @param contextSize number of tokens to include on the left of arg1 and on the right of arg2 + */ + public static String getTokensBetweenExpanded( + JCas jCas, + Sentence sent, + Annotation left, + String leftType, + Annotation right, + String rightType, + int contextSize, + Map> coveringMap) { + + boolean leftIsExpanded = false; + Annotation longerLeft = left; + if(left instanceof EventMention){ + longerLeft = getLongerEvent(coveringMap, left); + if(longerLeft != left){ + leftIsExpanded = true; + } + } + + boolean rightIsExpanded = false; + Annotation longerRight = right; + if(right instanceof EventMention){ + longerRight = getLongerEvent(coveringMap, right); + if(longerRight != right){ + rightIsExpanded = true; + } + } + + List tokens = new ArrayList<>(); + if(leftIsExpanded){ + for(BaseToken baseToken : JCasUtil.selectPreceding(jCas, BaseToken.class, longerLeft, contextSize)) { + if(sent.getBegin() <= baseToken.getBegin()) { + tokens.add(baseToken.getCoveredText()); + } + } + }else{ + for(BaseToken baseToken : JCasUtil.selectPreceding(jCas, BaseToken.class, left, contextSize)) { + if(sent.getBegin() <= baseToken.getBegin()) { + tokens.add(baseToken.getCoveredText()); + } + } + } + tokens.add("<" + leftType + ">"); + tokens.add(left.getCoveredText()); + tokens.add(""); + if(leftIsExpanded){ + for(BaseToken baseToken : JCasUtil.selectBetween(jCas, BaseToken.class, longerLeft, right)) { + tokens.add(baseToken.getCoveredText()); + } + }else if(rightIsExpanded){ + for(BaseToken baseToken : JCasUtil.selectBetween(jCas, BaseToken.class, left, longerRight)) { + tokens.add(baseToken.getCoveredText()); + } + }else{ + for(BaseToken baseToken : JCasUtil.selectBetween(jCas, BaseToken.class, left, right)) { + tokens.add(baseToken.getCoveredText()); + } + } + tokens.add("<" + rightType + ">"); + tokens.add(right.getCoveredText()); + tokens.add(""); + if(rightIsExpanded){ + for(BaseToken baseToken : JCasUtil.selectFollowing(jCas, BaseToken.class, longerRight, contextSize)) { + if(baseToken.getEnd() <= sent.getEnd()) { + tokens.add(baseToken.getCoveredText()); + } + } + }else{ + for(BaseToken baseToken : JCasUtil.selectFollowing(jCas, BaseToken.class, right, contextSize)) { + if(baseToken.getEnd() <= sent.getEnd()) { + tokens.add(baseToken.getCoveredText()); + } + } + } + + return String.join(" ", tokens).replaceAll("[\r\n]", " "); + } + + private static Annotation getLongerEvent(Map> coveringMap, + Annotation event) { + int maxSpan = getSpan(event); + Annotation longerEvent = event; + Collection eventList = coveringMap.get(event); + for(EventMention covEvent : eventList){ + int span = getSpan(covEvent); + if(span > maxSpan){ + maxSpan = span; + longerEvent = covEvent; + } + } + return longerEvent; + } + + private static int getSpan(Annotation left) { + return (left.getEnd()-left.getBegin()); + } + + /** * original way of getting label * @param relationLookup * @param arg1 @@ -205,8 +313,8 @@ public class EventTimeCNNAnnotator exten } private List getCandidateRelationArgumentPairs(JCas jCas, Sentence sentence) { -// Map> coveringMap = -// JCasUtil.indexCovering(jCas, EventMention.class, EventMention.class); + Map> coveringMap = + JCasUtil.indexCovering(jCas, EventMention.class, EventMention.class); List pairs = Lists.newArrayList(); for (EventMention event : JCasUtil.selectCovered(jCas, EventMention.class, sentence)) { @@ -220,10 +328,10 @@ public class EventTimeCNNAnnotator exten if(this.isTraining()){//if training mode, train on both gold event and span-overlapping system events for (TimeMention time : JCasUtil.selectCovered(jCas, TimeMention.class, sentence)) { -// Collection eventList = coveringMap.get(event); -// for(EventMention covEvent : eventList){ -// pairs.add(new IdentifiedAnnotationPair(covEvent, time)); -// } + Collection eventList = coveringMap.get(event); + for(EventMention covEvent : eventList){ + pairs.add(new IdentifiedAnnotationPair(covEvent, time)); + } pairs.add(new IdentifiedAnnotationPair(event, time)); } }else{//if testing mode, only test on system generated events Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/NeuralEventTimeRelationsCNNEvaluation.java URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/NeuralEventTimeRelationsCNNEvaluation.java?rev=1754048&r1=1754047&r2=1754048&view=diff ============================================================================== --- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/NeuralEventTimeRelationsCNNEvaluation.java (original) +++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/NeuralEventTimeRelationsCNNEvaluation.java Mon Jul 25 21:09:13 2016 @@ -326,7 +326,7 @@ EvaluationOfTemporalRelations_ImplBase{ //aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(CountSentenceContainsTimes.class)); //add unlabeled nearby system events as potential links: -// aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(AddPotentialRelations.class)); + aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(AddPotentialRelations.class)); //directory = new File(directory,"event-time");//for normalization