diff --git a/vipra-cmd/runcfg/CMD.launch b/vipra-cmd/runcfg/CMD.launch index aa82fd1f18579b76af999f8f01e357b7932fcc3e..71cb4113257478b1a2d245d7ecb8cf2380b160e2 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="-cS test -I /home/eike/repos/master/ma-impl/docker/data/test-1.json"/> +<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-eS test -CI /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/option/EditModelCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/EditModelCommand.java index ec0a84a265cedda0f96ccc5cf5c69d8e456984e5..83f9d5f72e0ef27be4addf645083807117be0201 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 @@ -1,6 +1,8 @@ package de.vipra.cmd.option; import java.io.IOException; +import java.util.Arrays; +import java.util.List; import org.bson.types.ObjectId; @@ -27,9 +29,11 @@ public class EditModelCommand implements Command { this.names = names; } - private void editModel(final TopicModelConfig topicModelConfig) + private void editModel(final TopicModelFull topicModel) throws DatabaseException, JsonGenerationException, JsonMappingException, IOException, ConfigException { - ConsoleUtils.info("editing model: " + topicModelConfig.getName()); + 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 @@ -63,8 +67,6 @@ public class EditModelCommand implements Command { topicModelConfig .setWindowResolution(ConsoleUtils.readEnum(WindowResolution.class, "window resolution", topicModelConfig.getWindowResolution())); - final TopicModelFull topicModel = dbTopicModels.getSingle(QueryBuilder.builder().eq("name", topicModelConfig.getName())); - topicModel.setModelConfig(topicModelConfig); dbTopicModels.updateSingle(topicModel, "modelConfig"); topicModelConfig.saveToFile(topicModelConfig.getModelDir(config.getDataDirectory())); } @@ -74,8 +76,10 @@ public class EditModelCommand implements Command { config = Config.getConfig(); dbTopicModels = MongoService.getDatabaseService(config, TopicModelFull.class); - for (final String name : names) { - editModel(config.getTopicModelConfig(name)); + final List<TopicModelFull> topicModels = dbTopicModels.getMultiple(QueryBuilder.builder().in("name", Arrays.asList(names))); + + for (final TopicModelFull topicModel : topicModels) { + editModel(topicModel); } } 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 007db4ea6edf4a7a537af7eaee9bda3e933b9272..1ac3556a896244da31a2ccc87d45cd3dbb68709d 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 @@ -196,6 +196,10 @@ public class ImportCommand implements Command { final TextEntityFull newTextEntity = new TextEntityFull(textEntityCount.getEntity(), topicModel); if (newTextEntity.getEntity() == null || newTextEntity.getEntity().isEmpty()) continue; + + // get descriptions from dbpedia + // newTextEntity.setDescription(DBPediaAnalyzer.getAbstract(newTextEntity.getUrl())); + newTextEntities.add(newTextEntity); // insert entity into text diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/text/DBPediaAnalyzer.java b/vipra-cmd/src/main/java/de/vipra/cmd/text/DBPediaAnalyzer.java new file mode 100644 index 0000000000000000000000000000000000000000..604e26d26be50518bfb1e952bd02840e5e774977 --- /dev/null +++ b/vipra-cmd/src/main/java/de/vipra/cmd/text/DBPediaAnalyzer.java @@ -0,0 +1,62 @@ +package de.vipra.cmd.text; + +import java.io.IOException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.IOUtils; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class DBPediaAnalyzer { + + public static final String DBPEDIA_SPARQL_ENDPOINT = "http://dbpedia.org/sparql"; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static String getAbstract(final String resourceURL) throws IOException { + + final String query = "select ?abstract where {<" + resourceURL + + "> <http://dbpedia.org/ontology/abstract> ?abstract filter(langMatches(lang(?abstract),\"en\"))}"; + final String strUrl = DBPEDIA_SPARQL_ENDPOINT + "?default-graph-uri=" + URLEncoder.encode("http://dbpedia.org", "UTF-8") + + "&format=application%2Fsparql-results%2Bjson&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000&debug=on&query=" + + URLEncoder.encode(query, "UTF-8"); + + final URL url = new URL(strUrl); + final String result = IOUtils.toString(url.openStream()); + + if (result != null) { + final ObjectMapper mapper = new ObjectMapper(); + final Map<String, Object> map = mapper.readValue(result, new TypeReference<HashMap>() {}); + + Object o = map.get("results"); + if (o != null && o instanceof Map) { + o = ((Map<String, Object>) o).get("bindings"); + if (o != null && o instanceof List) { + final List<Object> l = (List<Object>) o; + for (int i = 0; i < l.size(); i++) { + o = l.get(i); + if (o != null && o instanceof Map) { + o = ((Map<String, Object>) o).get("abstract"); + if (o != null && o instanceof Map) { + o = ((Map<String, Object>) o).get("value"); + if (o != null && o instanceof String) + return (String) o; + } + } + } + } + } + } + + return null; + } + + public static void main(final String[] args) throws IOException { + getAbstract("http://dbpedia.org/resource/Actor"); + } + +} diff --git a/vipra-ui/app/html/entities/show.html b/vipra-ui/app/html/entities/show.html index bca31168e72758656b611a6fdcc052e67958ec61..f0b43c4560a6c0f16ef585cb43fba0b301e09046 100644 --- a/vipra-ui/app/html/entities/show.html +++ b/vipra-ui/app/html/entities/show.html @@ -37,8 +37,8 @@ <td ng-bind-template="{{entity.types.join(', ') || 'No types'}}" ng-class="{'text-muted':!entity.types}"></td> </tr> <tr> - <th class="infocol">Abstract</th> - <td ng-bind-template="{{abstract || 'No abstract'}}" ng-class="{'text-muted':!abstract}"></td> + <th class="infocol">Description</th> + <td ng-bind-template="{{entity.description || 'No description'}}" ng-class="{'text-muted':!entity.description}"></td> </tr> </tbody> </table> diff --git a/vipra-ui/app/js/controllers.js b/vipra-ui/app/js/controllers.js index 4eb3300887bade0140534a312885c708e9ea99ed..d6c071070e42a7aae1a372c59cfbfa3dfb29f1b2 100644 --- a/vipra-ui/app/js/controllers.js +++ b/vipra-ui/app/js/controllers.js @@ -1651,8 +1651,8 @@ } ]); - app.controller('EntitiesShowController', ['$scope', '$state', '$stateParams', 'EntityFactory', 'DBPediaFactory', - function($scope, $state, $stateParams, EntityFactory, DBPediaFactory) { + app.controller('EntitiesShowController', ['$scope', '$state', '$stateParams', 'EntityFactory', + function($scope, $state, $stateParams, EntityFactory) { $scope.rootModels.title = 'Entity'; $scope.checkTopicModel('entities.show', function() { @@ -1664,11 +1664,6 @@ $scope.entityCreated = Vipra.formatDateTime($scope.entity.created); $scope.entityModified = Vipra.formatDateTime($scope.entity.modified); $scope.rootModels.title = $scope.entity.entity; - DBPediaFactory.get($scope.entity.url, function(data) { - try { - $scope.abstract = data.results.bindings[0].abstract.value; - } catch(e) {} - }); }, function(e) { $scope.error(e.status); }); diff --git a/vipra-ui/app/js/factories.js b/vipra-ui/app/js/factories.js index 485c747d28b9eb9f0926e8563b5a3d3ced0a8d28..49c0546dfed7b99b76585eaadc8bad979e37b5df 100644 --- a/vipra-ui/app/js/factories.js +++ b/vipra-ui/app/js/factories.js @@ -88,15 +88,4 @@ return $myResource(Vipra.config.restUrl + '/windows/:id'); }]); - app.factory('DBPediaFactory', ['$myResource', function($myResource) { - var q1 = 'http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=select+%3Fabstract+where+%7B+%3C'; - var q2 = '%3E+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2Fabstract%3E+%3Fabstract+filter%28langMatches%28lang%28%3Fabstract%29%2C%22en%22%29%29+%7D'; - return { - get: function(url, success, error) { - url = q1 + encodeURIComponent(url) + q2; - return $myResource(url).get({}, success, error); - } - }; - }]); - })(); \ No newline at end of file diff --git a/vipra-util/src/main/java/de/vipra/util/model/TextEntityFull.java b/vipra-util/src/main/java/de/vipra/util/model/TextEntityFull.java index 277d9a6ec1c4b3468e74ffa60814c0f9d3c5309f..2b5c7d729027b4de8046e20fb1e1a8b97ee70a88 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/TextEntityFull.java +++ b/vipra-util/src/main/java/de/vipra/util/model/TextEntityFull.java @@ -31,6 +31,9 @@ public class TextEntityFull implements Model<String>, Serializable, Comparable<T private String entity; + @QueryIgnore(multi = true) + private String description; + @QueryIgnore(multi = true) private Boolean isHypernym; @@ -78,6 +81,14 @@ public class TextEntityFull implements Model<String>, Serializable, Comparable<T this.entity = entity; } + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + public Boolean getIsHypernym() { return isHypernym; }