// Path: kie-ml-api/src/main/java/org/fxapps/ml/api/model/Result.java
// @XmlRootElement(name = "model-execution-result")
// public class Result {
// 	
// 	private Map<String, Number> predictions;
// 	private String text;
// 	
// 	public Map<String, Number> getPredictions() {
// 		return predictions;
// 	}
// 	public void setPredictions(Map<String, Number> predictions) {
// 		this.predictions = predictions;
// 	}
// 	
// 	public String getText() {
// 		return text;
// 	}
// 	public void setText(String text) {
// 		this.text = text;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return "Result [predictions=" + predictions + ", text="
// 				+ text + "]";
// 	}
// 	
// }
// 
// Path: providers/kie-ml-opennlp/src/main/java/org/fxapps/ml/api/provider/opennlp/InputData.java
// public class InputData {
// 	
// 	private InputStream modelIs;
// 	private String inputText;
// 	private boolean tokenize;
// 	private String delimiter;
// 	
// 	public InputData(InputStream modelIs, String inputText) {
// 		this(modelIs, inputText, false, null);
// 	}
// 	
// 	public InputData(InputStream modelIs, String inputText, boolean tokenize) {
// 		this(modelIs, inputText, tokenize, null);
// 	}
// 	
// 	public InputData(InputStream modelIs, String inputText, boolean tokenize, String delimiter) {
// 		super();
// 		this.modelIs = modelIs;
// 		this.inputText = inputText;
// 		this.tokenize = tokenize;
// 		this.delimiter = delimiter == null ? "," : delimiter;
// 	}
// 
// 	public InputStream getModelIs() {
// 		return modelIs;
// 	}
// 
// 	public String getInputText() {
// 		return inputText;
// 	}
// 
// 	public boolean isTokenize() {
// 		return tokenize;
// 	}
// 
// 	public String getDelimiter() {
// 		return delimiter;
// 	}
// 	
// }


import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import org.fxapps.ml.api.model.Result;
import org.fxapps.ml.api.provider.opennlp.InputData;
import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.doccat.DoccatModel;
import opennlp.tools.doccat.DocumentCategorizerME;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
			Span[] find = nameFinder.find(tokenized);
			for (Span span : find) {
				result.getPredictions().put(s + ": " + span, span.getProb());
			}
		}
		return result;
	}

	private static Result taggerModel(InputData data) {
		POSModel model;
		try {
			model = new POSModel(data.getModelIs());
		} catch (IOException e) {
			throw new IllegalArgumentException("Error loading model", e);
		}
		POSTaggerME tagger = new POSTaggerME(model);
		WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
		String[] tokens = whitespaceTokenizer.tokenize(data.getInputText());
		String[] tag = tagger.tag(tokens);
		Result result = new Result();
		result.setPredictions(new HashMap<>());
		for (int i = 0; i < tag.length; i++) {
			result.getPredictions().put(tag[i] + ": " + tokens[i], tagger.probs()[i]);
		}
		return result;
	}

	private static Result parserModel(InputData data) {
		ParserModel model;
		Result result = new Result();
// Path: kie-ml-api/src/main/java/org/fxapps/ml/api/model/Result.java
// @XmlRootElement(name = "model-execution-result")
// public class Result {
// 	
// 	private Map<String, Number> predictions;
// 	private String text;
// 	
// 	public Map<String, Number> getPredictions() {
// 		return predictions;
// 	}
// 	public void setPredictions(Map<String, Number> predictions) {
// 		this.predictions = predictions;
// 	}
// 	
// 	public String getText() {
// 		return text;
// 	}
// 	public void setText(String text) {
// 		this.text = text;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return "Result [predictions=" + predictions + ", text="
// 				+ text + "]";
// 	}
// 	
// }
// 
// Path: providers/kie-ml-opennlp/src/main/java/org/fxapps/ml/api/provider/opennlp/InputData.java
// public class InputData {
// 	
// 	private InputStream modelIs;
// 	private String inputText;
// 	private boolean tokenize;
// 	private String delimiter;
// 	
// 	public InputData(InputStream modelIs, String inputText) {
// 		this(modelIs, inputText, false, null);
// 	}
// 	
// 	public InputData(InputStream modelIs, String inputText, boolean tokenize) {
// 		this(modelIs, inputText, tokenize, null);
// 	}
// 	
// 	public InputData(InputStream modelIs, String inputText, boolean tokenize, String delimiter) {
// 		super();
// 		this.modelIs = modelIs;
// 		this.inputText = inputText;
// 		this.tokenize = tokenize;
// 		this.delimiter = delimiter == null ? "," : delimiter;
// 	}
// 
// 	public InputStream getModelIs() {
// 		return modelIs;
// 	}
// 
// 	public String getInputText() {
// 		return inputText;
// 	}
// 
// 	public boolean isTokenize() {
// 		return tokenize;
// 	}
// 
// 	public String getDelimiter() {
// 		return delimiter;
// 	}
// 	
// }


// Path: providers/kie-ml-opennlp/src/main/java/org/fxapps/ml/api/provider/impl/ModelFactory.java
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import org.fxapps.ml.api.model.Result;
import org.fxapps.ml.api.provider.opennlp.InputData;
import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.doccat.DoccatModel;
import opennlp.tools.doccat.DocumentCategorizerME;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;

			Span[] find = nameFinder.find(tokenized);
			for (Span span : find) {
				result.getPredictions().put(s + ": " + span, span.getProb());
			}
		}
		return result;
	}

	private static Result taggerModel(InputData data) {
		POSModel model;
		try {
			model = new POSModel(data.getModelIs());
		} catch (IOException e) {
			throw new IllegalArgumentException("Error loading model", e);
		}
		POSTaggerME tagger = new POSTaggerME(model);
		WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
		String[] tokens = whitespaceTokenizer.tokenize(data.getInputText());
		String[] tag = tagger.tag(tokens);
		Result result = new Result();
		result.setPredictions(new HashMap<>());
		for (int i = 0; i < tag.length; i++) {
			result.getPredictions().put(tag[i] + ": " + tokens[i], tagger.probs()[i]);
		}
		return result;
	}

	private static Result parserModel(InputData data) {
		ParserModel model;
		Result result = new Result();
		try {