public ObjectPhraseListForSentence convertSentenceToControlObjectPhrase()

in opennlp-similarity/src/main/java/opennlp/tools/nl2code/NL2ObjCreateAssign.java [56:223]


	public ObjectPhraseListForSentence convertSentenceToControlObjectPhrase(String sentence){
		String expression = null;
		if (sentence.contains(":")){
			expression = sentence.split(":")[1];
			sentence = sentence.split(":")[0]+".";
		}

		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.addAll( lingPhrases.get(4));

		System.out.println("      === "+actionWithObject);

		for(ParseTreeChunk verbChunk: actionWithObject){
			List<String> lems = verbChunk.getLemmas();
			String declarativeAction = verbChunk.getLemmas().get(0).toLowerCase();
			if (declarativeAction.equals("define")){
				if (verbChunk.getLemmas().get(1).equalsIgnoreCase("class") ||
						verbChunk.getLemmas().get(2).equalsIgnoreCase("class")){
					// new class
					String className = verbChunk.getLemmas().get(verbChunk.getLemmas().size()-1).toLowerCase();
					className = className.substring(0, 1).toUpperCase()+className.substring(1, className.length());
					op.setOperatorIf("class "+className + "{");
					op.setOperatorFor("{");
					classBeingDefined = true;
					break;
				}
				String dataType = verbChunk.getLemmas().get(1).toLowerCase();

				if (classBeingDefined && Arrays.asList(DATA_TYPES_LIST).contains(dataType) && verbChunk.getLemmas().get(2).equalsIgnoreCase("attribute")){
					op.setOperatorFor(dataType + " "+verbChunk.getLemmas().get(verbChunk.getLemmas().size()-1).toLowerCase());
					classBeingDefined = true;
					break;
				}
				if (Arrays.asList(DATA_TYPES_LIST).contains(dataType) && verbChunk.getLemmas().get(2).equalsIgnoreCase("attribute")){
					op.setOperatorFor(dataType + " "+verbChunk.getLemmas().get(verbChunk.getLemmas().size()-1).toLowerCase());
					classBeingDefined = true;
					break;
				}
			} else if (declarativeAction.equals("create")){

				// now substituting array
				if (verbChunk.getLemmas().get(1).equalsIgnoreCase("array")){

					if(lems.contains("class")){
						int indClass = lems.indexOf("class");
						int numElements = lems.indexOf("elements");
						if (numElements<0)
							numElements = lems.indexOf("objects");
						if (numElements<0)
							numElements = lems.indexOf("members");
						String arraySize = lems.get(numElements-1);
						op.setOperatorFor(lems.get(indClass+1)+"[] "+verbChunk.getLemmas().get(verbChunk.getLemmas().size()-1).toLowerCase() 
								+" = new "+lems.get(indClass+1)+"["+arraySize+"]");
						classBeingDefined = false;
						break;
					}
				}    
			} else if (declarativeAction.equals("assign")){
				int numElements = lems.indexOf("element");
				if (numElements<0)
					numElements = lems.indexOf("object");
				if (numElements<0)
					numElements = lems.indexOf("member");
				if (Arrays.asList(ARRAY_ELEMENT_LIST).contains(lems.get(numElements-1))){
					int arrIndex = Arrays.asList(ARRAY_ELEMENT_LIST).indexOf(lems.get(numElements-1));
					String indexValue = ARRAY_ELEMENT_LIST_INSDEX[arrIndex];

					String arrayName = lems.get(lems.size()-1);
					if (expression!=null)
						op.setOperatorFor(arrayName+"["+indexValue+"]."+ expression);
					break;
				} 
			} else if (declarativeAction.equals("set")){
				int indQuantifier = lems.indexOf("all");
				if (indQuantifier>-1 && 
						(lems.get(indQuantifier+1).equals("elements") || lems.get(indQuantifier+1).equals("members") )){

					String arrayName = lems.get(lems.size()-1);
					if (expression!=null)
						op.setOperatorFor("for(int i=0; i<"+ arrayName+".size(); i++) "+
								arrayName+"[i]."+ expression);
					break;
				} 
			}
			/*    
        else {
          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();

		return oplfs;
	}