All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.ctakes.ytex.KernelLauncher Maven / Gradle / Ivy

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * 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
 *
 * 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
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.ctakes.ytex;

import org.apache.commons.cli.*;
import org.apache.ctakes.ytex.kernel.tree.InstanceTreeBuilder;
import org.apache.ctakes.ytex.kernel.tree.TreeMappingInfo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;


public class KernelLauncher {
	private static Options initOptions() {
		Option oStoreInstanceMap = OptionBuilder
				.withArgName("instanceMap.obj")
				.hasArg()
				.withDescription(
						"store the instanceMap.  Use prior to running the kernel evaluations in parallel.")
				.create("storeInstanceMap");
		Option oEvaluateKernel = OptionBuilder
				.withDescription(
						"evaluate kernel specified in application context on the instances. If instanceMap is specified, load instance from file system, else from db.")
				.create("evalKernel");
		Option exportBagOfWords = OptionBuilder
				.withDescription(
						"exportBagOfWords.  Must specify property file")
				.hasArg().create("exportBagOfWords");
		Option exportType = OptionBuilder
				.withDescription("exportType.  either libsvm or weka").hasArg()
				.create("exportType");
		Option oLoadInstanceMap = OptionBuilder
				.withArgName("instanceMap.obj")
				.hasArg()
				.withDescription(
						"load instanceMap from file system instead of from db.  Use after storing instance map.")
				.create("loadInstanceMap");
		Option oEvalMod = OptionBuilder
				.withDescription(
						"for parallelization, split the instances into mod slices")
				.hasArg().create("mod");
		Option oEvalSlice = OptionBuilder
				.withDescription(
						"for parallelization, parameter that determines which slice we work on.  If this is not specified, nMod threads will be started to evaluate all slices in parallel.")
				.hasArg().create("slice");
		Option oBeanref = OptionBuilder
				.withArgName("classpath*:simSvcBeanRefContext.xml")
				.hasArg()
				.withDescription(
						"use specified beanRefContext.xml, default classpath*:simSvcBeanRefContext.xml")
				.create("beanref");
		Option oAppctx = OptionBuilder
				.withArgName("kernelApplicationContext")
				.hasArg()
				.withDescription(
						"use specified applicationContext, default kernelApplicationContext")
				.create("appctx");
		Option oBeans = OptionBuilder
				.withArgName("beans-corpus.xml")
				.hasArg()
				.withDescription(
						"use specified beans.xml, no default.  This file is typically required.")
				.create("beans");

		Option oHelp = new Option("help", "print this message");
		Options options = new Options();
		OptionGroup og = new OptionGroup();
		og.addOption(oStoreInstanceMap);
		og.addOption(oEvaluateKernel);
		og.addOption(exportBagOfWords);
		options.addOptionGroup(og);
		// options.addOption(oStoreInstanceMap);
		options.addOption(oEvaluateKernel);
		// options.addOption(exportBagOfWords);
		options.addOption(exportType);
		options.addOption(oLoadInstanceMap);
		options.addOption(oEvalMod);
		options.addOption(oEvalSlice);
		options.addOption(oBeanref);
		options.addOption(oAppctx);
		options.addOption(oBeans);
		options.addOption(oHelp);

		return options;
	}

