Skip to content
Snippets Groups Projects
Select Git revision
  • b84f5286e3b0f352415e6bf3d1b3807481c2fe96
  • master default
  • ember-ui
3 results

EditModelCommand.java

  • user avatar
    Eike Cochu authored
    b84f5286
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    EditModelCommand.java 4.72 KiB
    package de.vipra.cmd.option;
    
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    
    import org.bson.types.ObjectId;
    
    import com.fasterxml.jackson.core.JsonGenerationException;
    import com.fasterxml.jackson.databind.JsonMappingException;
    
    import de.vipra.util.Config;
    import de.vipra.util.ConsoleUtils;
    import de.vipra.util.Constants.WindowResolution;
    import de.vipra.util.ex.ConfigException;
    import de.vipra.util.ex.DatabaseException;
    import de.vipra.util.model.TopicModelConfig;
    import de.vipra.util.model.TopicModelFull;
    import de.vipra.util.service.MongoService;
    import de.vipra.util.service.QueryBuilder;
    
    public class EditModelCommand implements Command {
    
    	private final String[] names;
    	private Config config;
    	private MongoService<TopicModelFull, ObjectId> dbTopicModels;
    
    	public EditModelCommand(final String[] names) {
    		this.names = names;
    	}
    
    	private void editModel(final TopicModelFull topicModel)
    			throws DatabaseException, JsonGenerationException, JsonMappingException, IOException, ConfigException {
    		ConsoleUtils.info("editing model: " + topicModel.getName());
    
    		final TopicModelConfig topicModelConfig = topicModel.getModelConfig();
    		topicModelConfig.setDescription(ConsoleUtils.readString("description (↲ to skip)", topicModelConfig.getDescription(), true));
    		topicModelConfig.setkTopics(ConsoleUtils.readInt("k topics", topicModelConfig.getkTopics(), 1, null, true));
    		topicModelConfig
    				.setDynamicMinIterations(ConsoleUtils.readInt("dynamic min iterations", topicModelConfig.getDynamicMinIterations(), 1, null, true));
    		topicModelConfig.setDynamicMaxIterations(ConsoleUtils.readInt("dynamic max iterations", topicModelConfig.getDynamicMaxIterations(),
    				topicModelConfig.getDynamicMinIterations(), null, true));
    		topicModelConfig.setStaticIterations(ConsoleUtils.readInt("static iterations", topicModelConfig.getStaticIterations(), 1, null, true));
    		topicModelConfig
    				.setTopicAutoNamingWords(ConsoleUtils.readInt("topic auto naming words", topicModelConfig.getTopicAutoNamingWords(), 1, null, true));
    		topicModelConfig
    				.setMaxSimilarDocuments(ConsoleUtils.readInt("max similar documents", topicModelConfig.getMaxSimilarDocuments(), 0, null, true));
    		topicModelConfig
    				.setDocumentMinimumLength(ConsoleUtils.readInt("document min length", topicModelConfig.getDocumentMinimumLength(), 0, null, true));
    		topicModelConfig.setDocumentMinimumWordFrequency(
    				ConsoleUtils.readInt("document min word frequency", topicModelConfig.getDocumentMinimumWordFrequency(), 0, null, true));
    		topicModelConfig.setSpotlightSupport(ConsoleUtils.readInt("spotlight support", topicModelConfig.getSpotlightSupport(), 0, null, true));
    		topicModelConfig
    				.setSpotlightConfidence(ConsoleUtils.readDouble("spotlight confidence", topicModelConfig.getSpotlightConfidence(), 0.0, 1.0, true));
    		topicModelConfig.setMinRelativeProbability(
    				ConsoleUtils.readDouble("min relative probability", topicModelConfig.getMinRelativeProbability(), 0.0, 1.0, true));
    		topicModelConfig.setRisingDecayLambda(ConsoleUtils.readDouble("rising decay lambda", topicModelConfig.getRisingDecayLambda()));
    		topicModelConfig.setMaxSimilarDocumentsDivergence(
    				ConsoleUtils.readDouble("max similar documents divergence", topicModelConfig.getMaxSimilarDocumentsDivergence(), 0.0, 1.0, true));
    		topicModelConfig.setMaxSimilarTopicsDivergence(
    				ConsoleUtils.readDouble("max similar topics divergence", topicModelConfig.getMaxSimilarTopicsDivergence(), 0.0, 1.0, true));
    		topicModelConfig.setProcessorUseText(ConsoleUtils.readBoolean("processor use text", topicModelConfig.isProcessorUseText()));
    		topicModelConfig.setProcessorUseEntities(ConsoleUtils.readBoolean("processor use entities", topicModelConfig.isProcessorUseEntities()));
    		topicModelConfig
    				.setProcessorUseEntityTypes(ConsoleUtils.readBoolean("processor use entity types", topicModelConfig.isProcessorUseEntityTypes()));
    		topicModelConfig.setProcessorUseHypernyms(ConsoleUtils.readBoolean("processor use hypernyms", topicModelConfig.isProcessorUseHypernyms()));
    		topicModelConfig
    				.setWindowResolution(ConsoleUtils.readEnum(WindowResolution.class, "window resolution", topicModelConfig.getWindowResolution()));
    
    		dbTopicModels.updateSingle(topicModel, "modelConfig");
    		topicModelConfig.saveToFile(topicModelConfig.getModelDir(config.getDataDirectory()));
    	}
    
    	@Override
    	public void run() throws Exception {
    		config = Config.getConfig();
    		dbTopicModels = MongoService.getDatabaseService(config, TopicModelFull.class);
    
    		final List<TopicModelFull> topicModels = dbTopicModels.getMultiple(QueryBuilder.builder().in("name", Arrays.asList(names)).allFields());
    
    		for (final TopicModelFull topicModel : topicModels) {
    			editModel(topicModel);
    		}
    	}
    
    	@Override
    	public boolean requiresLock() {
    		return true;
    	}
    
    }