You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by se...@apache.org on 2016/10/26 16:55:26 UTC
svn commit: r1766705 -
/ctakes/trunk/ctakes-dependency-parser/src/main/java/org/apache/ctakes/dependency/parser/ae/ClearNLPSemanticRoleLabelerAE.java
Author: seanfinan
Date: Wed Oct 26 16:55:26 2016
New Revision: 1766705
URL: http://svn.apache.org/viewvc?rev=1766705&view=rev
Log:
Catch for possible null head or missing head in index map
Modified:
ctakes/trunk/ctakes-dependency-parser/src/main/java/org/apache/ctakes/dependency/parser/ae/ClearNLPSemanticRoleLabelerAE.java
Modified: ctakes/trunk/ctakes-dependency-parser/src/main/java/org/apache/ctakes/dependency/parser/ae/ClearNLPSemanticRoleLabelerAE.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dependency-parser/src/main/java/org/apache/ctakes/dependency/parser/ae/ClearNLPSemanticRoleLabelerAE.java?rev=1766705&r1=1766704&r2=1766705&view=diff
==============================================================================
--- ctakes/trunk/ctakes-dependency-parser/src/main/java/org/apache/ctakes/dependency/parser/ae/ClearNLPSemanticRoleLabelerAE.java (original)
+++ ctakes/trunk/ctakes-dependency-parser/src/main/java/org/apache/ctakes/dependency/parser/ae/ClearNLPSemanticRoleLabelerAE.java Wed Oct 26 16:55:26 2016
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -16,16 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.ctakes.dependency.parser.ae;
-
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+package org.apache.ctakes.dependency.parser.ae;
+import com.googlecode.clearnlp.component.AbstractComponent;
+import com.googlecode.clearnlp.dependency.*;
+import com.googlecode.clearnlp.engine.EngineGetter;
+import com.googlecode.clearnlp.nlp.NLPLib;
+import com.googlecode.clearnlp.reader.AbstractReader;
import org.apache.ctakes.core.resource.FileLocator;
import org.apache.ctakes.core.util.ListFactory;
import org.apache.ctakes.typesystem.type.syntax.BaseToken;
@@ -38,286 +35,291 @@ import org.apache.ctakes.typesystem.type
import org.apache.log4j.Logger;
import org.apache.uima.UimaContext;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.fit.component.JCasAnnotator_ImplBase;
+import org.apache.uima.fit.descriptor.ConfigurationParameter;
+import org.apache.uima.fit.descriptor.TypeCapability;
+import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.cas.EmptyFSList;
import org.apache.uima.jcas.cas.FSList;
import org.apache.uima.jcas.cas.TOP;
import org.apache.uima.resource.ResourceInitializationException;
-import org.apache.uima.fit.component.JCasAnnotator_ImplBase;
-import org.apache.uima.fit.descriptor.ConfigurationParameter;
-import org.apache.uima.fit.descriptor.TypeCapability;
-import org.apache.uima.fit.util.JCasUtil;
-import com.googlecode.clearnlp.component.AbstractComponent;
-import com.googlecode.clearnlp.dependency.DEPArc;
-import com.googlecode.clearnlp.dependency.DEPFeat;
-import com.googlecode.clearnlp.dependency.DEPLib;
-import com.googlecode.clearnlp.dependency.DEPNode;
-import com.googlecode.clearnlp.dependency.DEPTree;
-import com.googlecode.clearnlp.engine.EngineGetter;
-import com.googlecode.clearnlp.nlp.NLPLib;
-import com.googlecode.clearnlp.reader.AbstractReader;
-
-/**
- *This class provides a UIMA wrapper for the ClearNLP Semantic Role Labeler, which is
- * available here.
- * <p>
- * http://code.google.com/p/clearnlp
- * <p>
- * Before using this AnalysisEngine, you should run a Tokenizer, POS-tagger, Lemmatizer, and the
- * CLEAR parser dependency parser.
- * <p>
- * Please see /ClearNLP-wrapper/resources/dependency/clear/README for
- * important information pertaining to the models provided for this parser.
- * <p>
- *
- */
-@TypeCapability(
- inputs = {
- "org.apache.ctakes.typesystem.type.syntax.BaseToken:partOfSpeech",
- "org.apache.ctakes.typesystem.type.syntax.BaseToken:tokenNumber",
- "org.apache.ctakes.typesystem.type.syntax.BaseToken:end",
- "org.apache.ctakes.typesystem.type.syntax.BaseToken:begin",
- "org.apache.ctakes.typesystem.type.syntax.ConllDependencyNode"
- })
+import java.io.InputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *This class provides a UIMA wrapper for the ClearNLP Semantic Role Labeler, which is
+ * available here.
+ * <p>
+ * http://code.google.com/p/clearnlp
+ * <p>
+ * Before using this AnalysisEngine, you should run a Tokenizer, POS-tagger, Lemmatizer, and the
+ * CLEAR parser dependency parser.
+ * <p>
+ * Please see /ClearNLP-wrapper/resources/dependency/clear/README for
+ * important information pertaining to the models provided for this parser.
+ * <p>
+ *
+ */
+@TypeCapability(
+ inputs = {
+ "org.apache.ctakes.typesystem.type.syntax.BaseToken:partOfSpeech",
+ "org.apache.ctakes.typesystem.type.syntax.BaseToken:tokenNumber",
+ "org.apache.ctakes.typesystem.type.syntax.BaseToken:end",
+ "org.apache.ctakes.typesystem.type.syntax.BaseToken:begin",
+ "org.apache.ctakes.typesystem.type.syntax.ConllDependencyNode"
+ } )
public class ClearNLPSemanticRoleLabelerAE extends JCasAnnotator_ImplBase {
-final String language = AbstractReader.LANG_EN;
- public Logger logger = Logger.getLogger(getClass().getName());
- public static final String DEFAULT_SRL_MODEL_FILE_NAME = "org/apache/ctakes/dependency/parser/models/srl/mayo-en-srl-1.3.0.jar";
- public static final String DEFAULT_PRED_MODEL_FILE_NAME = "org/apache/ctakes/dependency/parser/models/pred/mayo-en-pred-1.3.0.jar";
- public static final String DEFAULT_ROLE_MODEL_FILE_NAME = "org/apache/ctakes/dependency/parser/models/role/mayo-en-role-1.3.0.jar";
-
-
- public static final String PARAM_PARSER_MODEL_FILE_NAME = "ParserModelFileName";
- public static final String PARAM_PRED_MODEL_FILE_NAME = "ParserPredFileName";
- public static final String PARAM_ROLE_MODEL_FILE_NAME = "ParserRoleFileName";
-
- protected URI srlModelUri;
- protected URI srlPredUri;
- protected URI srlRoleUri;
-
-
- @ConfigurationParameter(
- name = PARAM_PARSER_MODEL_FILE_NAME,
- description = "This parameter provides the file name of the semantic role labeler model required by the factory method provided by ClearNLPUtil.",
- defaultValue = DEFAULT_SRL_MODEL_FILE_NAME)
- private String parserModelFileName;
-
- public static final String PARAM_LEMMATIZER_DATA_FILE = "LemmatizerDataFile";
-
- @ConfigurationParameter(
- name = PARAM_PRED_MODEL_FILE_NAME,
- description = "This parameter provides the file name of the semantic role labeler model required by the factory method provided by ClearNLPUtil.",
- defaultValue = DEFAULT_PRED_MODEL_FILE_NAME)
- private String parserPredFileName;
-
- @ConfigurationParameter(
- name = PARAM_ROLE_MODEL_FILE_NAME,
- description = "This parameter provides the file name of the semantic role labeler model required by the factory method provided by ClearNLPUtil.",
- defaultValue = DEFAULT_ROLE_MODEL_FILE_NAME)
- private String parserRoleFileName;
-
-
- protected AbstractComponent srlabeler;
- protected AbstractComponent identifier;
- protected AbstractComponent classifier;
-
-
- @Override
- public void initialize(UimaContext context) throws ResourceInitializationException {
- super.initialize(context);
-
- try {
-
- InputStream srlPred = (this.srlPredUri == null)
- ? FileLocator.getAsStream(DEFAULT_PRED_MODEL_FILE_NAME)
- : FileLocator.getAsStream(this.srlPredUri.getPath());
- this.identifier = EngineGetter.getComponent(srlPred, this.language, NLPLib.MODE_PRED);
-
- InputStream srlRole = (this.srlRoleUri == null)
- ? FileLocator.getAsStream(DEFAULT_ROLE_MODEL_FILE_NAME)
- : FileLocator.getAsStream(this.srlRoleUri.getPath());
- this.classifier = EngineGetter.getComponent(srlRole, this.language, NLPLib.MODE_ROLE);
-
- InputStream srlModel = (this.srlModelUri == null)
- ? FileLocator.getAsStream(DEFAULT_SRL_MODEL_FILE_NAME)
- : FileLocator.getAsStream(this.srlModelUri.getPath());
- this.srlabeler = EngineGetter.getComponent(srlModel, this.language, NLPLib.MODE_SRL);
-
- } catch (Exception e) {
- throw new ResourceInitializationException(e);
- }
- }
-
- @Override
- public void process(JCas jCas) throws AnalysisEngineProcessException {
- for (Sentence sentence : JCasUtil.select(jCas, Sentence.class)) {
- List<BaseToken> printableTokens = new ArrayList<>();
- for(BaseToken token : JCasUtil.selectCovered(jCas, BaseToken.class, sentence)){
- if(token instanceof NewlineToken) continue;
- printableTokens.add(token);
+ final String language = AbstractReader.LANG_EN;
+ public Logger logger = Logger.getLogger( getClass().getName() );
+ public static final String DEFAULT_SRL_MODEL_FILE_NAME
+ = "org/apache/ctakes/dependency/parser/models/srl/mayo-en-srl-1.3.0.jar";
+ public static final String DEFAULT_PRED_MODEL_FILE_NAME
+ = "org/apache/ctakes/dependency/parser/models/pred/mayo-en-pred-1.3.0.jar";
+ public static final String DEFAULT_ROLE_MODEL_FILE_NAME
+ = "org/apache/ctakes/dependency/parser/models/role/mayo-en-role-1.3.0.jar";
+
+
+ public static final String PARAM_PARSER_MODEL_FILE_NAME = "ParserModelFileName";
+ public static final String PARAM_PRED_MODEL_FILE_NAME = "ParserPredFileName";
+ public static final String PARAM_ROLE_MODEL_FILE_NAME = "ParserRoleFileName";
+
+ protected URI srlModelUri;
+ protected URI srlPredUri;
+ protected URI srlRoleUri;
+
+
+ @ConfigurationParameter(
+ name = PARAM_PARSER_MODEL_FILE_NAME,
+ description = "This parameter provides the file name of the semantic role labeler model required by the factory method provided by ClearNLPUtil.",
+ defaultValue = DEFAULT_SRL_MODEL_FILE_NAME )
+ private String parserModelFileName;
+
+ public static final String PARAM_LEMMATIZER_DATA_FILE = "LemmatizerDataFile";
+
+ @ConfigurationParameter(
+ name = PARAM_PRED_MODEL_FILE_NAME,
+ description = "This parameter provides the file name of the semantic role labeler model required by the factory method provided by ClearNLPUtil.",
+ defaultValue = DEFAULT_PRED_MODEL_FILE_NAME )
+ private String parserPredFileName;
+
+ @ConfigurationParameter(
+ name = PARAM_ROLE_MODEL_FILE_NAME,
+ description = "This parameter provides the file name of the semantic role labeler model required by the factory method provided by ClearNLPUtil.",
+ defaultValue = DEFAULT_ROLE_MODEL_FILE_NAME )
+ private String parserRoleFileName;
+
+
+ protected AbstractComponent srlabeler;
+ protected AbstractComponent identifier;
+ protected AbstractComponent classifier;
+
+
+ @Override
+ public void initialize( UimaContext context ) throws ResourceInitializationException {
+ super.initialize( context );
+
+ try {
+
+ InputStream srlPred = (this.srlPredUri == null)
+ ? FileLocator.getAsStream( DEFAULT_PRED_MODEL_FILE_NAME )
+ : FileLocator.getAsStream( this.srlPredUri.getPath() );
+ this.identifier = EngineGetter.getComponent( srlPred, this.language, NLPLib.MODE_PRED );
+
+ InputStream srlRole = (this.srlRoleUri == null)
+ ? FileLocator.getAsStream( DEFAULT_ROLE_MODEL_FILE_NAME )
+ : FileLocator.getAsStream( this.srlRoleUri.getPath() );
+ this.classifier = EngineGetter.getComponent( srlRole, this.language, NLPLib.MODE_ROLE );
+
+ InputStream srlModel = (this.srlModelUri == null)
+ ? FileLocator.getAsStream( DEFAULT_SRL_MODEL_FILE_NAME )
+ : FileLocator.getAsStream( this.srlModelUri.getPath() );
+ this.srlabeler = EngineGetter.getComponent( srlModel, this.language, NLPLib.MODE_SRL );
+
+ } catch ( Exception e ) {
+ throw new ResourceInitializationException( e );
}
- DEPTree tree = new DEPTree();
-
- // Build map between CAS dependency node and id for later creation of
- // ClearNLP dependency node/tree
- Map<ConllDependencyNode, Integer> depNodeToID = new HashMap<ConllDependencyNode, Integer>();
- int nodeId = 1;
- for (ConllDependencyNode depNode : JCasUtil.selectCovered(jCas, ConllDependencyNode.class, sentence)) {
- //if (depNode instanceof TopDependencyNode) {
- if (depNode.getHead() == null) {
- // A node without the head is the head of the sentence
- depNodeToID.put(depNode, 0);
- } else {
- depNodeToID.put(depNode, nodeId);
- nodeId++;
- }
+ }
+
+ @Override
+ public void process( JCas jCas ) throws AnalysisEngineProcessException {
+ for ( Sentence sentence : JCasUtil.select( jCas, Sentence.class ) ) {
+ List<BaseToken> printableTokens = new ArrayList<>();
+ for ( BaseToken token : JCasUtil.selectCovered( jCas, BaseToken.class, sentence ) ) {
+ if ( token instanceof NewlineToken ) {
+ continue;
+ }
+ printableTokens.add( token );
+ }
+ DEPTree tree = new DEPTree();
+
+ // Build map between CAS dependency node and id for later creation of
+ // ClearNLP dependency node/tree
+ Map<ConllDependencyNode, Integer> depNodeToID = new HashMap<>();
+ int nodeId = 1;
+ for ( ConllDependencyNode depNode : JCasUtil.selectCovered( jCas, ConllDependencyNode.class, sentence ) ) {
+ //if (depNode instanceof TopDependencyNode) {
+ if ( depNode.getHead() == null ) {
+ // A node without the head is the head of the sentence
+ depNodeToID.put( depNode, 0 );
+ } else {
+ depNodeToID.put( depNode, nodeId );
+ nodeId++;
+ }
+ }
+
+ int[] headIDs = new int[ printableTokens.size() ];
+ String[] deprels = new String[ printableTokens.size() ];
+
+ // Initialize Token / Sentence info for the ClearNLP Semantic Role Labeler
+ // we are filtering out newline tokens
+ // use idIter as the non-newline token index counter
+ int idIter = 0;
+ for ( int i = 0; i < printableTokens.size(); i++ ) {
+ BaseToken token = printableTokens.get( i );
+ // ignore newline tokens within a sentence - newline = whitespace = non-token
+ if ( !(token instanceof NewlineToken) ) {
+ // Determine HeadId
+ List<ConllDependencyNode> casDepNodes = JCasUtil.selectCovered( jCas, ConllDependencyNode.class, token );
+
+ ConllDependencyNode casDepNode = casDepNodes.get( 0 );
+ if ( casDepNode.getId() == 0 ) {
+ casDepNode = casDepNodes.get( 1 );
+ }
+
+ deprels[ i ] = casDepNode.getDeprel();
+ ConllDependencyNode head = casDepNode.getHead();
+ // If there is no head, this is the head node, set node to 0
+ final Integer headIdIndex = (head == null) ? 0 : depNodeToID.get( head );
+ if ( headIdIndex != null ) {
+ headIDs[ i ] = headIdIndex;
+ } else {
+ logger.error( "No dependency node for index " + head + ". Map size is " + depNodeToID.size()
+ + "\nSetting head ID to 0" );
+ headIDs[ i ] = 0;
+ }
+ // Populate Dependency Node / Tree information
+ int id = idIter + 1;
+ String form = casDepNode.getForm();
+ String pos = casDepNode.getPostag();
+ String lemma = casDepNode.getLemma();
+
+ DEPNode node = new DEPNode( id, form, lemma, pos, new DEPFeat() );
+ tree.add( node );
+ idIter++;
+ }
+ }
+
+ for ( int i = 1; i < tree.size(); i++ ) {
+ DEPNode node = tree.get( i );
+ DEPNode head = tree.get( headIDs[ i - 1 ] );
+ String label = deprels[ i - 1 ];
+ node.setHead( head, label );
+ }
+
+ tree.initSHeads();
+
+ // Run the SRL
+ identifier.process( tree );
+ classifier.process( tree );
+ srlabeler.process( tree );
+
+
+ // Convert ClearNLP SRL output to CAS types
+ extractSRLInfo( jCas, printableTokens, tree );
+
+
}
-
- int[] headIDs = new int[printableTokens.size()];
- String[] deprels = new String[printableTokens.size()];
-
- // Initialize Token / Sentence info for the ClearNLP Semantic Role Labeler
- // we are filtering out newline tokens
- // use idIter as the non-newline token index counter
- int idIter = 0;
- for (int i = 0; i < printableTokens.size(); i++) {
- BaseToken token = printableTokens.get(i);
- // ignore newline tokens within a sentence - newline = whitespace = non-token
- if(!(token instanceof NewlineToken)) {
- // Determine HeadId
- List<ConllDependencyNode> casDepNodes = JCasUtil.selectCovered(jCas, ConllDependencyNode.class, token);
-
- ConllDependencyNode casDepNode = casDepNodes.get(0);
- if(casDepNode.getId() == 0) casDepNode = casDepNodes.get(1);
-
- deprels[i] = casDepNode.getDeprel();
- ConllDependencyNode head = casDepNode.getHead();
-
- // If there is no head, this is the head node, set node to 0
- headIDs[i] = (head == null) ? 0 : depNodeToID.get(head);
-
- // Populate Dependency Node / Tree information
- int id = idIter + 1;
- String form = casDepNode.getForm();
- String pos = casDepNode.getPostag();
- String lemma = casDepNode.getLemma();
-
- DEPNode node = new DEPNode(id, form, lemma, pos, new DEPFeat());
- tree.add(node);
- idIter++;
- }
+
+ }
+
+ /**
+ * Converts the output from the ClearNLP Semantic Role Labeler to the ClearTK Predicate and
+ * SemanticArgument Types.
+ *
+ * @param jCas
+ * @param tokens - In order list of tokens
+ * @param tree - DepdendencyTree output by ClearNLP SRLPredict
+ */
+ private void extractSRLInfo( JCas jCas, List<BaseToken> tokens, DEPTree tree ) {
+ Map<DEPNode, Predicate> headIdToPredicate = new HashMap<DEPNode, Predicate>();
+ Map<Predicate, List<SemanticArgument>> predicateArguments = new HashMap<Predicate, List<SemanticArgument>>();
+
+ for ( int i = 1; i < tree.size(); i++ ) {
+ // Every ClearNLP parserNode will contain an srlInfo field.
+ DEPNode parserNode = tree.get( i );
+ BaseToken token = tokens.get( i - 1 );
+ String rolesetId;
+
+ if ( (rolesetId = parserNode.getFeat( DEPLib.FEAT_PB )) != null ) {
+ if ( !headIdToPredicate.containsKey( parserNode ) ) {
+ // We have not encountered this predicate yet, so create it
+ Predicate pred = this.createPredicate( jCas, rolesetId, token );
+ headIdToPredicate.put( parserNode, pred );
+ pred.setRelations( new EmptyFSList( jCas ) );
+ }
+ }
}
- for (int i=1; i<tree.size(); i++)
- {
- DEPNode node = tree.get(i);
- DEPNode head = tree.get(headIDs[i-1]);
- String label = deprels[i-1];
- node.setHead(head, label);
+
+ // Start at node 1, since node 0 is considered the head of the sentence
+ for ( int i = 1; i < tree.size(); i++ ) {
+ // Every ClearNLP parserNode will contain an srlInfo field.
+ DEPNode parserNode = tree.get( i );
+ BaseToken token = tokens.get( i - 1 );
+
+ for ( DEPArc head : parserNode.getSHeads() ) {
+ Predicate predicate = headIdToPredicate.get( head.getNode() );
+
+ // Append this argument to the predicate's list of arguments
+ if ( !predicateArguments.containsKey( predicate ) ) {
+ predicateArguments.put( predicate, new ArrayList<SemanticArgument>() );
+ }
+ List<SemanticArgument> argumentList = predicateArguments.get( predicate );
+
+ // Create the semantic argument and store for later link creation
+ SemanticArgument argument = createArgument( jCas, head, token );
+ argumentList.add( argument );
+ }
}
-
- tree.initSHeads();
-
- // Run the SRL
- identifier.process(tree);
- classifier.process(tree);
- srlabeler.process(tree);
-
-
- // Convert ClearNLP SRL output to CAS types
- extractSRLInfo(jCas, printableTokens, tree);
-
-
- }
-
- }
-
- /**
- * Converts the output from the ClearNLP Semantic Role Labeler to the ClearTK Predicate and
- * SemanticArgument Types.
- *
- * @param jCas
- * @param tokens
- * - In order list of tokens
- * @param tree
- * - DepdendencyTree output by ClearNLP SRLPredict
- */
- private void extractSRLInfo(JCas jCas, List<BaseToken> tokens, DEPTree tree) {
- Map<DEPNode, Predicate> headIdToPredicate = new HashMap<DEPNode, Predicate>();
- Map<Predicate, List<SemanticArgument>> predicateArguments = new HashMap<Predicate, List<SemanticArgument>>();
-
- for (int i = 1; i < tree.size(); i++) {
- // Every ClearNLP parserNode will contain an srlInfo field.
- DEPNode parserNode = tree.get(i);
- BaseToken token = tokens.get(i - 1);
- String rolesetId;
-
- if ((rolesetId = parserNode.getFeat(DEPLib.FEAT_PB)) != null)
- {
- if (!headIdToPredicate.containsKey(parserNode)) {
- // We have not encountered this predicate yet, so create it
- Predicate pred = this.createPredicate(jCas, rolesetId, token);
- headIdToPredicate.put(parserNode, pred);
- pred.setRelations(new EmptyFSList(jCas));
- }
- }
- }
-
-
- // Start at node 1, since node 0 is considered the head of the sentence
- for (int i = 1; i < tree.size(); i++) {
- // Every ClearNLP parserNode will contain an srlInfo field.
- DEPNode parserNode = tree.get(i);
- BaseToken token = tokens.get(i - 1);
-
- for (DEPArc head : parserNode.getSHeads()) {
- Predicate predicate = headIdToPredicate.get(head.getNode());
-
- // Append this argument to the predicate's list of arguments
- if (!predicateArguments.containsKey(predicate)) {
- predicateArguments.put(predicate, new ArrayList<SemanticArgument>());
- }
- List<SemanticArgument> argumentList = predicateArguments.get(predicate);
-
- // Create the semantic argument and store for later link creation
- SemanticArgument argument = createArgument(jCas, head, token);
- argumentList.add(argument);
- }
- }
-
- // Create relations between predicates and arguments
- for (Map.Entry<Predicate, List<SemanticArgument>> entry : predicateArguments.entrySet()) {
- Predicate predicate = entry.getKey();
-
- List<SemanticRoleRelation> relations = new ArrayList<SemanticRoleRelation>();
- for (SemanticArgument argument : entry.getValue()) {
- SemanticRoleRelation relation = new SemanticRoleRelation(jCas);
- relation.setArgument(argument);
- relation.setPredicate(predicate);
- relation.setCategory(argument.getLabel());
- relation.addToIndexes();
- relations.add(relation);
- argument.setRelation(relation);
- }
-
- FSList relationsList = ListFactory.buildList(jCas, relations.toArray(new TOP[relations.size()]));
- predicate.setRelations(relationsList);
- }
- }
-
- private Predicate createPredicate(JCas jCas, String rolesetId, BaseToken token) {
- Predicate pred = new Predicate(jCas, token.getBegin(), token.getEnd());
- pred.setFrameSet(rolesetId);
- pred.addToIndexes();
- return pred;
- }
-
- private SemanticArgument createArgument(JCas jCas, DEPArc head, BaseToken token) {
- SemanticArgument argument = new SemanticArgument(jCas, token.getBegin(), token.getEnd());
- argument.setLabel(head.getLabel());
- argument.addToIndexes();
- return argument;
- }
-
-}
+
+ // Create relations between predicates and arguments
+ for ( Map.Entry<Predicate, List<SemanticArgument>> entry : predicateArguments.entrySet() ) {
+ Predicate predicate = entry.getKey();
+
+ List<SemanticRoleRelation> relations = new ArrayList<SemanticRoleRelation>();
+ for ( SemanticArgument argument : entry.getValue() ) {
+ SemanticRoleRelation relation = new SemanticRoleRelation( jCas );
+ relation.setArgument( argument );
+ relation.setPredicate( predicate );
+ relation.setCategory( argument.getLabel() );
+ relation.addToIndexes();
+ relations.add( relation );
+ argument.setRelation( relation );
+ }
+
+ FSList relationsList = ListFactory.buildList( jCas, relations.toArray( new TOP[ relations.size() ] ) );
+ predicate.setRelations( relationsList );
+ }
+ }
+
+ private Predicate createPredicate( JCas jCas, String rolesetId, BaseToken token ) {
+ Predicate pred = new Predicate( jCas, token.getBegin(), token.getEnd() );
+ pred.setFrameSet( rolesetId );
+ pred.addToIndexes();
+ return pred;
+ }
+
+ private SemanticArgument createArgument( JCas jCas, DEPArc head, BaseToken token ) {
+ SemanticArgument argument = new SemanticArgument( jCas, token.getBegin(), token.getEnd() );
+ argument.setLabel( head.getLabel() );
+ argument.addToIndexes();
+ return argument;
+ }
+
+}