in opennlp-similarity/src/main/java/opennlp/tools/nl2code/NL2Obj.java [58:153]
public ObjectPhraseListForSentence convertSentenceToControlObjectPhrase(String sentence){
List<ObjectPhrase> oPhrases = new ArrayList<>();
parser = ParserChunker2MatcherProcessor.getInstance();
List<List<ParseTreeChunk>> lingPhrases =
parser.formGroupedPhrasesFromChunksForSentence(sentence);
ObjectControlOp op = extractControlPart(lingPhrases, prevOp);
prevOp = op;
//start with verb phrases
List<ParseTreeChunk> actionWithObject = lingPhrases.get(1);
actionWithObject = applyWhichRuleOnVP(actionWithObject);
System.out.println("=== "+actionWithObject+" \n extracted op = "+op);
for(ParseTreeChunk verbChunk: actionWithObject){
if (verbChunk.getPOSs().get(0).startsWith("VB")){
ObjectPhrase oPhrase = new ObjectPhrase();
String methodOrControlOp = verbChunk.getLemmas().get(0).toLowerCase();
if (!isControlOp(methodOrControlOp)){
oPhrase.setMethod(methodOrControlOp);
List<String> paramValues = verbChunk.getLemmas(), paramPOSs = verbChunk.getPOSs();
paramValues.remove(0); paramPOSs.remove(0);
// the subject of a verb refers to the object
try {
String objectCandidatePOS = paramPOSs.get(paramValues.size()-1);
if (objectCandidatePOS.startsWith("NN")){
oPhrase.setObjectName(paramValues.get(paramValues.size()-1));
paramValues.remove(paramValues.size()-1);
paramPOSs.remove(paramPOSs.size()-1);
} else if (paramPOSs.get(paramValues.size()-2).startsWith("NN")){
oPhrase.setObjectName(paramValues.get(paramValues.size()-2));
paramValues.remove(paramValues.size()-2);
paramPOSs.remove(paramPOSs.size()-2);
}
} catch (Exception e) {
e.printStackTrace();
}
oPhrase.setParamValues(paramValues);
oPhrase.setParamChunk(paramValues, paramPOSs);
// object name/instance
if (oPhrase.getObjectName() == null){
List<ParseTreeChunk> objectName = lingPhrases.get(0);
ParseTreeChunk objNameChunk = objectName.get(0);
if ( objNameChunk.getPOSs().get(0).equals("NN")){
oPhrase.setObjectName( objNameChunk.getLemmas().get(0));
}
}
} else { // verb = 'verify' attribute prep prep object
List<String> paramValues = verbChunk.getLemmas(), paramPOSs = verbChunk.getPOSs();
paramValues.remove(0); paramPOSs.remove(0); // we dont need 'verify'
// start with getting right-most noun as object
String objectCandidatePOS = paramPOSs.get(paramValues.size()-1);
if (objectCandidatePOS.startsWith("NN")){
oPhrase.setObjectName(paramValues.get(paramValues.size()-1));
paramValues.remove(paramValues.size()-1);
paramPOSs.remove(paramPOSs.size()-1);
} else if (paramPOSs.get(paramValues.size()-2).startsWith("NN")){
oPhrase.setObjectName(paramValues.get(paramValues.size()-2));
paramValues.remove(paramValues.size()-2);
paramPOSs.remove(paramPOSs.size()-2);
}
// attempt to find attribute
for(int i = paramValues.size()-1; i>=0; i--){
if (paramPOSs.get(i).equals("IN") || paramPOSs.get(i).equals("DT"))
continue;
else if (paramPOSs.get(i).startsWith("NN")||paramPOSs.get(i).startsWith("JJ")||paramPOSs.get(i).startsWith("CD")){
oPhrase.setMethod(paramValues.get(i));
paramValues = paramValues.subList(0, i-1);
paramPOSs = paramPOSs.subList(0, i-1);
oPhrase.setParamValues(paramValues);
oPhrase.setParamChunk(paramValues, paramPOSs);
break;
}
}
}
oPhrase.setOrigPhrase(verbChunk);
oPhrase.cleanArgs();
//if (oPhrase.getMethod()!=null || oPhrase.getObjectName()!=null)
oPhrases.add(oPhrase);
}
}
ObjectPhraseListForSentence oplfs = new ObjectPhraseListForSentence( oPhrases, op);
oplfs.cleanMethodNamesIsAre();
oplfs.substituteNullObjectIntoEmptyArg();
oplfs.substituteIntoEmptyArgs(); //area.size([]), threshold.([below])
oplfs.clearInvalidObject(); //[null.2([])]
return oplfs;
}