	private static void printHelp(Options options) {
		HelpFormatter formatter = new HelpFormatter();
		formatter
				.printHelp(
						"java org.apache.ctakes.ytex.kernel.evaluator.CorpusKernelEvaluatorImpl\n Main Options: -storeInstanceMap or -evalKernel",
						options);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Options options = initOptions();

		if (args.length == 0) {
			printHelp(options);
		} else {
			CommandLineParser parser = new GnuParser();
			try {
				// parse the command line arguments
				CommandLine line = parser.parse(options, args);
				String storeInstanceMap = line
						.getOptionValue("storeInstanceMap");
				boolean evalKernel = line.hasOption("evalKernel");
				String exportBagOfWords = line
						.getOptionValue("exportBagOfWords");
				if (!evalKernel && storeInstanceMap == null
						&& exportBagOfWords == null) {
					System.out
							.println("specify either -evalKernel, -storeInstanceMap, or -exportBagOfWords");
					printHelp(options);
				} else {

					// parse the command line arguments
					// by default use the kernelBeanRefContext
					// when evaluating kernel, by default use the
					// simSvcBeanRefContext.xml
					// don't want to load that for other tasks as the simSvc
					// loads the UMLS object graph which needs lots of memory
					String beanRefContext = line.getOptionValue("beanref",
							evalKernel ? "classpath*:org/apache/ctakes/ytex/simSvcBeanRefContext.xml"
									: "classpath*:org/apache/ctakes/ytex/kernelBeanRefContext.xml");
					String contextName = line.getOptionValue("appctx",
							"kernelApplicationContext");
					String beans = line.getOptionValue("beans");
//					ApplicationContext appCtx = (ApplicationContext) ContextSingletonBeanFactoryLocator
//							.getInstance(beanRefContext)
//							.useBeanFactory(contextName).getFactory();

					ApplicationContext appCtx
							= (ApplicationContext)SpringContextUtil.INSTANCE.getApplicationContext( beanRefContext )
																 .getBean( contextName );

					ApplicationContext appCtxSource = appCtx;
					if (beans != null) {
						appCtxSource = new FileSystemXmlApplicationContext(
								new String[] { beans }, appCtx);
					}
					if (storeInstanceMap != null) {
						storeInstanceMap(appCtxSource, storeInstanceMap, line);
//					} else if (evalKernel) {
//						evalKernel(appCtxSource, line);
//					} else if (exportBagOfWords != null) {
//						exportBagOfWords(appCtxSource, exportBagOfWords, line);
					}
				}
			} catch (ParseException e) {
				printHelp(options);
				throw e;
			}
		}
	}

//	private static void exportBagOfWords(ApplicationContext appCtxSource,
//			String exportBagOfWords, CommandLine line) throws IOException {
//		String beanName = "wekaBagOfWordsExporter";
//		if ("libsvm".equals(line.getOptionValue("exportType"))) {
//			beanName = "libsvmBagOfWordsExporter";
//		}
//		BagOfWordsExporter exporter = (BagOfWordsExporter) appCtxSource
//				.getBean(beanName);
//		exporter.exportBagOfWords(exportBagOfWords);
//	}

//	private static void evalKernel(ApplicationContext appCtxSource,
//			CommandLine line) throws Exception {
//		InstanceTreeBuilder builder = appCtxSource.getBean(
//				"instanceTreeBuilder", InstanceTreeBuilder.class);
//		CorpusKernelEvaluator corpusEvaluator = appCtxSource.getBean(
//				"corpusKernelEvaluator", CorpusKernelEvaluator.class);
//		String loadInstanceMap = line.getOptionValue("loadInstanceMap");
//		String strMod = line.getOptionValue("mod");
//		String strSlice = line.getOptionValue("slice");
//		int nMod = strMod != null ? Integer.parseInt(strMod) : 0;
//		Integer nSlice = null;
//		if (nMod == 0) {
//			nSlice = 0;
//		} else if (strSlice != null) {
//			nSlice = Integer.parseInt(strSlice);
//		}
//		Map instanceMap = null;
//		if (loadInstanceMap != null) {
//			instanceMap = builder.loadInstanceTrees(loadInstanceMap);
//		} else {
//			instanceMap = builder.loadInstanceTrees(appCtxSource.getBean(
//					"treeMappingInfo", TreeMappingInfo.class));
//		}
//		if (nSlice != null) {
//			corpusEvaluator.evaluateKernelOnCorpus(instanceMap, nMod, nSlice, false);
//		} else {
//			corpusEvaluator.evaluateKernelOnCorpus(instanceMap, nMod, false);
//		}
//	}

	private static void storeInstanceMap(ApplicationContext appCtxSource,
			String storeInstanceMap, CommandLine line) throws Exception {
		InstanceTreeBuilder builder = appCtxSource.getBean(
				"instanceTreeBuilder", InstanceTreeBuilder.class);
		builder.serializeInstanceTrees(
				appCtxSource.getBean("treeMappingInfo", TreeMappingInfo.class),
				storeInstanceMap);
	}



	public enum SpringContextUtil {
		INSTANCE;
		private ApplicationContext _context;
		public ApplicationContext getApplicationContext( final String contextPath ) {
			if ( _context == null ) {
				_context = new ClassPathXmlApplicationContext( contextPath );
			}
			return _context;
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy