diff --git a/vipra-cmd/runcfg/CMD.launch b/vipra-cmd/runcfg/CMD.launch index 7f3fd45a4483d2684146995337cec4f7df7d6ee9..2684d5379e17d2688b8b6be10bfd0a026892f0fa 100644 --- a/vipra-cmd/runcfg/CMD.launch +++ b/vipra-cmd/runcfg/CMD.launch @@ -11,7 +11,7 @@ </listAttribute> <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="de.vipra.cmd.Main"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-tdp"/> +<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-S test -dcI /home/eike/repos/master/ma-impl/docker/data/test-1.json"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="vipra-cmd"/> <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/> diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/lda/Analyzer.java b/vipra-cmd/src/main/java/de/vipra/cmd/lda/Analyzer.java index be212bc682da4ad02d1c47b0077f06da0cbb35c7..2409ea023cf53bd54a56be0b2c9b7dab24f5fa69 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/lda/Analyzer.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/lda/Analyzer.java @@ -214,11 +214,6 @@ public class Analyzer { topicModel.setColorSeed(new Random().nextLong()); final List<Color> newColors = ColorUtils.generateRandomColors(topicCount, topicModel.getColorSeed()); - topicModel.setWordCount((long) wordCount); - topicModel.setWindowCount((long) windowCount); - topicModel.setArticleCount((long) articleCount); - topicModel.setTopicCount((long) topicCount); - final boolean seqRelativeCutoff = modelConfig.getMinRelativeProbability() > 0; // for each topic @@ -499,6 +494,10 @@ public class Analyzer { dbSequences.createMultiple(newSequences); dbTopics.createMultiple(newTopics); + topicModel.setWordCount((long) wordCount); + topicModel.setWindowCount((long) windowCount); + topicModel.setArticleCount((long) articleCount); + topicModel.setTopicCount((long) newTopics.size()); topicModel.setLastGenerated(new Date()); dbTopicModels.replaceSingle(topicModel); } diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/EditModelCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/EditModelCommand.java index 2cb8e1bc21ddca4df208409ef41cf2df571b83d7..44e3558fd57918e8447645eb1b51a1cd2dde93bd 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/option/EditModelCommand.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/EditModelCommand.java @@ -36,6 +36,7 @@ public class EditModelCommand implements Command { ConsoleUtils.info("editing model: " + topicModel.getName()); final TopicModelConfig topicModelConfig = topicModel.getModelConfig(); + topicModel.setGroup(ConsoleUtils.readString(" " + ConsoleUtils.PATH_T + " group", topicModel.getGroup(), true)); topicModelConfig.setDescription( ConsoleUtils.readString(" " + ConsoleUtils.PATH_T + " description (↲ to skip)", topicModelConfig.getDescription(), true)); topicModelConfig.setkTopics(ConsoleUtils.readInt(" " + ConsoleUtils.PATH_T + " k topics", topicModelConfig.getkTopics(), 1, null, true)); @@ -78,7 +79,7 @@ public class EditModelCommand implements Command { topicModelConfig.setWindowResolution(ConsoleUtils.readEnum(WindowResolution.class, " " + ConsoleUtils.PATH_L + " window resolution", topicModelConfig.getWindowResolution())); - dbTopicModels.updateSingle(topicModel, "modelConfig"); + dbTopicModels.replaceSingle(topicModel); topicModelConfig.saveToFile(topicModelConfig.getModelDir(config.getDataDirectory())); config.setTopicModelConfig(topicModelConfig); Main.stats.stop("edit." + topicModel.getName()); diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/text/ProcessedText.java b/vipra-cmd/src/main/java/de/vipra/cmd/text/ProcessedText.java index d18bc7b4405a721d85f2fa5a731347235b07b8b8..1140f5ff4f04ae064a94eba7982bada7fa447faa 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/text/ProcessedText.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/text/ProcessedText.java @@ -3,6 +3,7 @@ package de.vipra.cmd.text; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -21,16 +22,22 @@ public class ProcessedText { private final Map<String, String> lemmas; public ProcessedText(final String text, final long wordCount, final Map<String, String> lemmas) { - final String[] allWords = text.toLowerCase().trim().split("\\s+"); + final String[] allWords = text.trim().split("\\s+"); final List<String> wordList = new ArrayList<>(allWords.length); - for (final String word : allWords) + final Map<String, String> cleanedLemmas = new HashMap<>(lemmas.size()); + for (final String word : allWords) { if (word != null && !word.trim().isEmpty()) - wordList.add(word.trim()); + wordList.add(word.toLowerCase().trim()); + final String lemma = lemmas.get(word); + if (lemma != null) + cleanedLemmas.put(lemma, word); + } words = wordList.toArray(new String[allWords.length]); originalWordCount = wordCount; reducedWordCount = words.length; reductionRatio = 1 - ((double) reducedWordCount / wordCount); - this.lemmas = lemmas; + + this.lemmas = cleanedLemmas; wordCounts = new CountMap<>(); for (final String word : words) diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/text/Processor.java b/vipra-cmd/src/main/java/de/vipra/cmd/text/Processor.java index 115502257cfa7234b601f4bac38845d33ea36dc1..69f5586123a2631f7086912d6365a5af1d90dcc9 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/text/Processor.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/text/Processor.java @@ -58,10 +58,10 @@ public class Processor { final String lemma = word.get(LemmaAnnotation.class); if (lemma != null) { // collect unique words - sb.append(lemma.toLowerCase()).append(" "); + sb.append(lemma).append(" "); if (!lemma.equals(word.word())) - lemmas.put(word.word(), lemma); + lemmas.put(lemma, word.word()); } } } diff --git a/vipra-ui/app/html/partials/topicmodel-popover.html b/vipra-ui/app/html/partials/topicmodel-popover.html new file mode 100644 index 0000000000000000000000000000000000000000..cbdc8737f69feaee3861fae93baae05475eeb21f --- /dev/null +++ b/vipra-ui/app/html/partials/topicmodel-popover.html @@ -0,0 +1,34 @@ +<table class="popover-table"> + <tr> + <td>Article count</td> + <td ng-bind="rootModels.topicModel.articleCount"></td> + </tr> + <tr> + <td>Topic count</td> + <td ng-bind="rootModels.topicModel.topicCount"></td> + </tr> + <tr> + <td>Entity count</td> + <td ng-bind="rootModels.topicModel.entityCount"></td> + </tr> + <tr> + <td>Word count</td> + <td ng-bind="rootModels.topicModel.wordCount"></td> + </tr> + <tr> + <td>Window count</td> + <td ng-bind="rootModels.topicModel.windowCount"></td> + </tr> + <tr> + <td>Last generated</td> + <td ng-bind-template="{{$root.Vipra.formatDateTime(rootModels.topicModel.lastGenerated)}}"></td> + </tr> + <tr> + <td>Last indexed</td> + <td ng-bind-template="{{$root.Vipra.formatDateTime(rootModels.topicModel.lastIndexed)}}"></td> + </tr> + <tr> + <td>Last modified</td> + <td ng-bind-template="{{$root.Vipra.formatDateTime(rootModels.topicModel.modified)}}"></td> + </tr> +</table> \ No newline at end of file diff --git a/vipra-ui/app/index.html b/vipra-ui/app/index.html index 91122d3fce881df0f9a27164fe9a719fc379df51..1947dd266616c69187dfe094022995df6904b0dc 100644 --- a/vipra-ui/app/index.html +++ b/vipra-ui/app/index.html @@ -53,7 +53,7 @@ </div> </form> <ul class="nav navbar-nav navbar-right"> - <li ng-class="{'text-italic active':rootModels.topicModel}"> + <li ng-class="{'text-italic active':rootModels.topicModel}" bs-popover popover-template="partials/topicmodel-popover.html" popover-delay="500" popover-placement="bottom"> <a class="active-topicmodel" tabindex="0" ng-click="chooseTopicModel()" ng-bind-template="{{rootModels.topicModel ? rootModels.topicModel.name : 'Models'}}" ng-attr-title="{{rootModels.topicModel.name}} {{rootModels.topicModel.modelConfig.description}}" analytics-on analytics-event="Menu Item (Topic Models)" analytics-category="Menu actions"></a> </li> <li ng-class="{disabled:!rootModels.helpEnabled}" ng-attr-title="{{ rootModels.helpEnabled ? 'Help' : 'No help available' }}"> @@ -116,7 +116,7 @@ No topic models in the database. Create a topic model and import data into it to begin. </p> </div> - <div class="modal-body"> + <div class="modal-body" ng-hide="topicModelsCount"> <h4>Quick start</h4> <ol> <li> diff --git a/vipra-ui/app/js/helpers.js b/vipra-ui/app/js/helpers.js index 6e86b302cfe27ef48e0162230a6845cfc815db97..7faad66a05f59fa5e8fcf5aee73d581ea5686399 100644 --- a/vipra-ui/app/js/helpers.js +++ b/vipra-ui/app/js/helpers.js @@ -26,7 +26,7 @@ }; Vipra.toPercent = function(input, nums) { - if (typeof input === 'undefined') + if (typeof input === 'undefined' || isNaN(input)) return; if (typeof input !== 'number') input = parseInt(input, 10); diff --git a/vipra-ui/app/less/app.less b/vipra-ui/app/less/app.less index f61828b4c53c6646bfa92dd7daf398dba28d0e47..2a9aacec02effdd16042d91d040ceac5749f18bb 100644 --- a/vipra-ui/app/less/app.less +++ b/vipra-ui/app/less/app.less @@ -1085,6 +1085,12 @@ entity-menu { padding: 0 5px; } +.popover-table { + td + td { + padding-left: 5px; + } +} + [ng\:cloak], [ng-cloak], .ng-cloak { display: none !important; } diff --git a/vipra-util/src/main/java/de/vipra/util/Statistics.java b/vipra-util/src/main/java/de/vipra/util/Statistics.java index 064420cdbfada6a1215c645dd60d29cfd11c2548..b871706f51e87879904a4f5a4f653fd6736fe233 100644 --- a/vipra-util/src/main/java/de/vipra/util/Statistics.java +++ b/vipra-util/src/main/java/de/vipra/util/Statistics.java @@ -127,7 +127,7 @@ public class Statistics { public void stopAll() { final long curr = System.nanoTime(); - for (Map.Entry<String, Long> run : running.entrySet()) + for (final Map.Entry<String, Long> run : running.entrySet()) times.put(run.getKey(), curr - run.getValue()); running.clear(); }