From 4926889c3ef652244d827591f12b1c1e22e2f551 Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Fri, 24 Jun 2016 13:40:25 +0200
Subject: [PATCH] updated

---
 vipra-cmd/runcfg/CMD.launch                   |  2 +-
 .../main/java/de/vipra/cmd/lda/Analyzer.java  |  9 +++--
 .../de/vipra/cmd/option/EditModelCommand.java |  3 +-
 .../java/de/vipra/cmd/text/ProcessedText.java | 15 +++++---
 .../java/de/vipra/cmd/text/Processor.java     |  4 +--
 .../app/html/partials/topicmodel-popover.html | 34 +++++++++++++++++++
 vipra-ui/app/index.html                       |  4 +--
 vipra-ui/app/js/helpers.js                    |  2 +-
 vipra-ui/app/less/app.less                    |  6 ++++
 .../main/java/de/vipra/util/Statistics.java   |  2 +-
 10 files changed, 64 insertions(+), 17 deletions(-)
 create mode 100644 vipra-ui/app/html/partials/topicmodel-popover.html

diff --git a/vipra-cmd/runcfg/CMD.launch b/vipra-cmd/runcfg/CMD.launch
index 7f3fd45a..2684d537 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 be212bc6..2409ea02 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 2cb8e1bc..44e3558f 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 d18bc7b4..1140f5ff 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 11550225..69f55861 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 00000000..cbdc8737
--- /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 91122d3f..1947dd26 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}}&nbsp;&#10;{{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 6e86b302..7faad66a 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 f61828b4..2a9aacec 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 064420cd..b871706f 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();
 	}
-- 
GitLab