Select Git revision
EditModelCommand.java
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;
}
}