From 08e1d67b6ed4f7f745f81e8aae94c366b8182a0a Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Wed, 24 Feb 2016 22:10:39 +0100
Subject: [PATCH] fixed topic shorting, share

fixed topic sorting on article show
fixed topic share calculation
---
 .../src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java | 11 ++++++++---
 .../main/java/de/vipra/cmd/option/ImportCommand.java  |  6 ++++--
 vipra-ui/app/html/articles/show.html                  |  8 ++++----
 vipra-ui/app/js/controllers.js                        |  4 ++--
 vipra-ui/app/less/app.less                            |  4 ++++
 .../src/main/java/de/vipra/util/model/TopicRef.java   |  2 +-
 6 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java b/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java
index c2d35fb7..d6b339ca 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java
@@ -180,12 +180,13 @@ public class JGibbAnalyzer extends Analyzer {
 				}
 
 				// create list of topics refs referencing topics with counted
-				// occurrences
+				// occurrences, sum accepted topic word count
+				long reducedCount = 0;
 				List<TopicRef> newTopicRefs = new ArrayList<>();
 				for (Entry<String, Integer> entry : countMap.entrySet()) {
 					// check if topic above threshold
-					double topicShare = entry.getValue() / totalCount;
-					if (topicShare >= Constants.TOPIC_THRESHOLD) {
+					if ((entry.getValue() / totalCount) >= Constants.TOPIC_THRESHOLD) {
+						reducedCount += entry.getValue();
 						TopicRef ref = new TopicRef();
 						ref.setCount(entry.getValue());
 						ref.setTopic(newTopicsMap.get(Integer.parseInt(entry.getKey())));
@@ -193,6 +194,10 @@ public class JGibbAnalyzer extends Analyzer {
 					}
 				}
 
+				// calculate each accepted topic share
+				for (TopicRef ref : newTopicRefs)
+					ref.setShare((double) ref.getCount() / reducedCount);
+
 				if (!newTopicRefs.isEmpty()) {
 					// update article with topic references (partial update)
 					ArticleFull article = new ArticleFull();
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java
index 55163b1a..062bd93a 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java
@@ -94,11 +94,13 @@ public class ImportCommand implements Command {
 				buffer.add(article);
 
 				// add article to filebase if long enough
-				if (processedText.getReducedWordCount() >= Constants.DOCUMENT_MIN_LENGTH)
+				boolean imported = false;
+				if ((imported = processedText.getReducedWordCount() >= Constants.DOCUMENT_MIN_LENGTH))
 					filebase.add(article);
 
 				log.info("imported \"" + object.get("title") + "\"\r\n └ text reduction: "
-						+ (processedText.getReductionRatio() * 100) + "%");
+						+ (processedText.getReductionRatio() * 100) + "%, text length: [" + processedText.getWordCount()
+						+ " -> " + processedText.getReducedWordCount() + "]" + (imported ? "" : " SKIPPED"));
 			} catch (ProcessorException e) {
 				log.error("could not preprocess text of article '" + article.getTitle() + "'");
 			} catch (DatabaseException e) {
diff --git a/vipra-ui/app/html/articles/show.html b/vipra-ui/app/html/articles/show.html
index fe66fe1e..06d1e784 100644
--- a/vipra-ui/app/html/articles/show.html
+++ b/vipra-ui/app/html/articles/show.html
@@ -53,16 +53,16 @@
     </div>
   </div>
 
-  <h3>Topics <span ng-bind-template="({{article.topics.length}})" ng-show="article.topics.length > 0"></span> <hide-link target="#topics"/></h3>
+  <h3>Topics <hide-link target="#topics"/></h3>
 
   <div class="row" id="topics">
     <div class="col-md-5">
       <table class="table table-morecondensed" ng-show="article.topics.length > 0">
         <tr>
-          <th sort-by="topic.topic.name" sort-type="topicSort" sort-reverse="topicSortRev">
+          <th sort-by="topic.name" sort-type="topicSort" sort-reverse="topicSortRev">
             Name
           </th>
-          <th sort-by="topic.share" sort-type="topicSort" sort-reverse="topicSortRev">
+          <th sort-by="share" sort-type="topicSort" sort-reverse="topicSortRev" class="topic-share">
             Share
           </th>
         </tr>
@@ -70,7 +70,7 @@
           <td>
             <topic-link topic="topic.topic"/>
           </td>
-          <td class="text-right" ng-bind-template="{{topic.share}}%"></td>
+          <td class="text-right" ng-bind-template="{{(topic.share*100).toFixed(1)}}%"></td>
         </tr>
       </table>
       <span class="text-muted" ng-hide="article.topics.length > 0">No topics</span>
diff --git a/vipra-ui/app/js/controllers.js b/vipra-ui/app/js/controllers.js
index 71e13c62..6526e52e 100644
--- a/vipra-ui/app/js/controllers.js
+++ b/vipra-ui/app/js/controllers.js
@@ -288,8 +288,8 @@
   app.controller('ArticlesShowController', ['$scope', '$stateParams', 'ArticleFactory',
     function($scope, $stateParams, ArticleFactory, testService) {
 
-    $scope.topicSort = $scope.topicSort || 'topic.share';
-    $scope.topicSortRev = typeof $scope.topicSortRev === 'undefined' ? false : $scope.topicSortRev;
+    $scope.topicSort = $scope.topicSort || 'share';
+    $scope.topicSortRev = typeof $scope.topicSortRev === 'undefined' ? true : $scope.topicSortRev;
 
     ArticleFactory.get({id: $stateParams.id}, function(data) {
       $scope.article = data;
diff --git a/vipra-ui/app/less/app.less b/vipra-ui/app/less/app.less
index e48007ed..1fe52571 100644
--- a/vipra-ui/app/less/app.less
+++ b/vipra-ui/app/less/app.less
@@ -249,6 +249,10 @@ ul.dashed {
   margin-bottom: 0;
 }
 
+.topic-share {
+  width: 75px;
+}
+
 revolve-select, [revolve-select] {
   .noselect;
   cursor: pointer;
diff --git a/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java b/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
index 3277e56e..4cf31122 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
@@ -47,7 +47,7 @@ public class TopicRef implements Comparable<TopicRef>, Serializable {
 
 	@Override
 	public String toString() {
-		return TopicRef.class.getSimpleName() + "[topic: " + topic + ", count:" + count + "]";
+		return TopicRef.class.getSimpleName() + "[topic: " + topic + ", count:" + count + ", share:" + share + "]";
 	}
 
 }
-- 
GitLab