You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by sw...@apache.org on 2013/04/19 04:13:29 UTC
svn commit: r1469665 - in
/ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion:
cc/JudgeAttributeInstances.java pipelines/RunJudgeAttributeInstances.java
Author: swu
Date: Fri Apr 19 02:13:28 2013
New Revision: 1469665
URL: http://svn.apache.org/r1469665
Log:
instance gathering for assertion module, works ok on gold standard data, making changes to the _initialview. doesn't get rid of skipped instances that are involved in some relation.
Modified:
ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/cc/JudgeAttributeInstances.java
ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/pipelines/RunJudgeAttributeInstances.java
Modified: ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/cc/JudgeAttributeInstances.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/cc/JudgeAttributeInstances.java?rev=1469665&r1=1469664&r2=1469665&view=diff
==============================================================================
--- ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/cc/JudgeAttributeInstances.java (original)
+++ ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/cc/JudgeAttributeInstances.java Fri Apr 19 02:13:28 2013
@@ -24,10 +24,11 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
+import org.apache.ctakes.assertion.eval.AssertionEvaluation.Options;
import org.apache.ctakes.typesystem.type.constants.CONST;
import org.apache.ctakes.typesystem.type.textsem.EventMention;
import org.apache.uima.UimaContext;
@@ -84,6 +85,14 @@ public class JudgeAttributeInstances ext
protected String fileNamerClassName;
/**
+ * The parameter name which to ignore
+ */
+// public static final String PARAM_IGNORABLE_ATTR = ConfigurationParameterFactory
+// .createConfigurationParameterName(JudgeAttributeInstances.class, "ignorableAttributes");
+// @ConfigurationParameter(mandatory = true, description = "takes a path to directory into which output files will be written.")
+// private String ignorableAttributesString;
+
+ /**
* The name of the XMI XML scheme. This is a valid value for the parameter
* {@value #PARAM_XML_SCHEME_NAME}
*/
@@ -99,6 +108,9 @@ public class JudgeAttributeInstances ext
CONDITIONAL, GENERIC, HISTORYOF, POLARITY, SUBJECT, UNCERTAINTY;
}
+ protected static Options options = new Options();
+
+
private static final HashMap<Selector,String> msg = new HashMap<Selector,String>();
static {
msg.put(Selector.CONDITIONAL,"conditional");
@@ -110,7 +122,7 @@ public class JudgeAttributeInstances ext
}
- private HashSet<EventMention> deletableMentions = new HashSet<EventMention>();
+ private ArrayList<EventMention> deletableMentions = new ArrayList<EventMention>();
private File outputDirectory;
@@ -144,19 +156,29 @@ public class JudgeAttributeInstances ext
}
@Override
- public void process(JCas jcas) throws AnalysisEngineProcessException {
- String fileName = fileNamer.nameFile(jcas);
+ public void process(JCas jCas) throws AnalysisEngineProcessException {
+ String fileName = fileNamer.nameFile(jCas);
System.out.println("==================\nFile: "+fileName);
- judgeAttributes(jcas);
+ deletableMentions = new ArrayList<EventMention>();
+
+// JCas jCas = null;
+// try {
+// jCas = jCas.getView(CAS.NAME_DEFAULT_SOFA);
+// } catch (CASException e1) {
+// // TODO Auto-generated catch block
+// e1.printStackTrace();
+// }
+
+ judgeAttributes(jCas);
- removeExtraneousMentions(jcas);
+ removeExtraneousMentions(jCas);
try {
if (useXMI) {
- writeXmi(jcas.getCas(), fileName);
+ writeXmi(jCas.getCas(), fileName);
}
else {
- writeXCas(jcas.getCas(), fileName);
+ writeXCas(jCas.getCas(), fileName);
}
}
catch (IOException e) {
@@ -218,27 +240,27 @@ public class JudgeAttributeInstances ext
String subject = mention.getSubject();
int uncertainty = mention.getUncertainty();
- if (conditional==true) {
+ if (conditional==true && !options.ignoreConditional) {
interact(jCas,mention,Selector.CONDITIONAL); // uses the attribute in mention
flag = true;
}
- if (generic==true) {
+ if (generic==true && !options.ignoreGeneric) {
interact(jCas,mention,Selector.GENERIC); // uses the attribute in mention
flag = true;
}
- if (historyOf==CONST.NE_HISTORY_OF_PRESENT) {
- interact(jCas,mention,Selector.HISTORYOF); // uses the attribute in mention
- flag = true;
- }
- if (polarity==CONST.NE_POLARITY_NEGATION_PRESENT) {
- System.out.println("Polarity="+polarity+": "+mention.getCoveredText());
- flag = true;
+ if (historyOf==CONST.NE_HISTORY_OF_PRESENT && !options.ignoreHistory) {
+// interact(jCas,mention,Selector.HISTORYOF); // uses the attribute in mention
+// flag = true;
+ }
+ if (polarity==CONST.NE_POLARITY_NEGATION_PRESENT && !options.ignorePolarity) {
+// interact(jCas,mention,Selector.POLARITY); // uses the attribute in mention
+// flag = true;
}
- if (!CONST.ATTR_SUBJECT_PATIENT.equals(subject) && subject!=null) {
+ if (!CONST.ATTR_SUBJECT_PATIENT.equals(subject) && subject!=null && !options.ignoreSubject) {
interact(jCas,mention,Selector.SUBJECT); // uses the attribute in mention
flag = true;
}
- if (uncertainty==CONST.NE_UNCERTAINTY_PRESENT) {
+ if (uncertainty==CONST.NE_UNCERTAINTY_PRESENT && !options.ignoreUncertainty) {
interact(jCas,mention,Selector.UNCERTAINTY); // uses the attribute in mention
flag = true;
}
@@ -272,6 +294,7 @@ public class JudgeAttributeInstances ext
System.out.println("| "+ sb.toString().replaceAll("\\n", "\n| "));
System.out.println(": "+ semGroup +
+ " : beg=" + mention.getBegin() + " : end=" + mention.getEnd() +
" : c=" + mention.getConditional() + " : g=" + mention.getGeneric() +
" : h=" + mention.getHistoryOf() + " : p=" + mention.getPolarity() +
" : s=" + mention.getSubject() + " : u=" + mention.getUncertainty());
@@ -317,11 +340,15 @@ public class JudgeAttributeInstances ext
response = prompt( "umm... is this " + msg.get(attr) + "=" + getAttrValueString(mention,attr));
}
else if (response.toLowerCase().startsWith("y")) {
- // yes response -- do nothing or put into alternate view?
+ // yes response -- do nothing, or put into alternate view?
break;
}
- else if (response.toLowerCase().startsWith("n") || response.toLowerCase().startsWith("s")) {
- // no response
+ else if (response.toLowerCase().startsWith("n")) {
+ // response if "no"
+ adjustAttr(attr,response,mention);
+ break;
+ }
+ else if (response.toLowerCase().startsWith("s")) {
deletableMentions.add(mention);
break;
}
@@ -337,6 +364,46 @@ public class JudgeAttributeInstances ext
}
}
+ private void adjustAttr(Selector attr, String response, EventMention mention) {
+ switch (attr) {
+ case CONDITIONAL:
+ mention.setConditional(CONST.NE_CONDITIONAL_FALSE);
+ break;
+ case GENERIC:
+ mention.setGeneric(CONST.NE_GENERIC_FALSE);
+ break;
+ case HISTORYOF:
+ mention.setHistoryOf(CONST.NE_HISTORY_OF_ABSENT);
+ break;
+ case POLARITY:
+ mention.setPolarity(CONST.NE_POLARITY_NEGATION_ABSENT);
+ break;
+ case SUBJECT:
+ response = prompt( "what is the subject? p=patient (default), f=family_member, " +
+ "df=donor_family_member, do=donor_other, o=other... or s=skip");
+ if (response.startsWith("p")) {
+ mention.setSubject(CONST.ATTR_SUBJECT_PATIENT);
+ } else if (response.startsWith("f")) {
+ mention.setSubject(CONST.ATTR_SUBJECT_FAMILY_MEMBER);
+ } else if (response.startsWith("df")) {
+ mention.setSubject(CONST.ATTR_SUBJECT_DONOR_FAMILY_MEMBER);
+ } else if (response.equals("do")) {
+ mention.setSubject(CONST.ATTR_SUBJECT_DONOR_OTHER);
+ } else if (response.startsWith("o")) {
+ mention.setSubject(CONST.ATTR_SUBJECT_OTHER);
+ } else {
+ System.out.println("hmm... i'm skipping it.");
+ deletableMentions.add(mention);
+ }
+ break;
+ case UNCERTAINTY:
+ mention.setUncertainty(CONST.NE_UNCERTAINTY_ABSENT);
+ break;
+ default:
+ break;
+ }
+ }
+
private String getAttrValueString(EventMention mention, Selector s) {
switch (s) {
case CONDITIONAL:
@@ -357,12 +424,14 @@ public class JudgeAttributeInstances ext
}
private void removeExtraneousMentions(JCas jcas) {
- // TODO: not operational yet
-// for (EventMention mention : deletableMentions) {
-// if (mention!=null) {
-// mention.removeFromIndexes(jcas);
-// }
-// }
+ // TODO: how to remove if it is in a relation
+
+ for (EventMention mention : deletableMentions) {
+ if (mention!=null) {
+// System.out.println("removing "+mention.toString());
+ mention.removeFromIndexes();
+ }
+ }
}
}
\ No newline at end of file
Modified: ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/pipelines/RunJudgeAttributeInstances.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/pipelines/RunJudgeAttributeInstances.java?rev=1469665&r1=1469664&r2=1469665&view=diff
==============================================================================
--- ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/pipelines/RunJudgeAttributeInstances.java (original)
+++ ctakes/trunk/ctakes-assertion/src/main/java/org/apache/ctakes/assertion/pipelines/RunJudgeAttributeInstances.java Fri Apr 19 02:13:28 2013
@@ -15,6 +15,7 @@ import org.apache.uima.resource.Resource
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.cleartk.util.Options_ImplBase;
import org.kohsuke.args4j.Option;
+import org.kohsuke.args4j.spi.BooleanOptionHandler;
import org.uimafit.component.xwriter.XWriter;
import org.uimafit.factory.AnalysisEngineFactory;
import org.uimafit.factory.CollectionReaderFactory;
@@ -35,9 +36,46 @@ public class RunJudgeAttributeInstances
usage = "where to write the 'adjudicated' instances in xmi format to",
required = true)
public String outputDir = "sharp_data/output_instancegathering";
+// @Option(
+// name = "--ignore-polarity",
+// usage = "specify whether polarity processing should be ignored (true or false). default: false",
+// required = false)
+// public boolean ignorePolarity = false; // note that this is reversed from the "ignore" statement
+//
+// @Option(
+// name = "--ignore-conditional",
+// usage = "specify whether conditional processing should be ignored (true or false). default: false",
+// required = false)
+// public boolean ignoreConditional = false;
+//
+// @Option(
+// name = "--ignore-uncertainty",
+// usage = "specify whether uncertainty processing should be ignored (true or false). default: false",
+// required = false)
+// public boolean ignoreUncertainty = false;
+//
+// @Option(
+// name = "--ignore-subject",
+// usage = "specify whether subject processing should be ignored (true or false). default: false",
+// required = false,
+// handler=BooleanOptionHandler.class)
+// public boolean ignoreSubject = false;
+//
+// @Option(
+// name = "--ignore-generic",
+// usage = "specify whether generic processing should be ignored (true or false). default: false",
+// required = false)
+// public boolean ignoreGeneric = false;
+//
+// // srh adding 2/20/13
+// @Option(
+// name = "--ignore-history",
+// usage = "specify whether 'history of' processing should be run (true or false). default: false",
+// required = false)
+// public boolean ignoreHistory = false;
}
- protected static Options options = new Options();
+ public static Options options = new Options();
/**
* @param args