git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/nlphub@164436 82a268e6-3cf1-43bd-a215-b396298e98cf
parent
a2bbc0aefd
commit
e68c3a31d6
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>nlphub</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src/main/webapp"/>
|
||||
<classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="target/m2e-wtp/web-resources"/>
|
||||
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
|
||||
<attributes>
|
||||
<attribute name="hide" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
|
||||
<classpathentry kind="output" path=""/>
|
||||
</classpath>
|
@ -0,0 +1,13 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
@ -0,0 +1,4 @@
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||
<wb-module deploy-name="nlphub">
|
||||
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
||||
<property name="context-root" value="nlphub"/>
|
||||
<property name="java-output-path" value="/nlphub/target/classes"/>
|
||||
</wb-module>
|
||||
</project-modules>
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<faceted-project>
|
||||
<fixed facet="wst.jsdt.web"/>
|
||||
<installed facet="wst.jsdt.web" version="1.0"/>
|
||||
<installed facet="java" version="1.8"/>
|
||||
<installed facet="jst.web" version="3.0"/>
|
||||
</faceted-project>
|
@ -0,0 +1 @@
|
||||
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
|
@ -0,0 +1 @@
|
||||
Window
|
@ -0,0 +1,2 @@
|
||||
disabled=06target
|
||||
eclipse.preferences.version=1
|
@ -0,0 +1,146 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.gcube</groupId>
|
||||
<artifactId>nlphub</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<properties>
|
||||
<tomcat.version>7.0.70</tomcat.version>
|
||||
<websocket.version>1.1</websocket.version>
|
||||
</properties>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.gcube.distribution</groupId>
|
||||
<artifactId>maven-portal-bom</artifactId>
|
||||
<version>LATEST</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.3</version>
|
||||
</dependency>
|
||||
<!-- JSON -->
|
||||
<dependency>
|
||||
<groupId>com.googlecode.json-simple</groupId>
|
||||
<artifactId>json-simple</artifactId>
|
||||
<version>1.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.8.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<!-- GCube -->
|
||||
<dependency>
|
||||
<groupId>org.gcube.data.analysis</groupId>
|
||||
<artifactId>data-miner-manager-cl</artifactId>
|
||||
<version>[1.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
|
||||
<!-- <version>1.3.0-4.5.0-148453</version>-->
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>common-authorization</artifactId>
|
||||
<version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>authorization-client</artifactId>
|
||||
<version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.contentmanagement</groupId>
|
||||
<artifactId>storage-manager-wrapper</artifactId>
|
||||
<version>[2.1.0-SNAPSHOT,)</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.resources.discovery</groupId>
|
||||
<artifactId>discovery-client</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.core</groupId>
|
||||
<artifactId>common-configuration-scanner</artifactId>
|
||||
<version>[1.0.0-SNAPSHOT,)</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.resources</groupId>
|
||||
<artifactId>registry-publisher</artifactId>
|
||||
<version>[1.2.1-SNAPSHOT,3.0.0-SNAPSHOT)</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.core</groupId>
|
||||
<artifactId>common-scope</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<!-- Sevlet jars for compilation, provided by Tomcat -->
|
||||
<dependency>
|
||||
<groupId>org.apache.tomcat</groupId>
|
||||
<artifactId>tomcat-servlet-api</artifactId>
|
||||
<version>${tomcat.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.6</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- LOGGER -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.6.4</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<version>1.6.4</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.16</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<!-- JUnit -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>nlphub</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1,100 @@
|
||||
package org.gcube.nlphub;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.MultipartConfig;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.gcube.data.analysis.dataminermanagercl.server.dmservice.SClient;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.OutputData;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.MapResource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.Resource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.FileParameter;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter;
|
||||
import org.gcube.nlphub.legacy.DataminerClient;
|
||||
import org.gcube.nlphub.legacy.JsonManager;
|
||||
//import org.gcube.dataminerclient.DataminerClient;
|
||||
import org.gcube.nlphub.nlp.NlpNerRunner;
|
||||
|
||||
/**
|
||||
* Servlet implementation class NLPHub
|
||||
*/
|
||||
@WebServlet(asyncSupported = true, name = "NLPServlet", urlPatterns = { "/nlphub-servlet" })
|
||||
public class NLPHub extends HttpServlet {
|
||||
private Logger logger = Logger.getLogger(NLPHub.class.getSimpleName());
|
||||
private static final long serialVersionUID = 1L;
|
||||
private String service = "http://dataminer-prototypes.d4science.org/wps/";
|
||||
private String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462";
|
||||
|
||||
/**
|
||||
* @see HttpServlet#HttpServlet()
|
||||
*/
|
||||
public NLPHub() {
|
||||
super();
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
doWork(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
doWork(request, response);
|
||||
}
|
||||
|
||||
private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
try {
|
||||
System.out.println("annotations: " + request.getParameter("annotations"));
|
||||
System.out.println("lang: " + request.getParameter("lang"));
|
||||
System.out.println("plink: " + request.getParameter("plink"));
|
||||
System.out.println("algs: " + request.getParameter("algs"));
|
||||
|
||||
String[] algs = request.getParameter("algs").split(",");
|
||||
for(int i=0; i<algs.length; i++) {
|
||||
algs[i] = algs[i].trim();
|
||||
}
|
||||
|
||||
|
||||
if (algs.length >= 1) {
|
||||
// single algorithm execution
|
||||
System.out.println("algs[0]: " + algs[0]);
|
||||
NlpNerRunner runner = new NlpNerRunner(service, algs, token, response);
|
||||
runner.run(request.getParameter("plink"), request.getParameter("annotations"),
|
||||
request.getParameter("lang"));
|
||||
} else {
|
||||
response.setContentType("application/json;charset=UTF-8");
|
||||
try {
|
||||
PrintWriter writer = response.getWriter();
|
||||
writer.println(new JsonManager().getErrorJsonResponse("No algorithm identifiers given."));
|
||||
} catch (Exception ex) {
|
||||
logger.error(ex.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
} catch (Exception x) {
|
||||
x.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package org.gcube.nlphub;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.gcube.nlphub.nlp.NlpNerRunner;
|
||||
import org.gcube.nlphub.mapper.JsonMapper;
|
||||
import org.gcube.nlphub.mapper.DefaultMapper;
|
||||
|
||||
/**
|
||||
* Servlet implementation class NlpMapper
|
||||
*/
|
||||
@WebServlet("/nlphub-mapper-servlet")
|
||||
public class NLPMapper extends HttpServlet {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Logger logger = Logger.getLogger(NLPMapper.class.getSimpleName());
|
||||
|
||||
/**
|
||||
* @see HttpServlet#HttpServlet()
|
||||
*/
|
||||
public NLPMapper() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
doWork(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
doWork(request, response);
|
||||
}
|
||||
|
||||
private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
// response.getWriter().append("Served at:
|
||||
// ").append(request.getContextPath());
|
||||
String documentLink = request.getParameter("dlink"); // link al testo (sul workspace)
|
||||
String toBeMap = request.getParameter("tobemap");
|
||||
String[] tokens = toBeMap.split("|");
|
||||
String annotations = request.getParameter("annotations");
|
||||
String language = request.getParameter("language");
|
||||
|
||||
for (String token : tokens) {
|
||||
String[] t = token.split(":::");
|
||||
try {
|
||||
String json = ((JsonMapper)(getMapper(t[0]).newInstance())).getJson(t[0], t[1]);
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
//response.getWriter().write(json);
|
||||
}
|
||||
|
||||
private Class getMapper(String algId) throws Exception {
|
||||
return Class.forName("org.gcube.nlphub.mapper.DefaultMapper");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,293 @@
|
||||
package org.gcube.nlphub;
|
||||
|
||||
import static org.gcube.common.authorization.client.Constants.authorizationService;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.MultipartConfig;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.Part;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.gcube.nlphub.legacy.Constants;
|
||||
import org.gcube.nlphub.legacy.JsonManager;
|
||||
import org.gcube.nlphub.legacy.NlpHubException;
|
||||
|
||||
/**
|
||||
* Servlet implementation class NLPUploader
|
||||
*/
|
||||
// @WebServlet("/NLPUploader")
|
||||
@WebServlet(asyncSupported = true, name = "NLPUploader", urlPatterns = { "/nlphub-uploader-servlet" })
|
||||
@MultipartConfig
|
||||
public class NLPUploader extends HttpServlet {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Logger logger = Logger.getLogger(NLPUploader.class.getSimpleName());
|
||||
private boolean devMode = true;
|
||||
private String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462";
|
||||
|
||||
/**
|
||||
* @see HttpServlet#HttpServlet()
|
||||
*/
|
||||
public NLPUploader() {
|
||||
super();
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
doWork(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
doWork(request, response);
|
||||
}
|
||||
|
||||
private void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
response.setContentType("application/json;charset=UTF-8");
|
||||
if (request.getParameter("freetext") == null)
|
||||
handleFileUpload(request, response);
|
||||
else
|
||||
handleFreeText(request, response);
|
||||
}
|
||||
|
||||
private void handleFreeText(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
String freeText = request.getParameter("freetext");
|
||||
System.out.println(freeText);
|
||||
byte[] content = freeText.getBytes("UTF-8");
|
||||
String fileName = generateFileName();
|
||||
PrintWriter writer = response.getWriter();
|
||||
try {
|
||||
if (!uploadFile(content, fileName, Constants.DEFAULT_DESCRIPTION, token)) {
|
||||
writer.println(new JsonManager().getErrorJsonResponse(
|
||||
"Error uploading file. A file called '" + fileName + "' is already in the workspace?"));
|
||||
return;
|
||||
}
|
||||
String link = getPublicLink(fileName, token);
|
||||
writer.println(new JsonManager().getSuccessJsonResponse("" + link));
|
||||
} catch (Exception x) {
|
||||
x.printStackTrace();
|
||||
logger.error(x.getClass().getName() + ": " + x.getLocalizedMessage());
|
||||
writer.println(new JsonManager().getErrorJsonResponse(x.getLocalizedMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
private void handleFileUpload(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
int contentLength = request.getContentLength();
|
||||
|
||||
Part filePart = request.getPart("mytxtfile");
|
||||
|
||||
String fileName = getFileName(filePart);
|
||||
|
||||
PrintWriter writer = response.getWriter();
|
||||
// allocate a buffer of request size
|
||||
byte[] buffer = new byte[contentLength];
|
||||
byte[] bufferedContent;
|
||||
try {
|
||||
InputStream fileContent = filePart.getInputStream();
|
||||
int offset = 0, len = 100, byteRead = 0;
|
||||
byte[] readBuffer = new byte[len];
|
||||
while (byteRead > -1) {
|
||||
byteRead = fileContent.read(readBuffer, 0, len);
|
||||
// System.out.println(byteRead);
|
||||
if (byteRead > 0) {
|
||||
System.arraycopy(readBuffer, 0, buffer, offset, byteRead);
|
||||
offset += byteRead;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset < contentLength) {
|
||||
bufferedContent = new byte[offset];
|
||||
System.arraycopy(buffer, 0, bufferedContent, 0, offset);
|
||||
} else
|
||||
bufferedContent = buffer;
|
||||
|
||||
deleteFile(fileName, token);
|
||||
|
||||
if (!uploadFile(bufferedContent, fileName, Constants.DEFAULT_DESCRIPTION, token)) {
|
||||
writer.println(new JsonManager().getErrorJsonResponse(
|
||||
"Error uploading file. A file called '" + fileName + "' is already in the workspace?"));
|
||||
return;
|
||||
}
|
||||
|
||||
String link = getPublicLink(fileName, token);
|
||||
writer.println(new JsonManager().getSuccessJsonResponse("" + link));
|
||||
} catch (Exception x) {
|
||||
x.printStackTrace();
|
||||
logger.error(x.getClass().getName() + ": " + x.getLocalizedMessage());
|
||||
writer.println(new JsonManager().getErrorJsonResponse(x.getLocalizedMessage()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private String getFileName(Part part) {
|
||||
String partHeader = part.getHeader("content-disposition");
|
||||
logger.debug("Part Header: " + partHeader);
|
||||
for (String content : part.getHeader("content-disposition").split(";")) {
|
||||
if (content.trim().startsWith("filename")) {
|
||||
return content.substring(content.indexOf('=') + 1).trim().replace("\"", "");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getPublicLink(String fileName, String token) throws NlpHubException {
|
||||
try {
|
||||
String link = "";
|
||||
String user = authorizationService().get(token).getClientInfo().getId();
|
||||
String wsRoot = "/Home/" + user + "/Workspace/";
|
||||
String webapp = "https://workspace-repository.d4science.org/home-library-webapp";
|
||||
String uri = webapp + "/rest/GetPublicLink?absPath=" + URLEncoder.encode(wsRoot + fileName, "UTF-8")
|
||||
+ "&shortUrl=false";
|
||||
URL url = new URL(uri);
|
||||
|
||||
// System.out.println(uri);
|
||||
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestProperty(Constants.TOKEN_PARAMETER, token);
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setRequestMethod("GET");
|
||||
|
||||
BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
|
||||
StringBuffer response = new StringBuffer();
|
||||
String inputLine;
|
||||
while ((inputLine = r.readLine()) != null) {
|
||||
response.append(inputLine);
|
||||
}
|
||||
|
||||
String xmlOut = response.toString();
|
||||
// System.out.println("xmlOut: " + xmlOut);
|
||||
|
||||
String begin = "<string>";
|
||||
String end = "</string>";
|
||||
int b = xmlOut.indexOf(begin);
|
||||
int e = xmlOut.indexOf(end);
|
||||
|
||||
if (xmlOut.contains("Exception") || (e < 0) || (b < 0)) {
|
||||
String message = "Invalid link: " + URLEncoder.encode(xmlOut, "UTF-8");
|
||||
logger.error(message);
|
||||
throw new NlpHubException(message, null);
|
||||
}
|
||||
|
||||
link = xmlOut.substring(b + begin.length(), e);
|
||||
return link;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
throw new NlpHubException(e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteFile(String fileName, String token) throws NlpHubException {
|
||||
try {
|
||||
String user = authorizationService().get(token).getClientInfo().getId();
|
||||
String wsRoot = "/Home/" + user + "/Workspace/";
|
||||
String webapp = "https://workspace-repository.d4science.org/home-library-webapp";
|
||||
String uri = webapp + "/rest/Delete?absPath=" + URLEncoder.encode(wsRoot + fileName, "UTF-8");
|
||||
URL url = new URL(uri);
|
||||
|
||||
// System.out.println(uri);
|
||||
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestProperty(Constants.TOKEN_PARAMETER, token);
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setRequestMethod("GET");
|
||||
|
||||
BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
|
||||
StringBuffer response = new StringBuffer();
|
||||
String inputLine;
|
||||
while ((inputLine = r.readLine()) != null) {
|
||||
response.append(inputLine);
|
||||
}
|
||||
|
||||
String xmlOut = response.toString();
|
||||
// System.out.println(xmlOut);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
throw new NlpHubException(e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean uploadFile(byte[] in, String name, String description, String token) throws NlpHubException {
|
||||
OutputStream output = null;
|
||||
try {
|
||||
String user = authorizationService().get(token).getClientInfo().getId();
|
||||
String wsRoot = "/Home/" + user + "/Workspace/";
|
||||
String webapp = "https://workspace-repository.d4science.org/home-library-webapp";
|
||||
String uri = webapp + "/rest/Upload?name=" + URLEncoder.encode(name, "UTF-8") + "&description="
|
||||
+ URLEncoder.encode(description, "UTF-8") + "&parentPath=" + URLEncoder.encode(wsRoot, "UTF-8");
|
||||
URL url = new URL(uri);
|
||||
|
||||
// System.out.println(uri);
|
||||
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestProperty(Constants.TOKEN_PARAMETER, token);
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setRequestProperty(Constants.CONTENT_TYPE, Constants.MIME_TEXT);
|
||||
connection.setRequestMethod("POST");
|
||||
output = connection.getOutputStream();
|
||||
output.write(in);
|
||||
|
||||
BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
|
||||
StringBuffer response = new StringBuffer();
|
||||
String inputLine;
|
||||
while ((inputLine = r.readLine()) != null) {
|
||||
response.append(inputLine);
|
||||
}
|
||||
|
||||
String xmlOut = response.toString();
|
||||
// System.out.println(xmlOut);
|
||||
if (xmlOut.contains("Exception"))
|
||||
return false;
|
||||
return true;
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
throw new NlpHubException(e.getLocalizedMessage(), e);
|
||||
} finally {
|
||||
// output stream must be closed anyway...
|
||||
if (output != null)
|
||||
try {
|
||||
output.close();
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String generateFileName() {
|
||||
long now = System.currentTimeMillis();
|
||||
return "auto-nlp-" + now;
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
public class Constants {
|
||||
public static String DEFAULT_DESCRIPTION = "NlpHub upload";
|
||||
public static String TOKEN_PARAMETER = "gcube-token";
|
||||
public static String TEST_TOKEN = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462";
|
||||
public static String MIME_TEXT = "text/plain";
|
||||
public static String CONTENT_TYPE = "Content-Type";
|
||||
|
||||
|
||||
public static String getToken(HttpServletRequest request, boolean devMode) {
|
||||
String token = request.getParameter(TOKEN_PARAMETER);
|
||||
if(devMode) {
|
||||
if(token == null) token = TEST_TOKEN;
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,214 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
//package dataminerclient;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.data.analysis.dataminermanagercl.server.DataMinerService;
|
||||
import org.gcube.data.analysis.dataminermanagercl.server.dmservice.SClient;
|
||||
import org.gcube.data.analysis.dataminermanagercl.server.monitor.DMMonitor;
|
||||
import org.gcube.data.analysis.dataminermanagercl.server.monitor.DMMonitorListener;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.OutputData;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.MapResource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.Resource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class DataminerClient {
|
||||
private String service, token;
|
||||
protected String identifier;
|
||||
private static Logger logger = LoggerFactory.getLogger(DataminerClient.class);
|
||||
private DataMinerService dataMinerService = null;
|
||||
private SClient sClient = null;
|
||||
private Operator operator = null;
|
||||
|
||||
public DataminerClient(String service, String identifier, String token) {
|
||||
this.service = service;
|
||||
this.identifier = identifier;
|
||||
this.token = token;
|
||||
dataMinerService = new DataMinerService();
|
||||
}
|
||||
|
||||
public void init() throws DataminerClientException {
|
||||
try {
|
||||
sClient = dataMinerService.getClient(getToken(), getService());
|
||||
operator = sClient.getOperatorById(getIdentifier());
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getClass().getName() + ": " + e.getLocalizedMessage());
|
||||
throw new DataminerClientException(e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getOperatorName() {
|
||||
if (operator != null) {
|
||||
return operator.getName();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getOperatorDescription() {
|
||||
if (operator != null) {
|
||||
return operator.getDescription();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getOperatorBriefDescription() {
|
||||
if (operator != null) {
|
||||
return operator.getBriefDescription();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public List<Parameter> getOperatorInputParameters() throws DataminerClientException {
|
||||
if (operator != null) {
|
||||
try {
|
||||
return sClient.getInputParameters(operator);
|
||||
}
|
||||
catch (Exception x) {
|
||||
throw new DataminerClientException(x.getLocalizedMessage(), x);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ComputationId execute(List<Parameter> parameters) throws DataminerClientException {
|
||||
try {
|
||||
operator.setOperatorParameters(parameters);
|
||||
ComputationId computationId = sClient.startComputation(operator);
|
||||
monitoringComputation(computationId, sClient);
|
||||
return computationId;
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getClass().getName() + ": " + e.getLocalizedMessage());
|
||||
throw new DataminerClientException(e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getService() {
|
||||
return service;
|
||||
}
|
||||
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
||||
public void setIdentifier(String indentifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
public void retrieveOutput(ComputationId computationId, SClient sClient) {
|
||||
try {
|
||||
OutputData output = sClient.getOutputDataByComputationId(computationId);
|
||||
// logger.debug("Output: " + output);
|
||||
Resource resource = output.getResource();
|
||||
if (resource.isMap()) {
|
||||
MapResource mapResource = (MapResource) resource;
|
||||
for (String key : mapResource.getMap().keySet()) {
|
||||
logger.debug("Entry: " + key + " = " + mapResource.getMap().get(key));
|
||||
System.out.println("Entry: " + key + " = " + mapResource.getMap().get(key));
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void monitoringComputation(ComputationId computationId, SClient sClient) {
|
||||
|
||||
DMMonitorListener listener = new DMMonitorListener() {
|
||||
|
||||
@Override
|
||||
public void running(double percentage) {
|
||||
logger.debug("Operation Running: " + percentage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(String message, Exception exception) {
|
||||
logger.error("Operation Failed");
|
||||
logger.error(message);
|
||||
logger.error(exception.getStackTrace().toString());
|
||||
System.out.println(exception.getLocalizedMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void complete(double percentage) {
|
||||
logger.debug("Operation Completed");
|
||||
logger.debug("Perc: " + percentage);
|
||||
retrieveOutput(computationId, sClient);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelled() {
|
||||
logger.debug("Operation Cancelled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accepted() {
|
||||
logger.debug("Operation Accepted");
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
DMMonitor dmMonitor = new DMMonitor(computationId, sClient);
|
||||
dmMonitor.add(listener);
|
||||
dmMonitor.start();
|
||||
}
|
||||
/*
|
||||
public static void main(String[] args) {
|
||||
String service = "http://dataminer-prototypes.d4science.org/wps/";
|
||||
String identifier = "";
|
||||
identifier = "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.ENGLISH_NAMED_ENTITY_RECOGNIZER";
|
||||
identifier = "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.NEWSTANBOLWRAPPER";
|
||||
//identifier = "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.GENERIC_OPINION_MINING_ENGLISH";
|
||||
String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462";
|
||||
|
||||
DataminerClient dmc = new DataminerClient(service, identifier, token);
|
||||
try {
|
||||
dmc.init();
|
||||
System.out.println(dmc.getOperatorBriefDescription());
|
||||
System.out.println(dmc.getOperatorDescription());
|
||||
System.out.println(dmc.getOperatorName());
|
||||
List<Parameter> parameters = dmc.getOperatorInputParameters();
|
||||
if (parameters != null) {
|
||||
System.out.println("Parameter number: " + parameters.size());
|
||||
for (Parameter p : parameters) {
|
||||
System.out.println("name : " + p.getName());
|
||||
System.out.println("value: " + p.getValue());
|
||||
System.out.println("type : " + p.getTypology());
|
||||
System.out.println("desc : " + p.getDescription());
|
||||
System.out.println("toString: " + p.toString());
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
// List<Parameter> parameters = new ArrayList<>();
|
||||
//
|
||||
// FileParameter fileName = new FileParameter();
|
||||
// fileName.setName("inputTextFile");
|
||||
// fileName.setValue("http://data.d4science.org/cWRQbHNjRVR4YjdkQXdDUnlSS0JkZVlmLzk2WnJIb1ZHbWJQNStIS0N6Yz0");
|
||||
// parameters.add(fileName);
|
||||
//
|
||||
// ObjectParameter options = new ObjectParameter();
|
||||
// options.setName("annotationsList");
|
||||
// //options.setValue("Address|Date|Location|Organization|Person|Money|Percent|SpaceToken");
|
||||
// options.setValue("SpaceToken");
|
||||
// parameters.add(options);
|
||||
//
|
||||
// ComputationId cid = dmc.execute(parameters);
|
||||
// System.out.println("urlId: " + cid.getUrlId());
|
||||
} catch (Exception e) {
|
||||
System.out.println("-" + e.getClass().getName() + "-\n" + e.getLocalizedMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
class DataminerClientException extends Exception {
|
||||
public DataminerClientException(String message, Throwable throwable) {
|
||||
super(message, throwable);
|
||||
}
|
||||
};
|
@ -0,0 +1,130 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
public class JsonManager {
|
||||
public static String TEXT = "text";
|
||||
public static String ANNOTATIONS = "annotations";
|
||||
public static String LANGUAGE = "language";
|
||||
public static String ALGORITHM = "algorithm";
|
||||
public static String ENTITIES = "entities";
|
||||
public static String INDICES = "indices";
|
||||
public static String RESULT = "result";
|
||||
public static String RESPONSE = "response";
|
||||
public static String OK = "Ok";
|
||||
public static String ERROR = "Error";
|
||||
public static String MESSAGE = "message";
|
||||
|
||||
private JsonObject jsonObjectRoot = null;
|
||||
private JsonParser jsonParser = null;
|
||||
|
||||
public JsonManager() {
|
||||
jsonObjectRoot = new JsonObject();
|
||||
}
|
||||
|
||||
public JsonManager(String s) {
|
||||
jsonObjectRoot = (JsonObject) new JsonParser().parse(s);
|
||||
}
|
||||
|
||||
public JsonManager(Reader r) {
|
||||
jsonObjectRoot = (JsonObject) new JsonParser().parse(r);
|
||||
}
|
||||
|
||||
public String getJsonAsString() {
|
||||
return jsonObjectRoot.toString();
|
||||
}
|
||||
|
||||
public String getSuccessJsonResponse(String[] messages) {
|
||||
jsonObjectRoot.addProperty(RESPONSE, OK);
|
||||
JsonArray msgs = new JsonArray();
|
||||
for(String m : messages) {
|
||||
msgs.add(m);
|
||||
}
|
||||
jsonObjectRoot.add(MESSAGE, msgs);
|
||||
return jsonObjectRoot.toString();
|
||||
}
|
||||
|
||||
public String getSuccessJsonResponse(String message) {
|
||||
return getResponse(true, message);
|
||||
}
|
||||
|
||||
public String getErrorJsonResponse(String message) {
|
||||
return getResponse(false, message);
|
||||
}
|
||||
|
||||
private String getResponse(boolean success, String message) {
|
||||
jsonObjectRoot.addProperty(RESPONSE, (success ? OK : ERROR));
|
||||
jsonObjectRoot.addProperty(MESSAGE, message);
|
||||
return jsonObjectRoot.toString();
|
||||
}
|
||||
|
||||
/*
|
||||
public void buildNerOutputJson(NerOutput nerOut) {
|
||||
// build the root json object initial property fields
|
||||
jsonObjectRoot.addProperty(TEXT, nerOut.getText());
|
||||
jsonObjectRoot.addProperty(ANNOTATIONS, nerOut.getAnnotations());
|
||||
jsonObjectRoot.addProperty(LANGUAGE, nerOut.getLanguage());
|
||||
|
||||
// set the result array (main array)
|
||||
JsonArray jsonResults = new JsonArray();
|
||||
ArrayList<NerAlgorithmResult> results = nerOut.getResults();
|
||||
|
||||
for (NerAlgorithmResult result : results) {
|
||||
JsonObject jsonResult = buildResult(result);
|
||||
jsonResults.add(jsonResult);
|
||||
}
|
||||
|
||||
jsonObjectRoot.add(RESULT, jsonResults);
|
||||
}
|
||||
|
||||
private JsonObject buildResult(NerAlgorithmResult result) {
|
||||
JsonObject jsonResult = new JsonObject();
|
||||
jsonResult.addProperty(ALGORITHM, result.getAlgorithmName());
|
||||
|
||||
JsonObject jsonEntities = new JsonObject();
|
||||
ArrayList<NerEntity> entities = result.getEntities();
|
||||
if (entities != null)
|
||||
for (NerEntity entity : entities) {
|
||||
JsonArray jsonEntityValues = buildEntityValues(entity);
|
||||
jsonEntities.add(entity.getEntityName(), jsonEntityValues);
|
||||
}
|
||||
|
||||
jsonResult.add(ENTITIES, jsonEntities);
|
||||
return jsonResult;
|
||||
}
|
||||
|
||||
private JsonArray buildEntityValues(NerEntity entity) {
|
||||
// JsonObject jsonEntity = new JsonObject();
|
||||
JsonArray values = new JsonArray();
|
||||
ArrayList<NerEntityData> entityData = entity.getEntities();
|
||||
if (entityData != null)
|
||||
for (NerEntityData data : entityData) {
|
||||
JsonObject jsonEntityData = buildEntityData(data);
|
||||
values.add(jsonEntityData);
|
||||
}
|
||||
// jsonEntity.add(entity.getEntityName(), values);
|
||||
return values;
|
||||
}
|
||||
|
||||
private JsonObject buildEntityData(NerEntityData data) {
|
||||
JsonObject entityData = new JsonObject();
|
||||
JsonArray indices = new JsonArray();
|
||||
indices.add(data.getStart());
|
||||
indices.add(data.getEnd());
|
||||
entityData.add(INDICES, indices);
|
||||
ArrayList<NameValue> fields = data.getAdditionalFields();
|
||||
if (fields != null)
|
||||
for (NameValue field : fields) {
|
||||
entityData.addProperty(field.getName(), field.getValue());
|
||||
}
|
||||
return entityData;
|
||||
}
|
||||
*/
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
public class NerAlgorithm {
|
||||
private String name;
|
||||
private ArrayList<NerAnnotationData> annotationsData;
|
||||
|
||||
public NerAlgorithm(String name) {
|
||||
this.name = name;
|
||||
annotationsData = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addAnnotationData(NerAnnotationData data) {
|
||||
annotationsData.add(data);
|
||||
}
|
||||
|
||||
public JsonObject toJson() {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("algorithm", name);
|
||||
JsonArray data = new JsonArray();
|
||||
for (NerAnnotationData d : annotationsData) {
|
||||
data.add(d.toJson());
|
||||
}
|
||||
json.add("entities", data);
|
||||
return json;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public ArrayList<NerAnnotationData> getAnnotationsData() {
|
||||
return annotationsData;
|
||||
}
|
||||
|
||||
public void setAnnotationsData(ArrayList<NerAnnotationData> annotationsData) {
|
||||
this.annotationsData = annotationsData;
|
||||
}
|
||||
|
||||
/*
|
||||
public static void main(String[] args) {
|
||||
NerAlgorithm alg = new NerAlgorithm("Algorithm-name");
|
||||
|
||||
NerEntity ne1 = new NerEntity(11, 22);
|
||||
ne1.addProperty("type", "scalar");
|
||||
ne1.addProperty("unit", "hours");
|
||||
|
||||
NerEntity ne2 = new NerEntity(33, 44);
|
||||
ne2.addProperty("type", "scalar");
|
||||
ne2.addProperty("unit", "minutes");
|
||||
|
||||
NerAnnotationData nad = new NerAnnotationData("Measure");
|
||||
nad.addNerEntity(ne1);
|
||||
nad.addNerEntity(ne2);
|
||||
|
||||
alg.addAnnotationData(nad);
|
||||
|
||||
ne1 = new NerEntity(0, 10);
|
||||
ne2 = new NerEntity(111, 114);
|
||||
nad = new NerAnnotationData("Person");
|
||||
nad.addNerEntity(ne1);
|
||||
nad.addNerEntity(ne2);
|
||||
|
||||
alg.addAnnotationData(nad);
|
||||
|
||||
|
||||
System.out.println(alg.toJson().toString());
|
||||
}*/
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
public class NerAnnotationData {
|
||||
private String name;
|
||||
private ArrayList<NerEntity> nerEntities;
|
||||
|
||||
/**
|
||||
* Class constructor; require the name of the annotation
|
||||
* @param name
|
||||
*/
|
||||
public NerAnnotationData(String name) {
|
||||
this.name = name;
|
||||
nerEntities = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* add a new NerEntity to the collection
|
||||
* @param entity
|
||||
*/
|
||||
public void addNerEntity(NerEntity entity) {
|
||||
nerEntities.add(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* build the proper Json object.
|
||||
* @return JsonObject
|
||||
*/
|
||||
public JsonObject toJson() {
|
||||
JsonObject json = new JsonObject();
|
||||
JsonArray entities = new JsonArray();
|
||||
for(NerEntity e : nerEntities) {
|
||||
entities.add(e.toJson());
|
||||
}
|
||||
json.add(name,entities);
|
||||
return json;
|
||||
}
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public ArrayList<NerEntity> getNerEntities() {
|
||||
return nerEntities;
|
||||
}
|
||||
|
||||
public void setNerEntities(ArrayList<NerEntity> nerEntities) {
|
||||
this.nerEntities = nerEntities;
|
||||
}
|
||||
|
||||
/*
|
||||
public static void main(String[] args) {
|
||||
NerEntity ne1 = new NerEntity(11, 22);
|
||||
ne1.addProperty("type", "scalar");
|
||||
ne1.addProperty("unit", "hours");
|
||||
|
||||
NerEntity ne2 = new NerEntity(33, 44);
|
||||
ne2.addProperty("type", "scalar");
|
||||
ne2.addProperty("unit", "minutes");
|
||||
|
||||
NerAnnotationData nad = new NerAnnotationData("Measure");
|
||||
nad.addNerEntity(ne1);
|
||||
nad.addNerEntity(ne2);
|
||||
|
||||
System.out.println(nad.toJson().toString());
|
||||
}*/
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
|
||||
public class NerEntity {
|
||||
private int startIndex, endIndex;
|
||||
private HashMap<String, String> properties = null;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
* @param startIndex the start index of the matching annotation
|
||||
* @param endIndex the end index of the matching annotation
|
||||
*/
|
||||
public NerEntity(int startIndex, int endIndex) {
|
||||
this.startIndex = startIndex;
|
||||
this.endIndex = endIndex;
|
||||
properties = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an additional property (property is a couple {name, value})
|
||||
* @param name
|
||||
* @param value
|
||||
*/
|
||||
public void addProperty(String name, String value) {
|
||||
properties.put(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a proper JsonObject
|
||||
* @return JsonObject
|
||||
*/
|
||||
public JsonObject toJson() {
|
||||
JsonObject json = new JsonObject();
|
||||
|
||||
// build the "indices" array
|
||||
JsonArray indices = new JsonArray();
|
||||
indices.add(startIndex);
|
||||
indices.add(endIndex);
|
||||
json.add("indices", indices);
|
||||
|
||||
// add additional properties (if any)
|
||||
Set<String> names = properties.keySet();
|
||||
for(String n : names) {
|
||||
json.addProperty(n, properties.get(n));
|
||||
}
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
public int getStartIndex() {
|
||||
return startIndex;
|
||||
}
|
||||
|
||||
public void setStartIndex(int startIndex) {
|
||||
this.startIndex = startIndex;
|
||||
}
|
||||
|
||||
public int getEndIndex() {
|
||||
return endIndex;
|
||||
}
|
||||
|
||||
public void setEndIndex(int endIndex) {
|
||||
this.endIndex = endIndex;
|
||||
}
|
||||
|
||||
public HashMap<String, String> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(HashMap<String, String> properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
/*
|
||||
public static void main(String[] args) {
|
||||
NerEntity ne = new NerEntity(11, 22);
|
||||
ne.addProperty("type", "scalar");
|
||||
ne.addProperty("unit", "hour");
|
||||
System.out.println(ne.toJson().toString());
|
||||
}*/
|
||||
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
public class NerOutput {
|
||||
private String text, annotations, language;
|
||||
private ArrayList<NerAlgorithm> result;
|
||||
|
||||
public NerOutput(String text, String annotations, String language) {
|
||||
this.text = text;
|
||||
this.annotations = annotations;
|
||||
this.language = language;
|
||||
result = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addNerAlgorithm(NerAlgorithm alg) {
|
||||
result.add(alg);
|
||||
}
|
||||
|
||||
public JsonObject toJson() {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("text", text);
|
||||
json.addProperty("annotations", annotations);
|
||||
json.addProperty("language", language);
|
||||
|
||||
JsonArray jResult = new JsonArray();
|
||||
for(NerAlgorithm a : result) {
|
||||
jResult.add(a.toJson());
|
||||
}
|
||||
|
||||
json.add("result",jResult);
|
||||
return json;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public String getAnnotations() {
|
||||
return annotations;
|
||||
}
|
||||
|
||||
public void setAnnotations(String annotations) {
|
||||
this.annotations = annotations;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return language;
|
||||
}
|
||||
|
||||
public void setLanguage(String language) {
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
public ArrayList<NerAlgorithm> getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(ArrayList<NerAlgorithm> result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
NerAlgorithm alg = new NerAlgorithm("Algorithm-name");
|
||||
|
||||
NerEntity ne1 = new NerEntity(11, 22);
|
||||
ne1.addProperty("type", "scalar");
|
||||
ne1.addProperty("unit", "hours");
|
||||
|
||||
NerEntity ne2 = new NerEntity(33, 44);
|
||||
ne2.addProperty("type", "scalar");
|
||||
ne2.addProperty("unit", "minutes");
|
||||
|
||||
NerAnnotationData nad = new NerAnnotationData("Measure");
|
||||
nad.addNerEntity(ne1);
|
||||
nad.addNerEntity(ne2);
|
||||
|
||||
alg.addAnnotationData(nad);
|
||||
|
||||
ne1 = new NerEntity(0, 10);
|
||||
ne2 = new NerEntity(111, 114);
|
||||
nad = new NerAnnotationData("Person");
|
||||
nad.addNerEntity(ne1);
|
||||
nad.addNerEntity(ne2);
|
||||
|
||||
alg.addAnnotationData(nad);
|
||||
|
||||
NerAlgorithm alg2 = new NerAlgorithm("Algorithm-name-2");
|
||||
|
||||
ne1 = new NerEntity(1, 22);
|
||||
ne2 = new NerEntity(30, 33);
|
||||
|
||||
nad = new NerAnnotationData("Measure");
|
||||
nad.addNerEntity(ne1);
|
||||
nad.addNerEntity(ne2);
|
||||
|
||||
alg2.addAnnotationData(nad);
|
||||
|
||||
|
||||
NerOutput no = new NerOutput("this is the text", "Measure,Person", "english");
|
||||
no.addNerAlgorithm(alg);
|
||||
no.addNerAlgorithm(alg2);
|
||||
|
||||
System.out.println(no.toJson().toString());
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package org.gcube.nlphub.legacy;
|
||||
|
||||
public class NlpHubException extends Exception {
|
||||
public NlpHubException(String message, Throwable throwable) {
|
||||
super(message, throwable);
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package org.gcube.nlphub.mapper;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.gcube.nlphub.legacy.NerAlgorithm;
|
||||
import org.gcube.nlphub.legacy.NerAnnotationData;
|
||||
import org.gcube.nlphub.legacy.NerEntity;
|
||||
import org.gcube.nlphub.nlp.NlpNerRunner;
|
||||
|
||||
public class DefaultMapper implements JsonMapper {
|
||||
private Logger logger = Logger.getLogger(DefaultMapper.class.getSimpleName());
|
||||
|
||||
public String getJson(String alg, String link) {
|
||||
NerAlgorithm algInfo = new NerAlgorithm(alg);
|
||||
try {
|
||||
HttpURLConnection connection = (HttpURLConnection) new URL(link).openConnection();
|
||||
connection.setRequestMethod("GET");
|
||||
System.out.println("Content-Type: " + connection.getContentType());
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
JsonObject jsonRoot = (JsonObject) new JsonParser().parse(reader);
|
||||
JsonElement entities = jsonRoot.get("entities");
|
||||
if ((entities != null) && (entities.isJsonObject())) {
|
||||
JsonObject e = (JsonObject) entities;
|
||||
Set<String> properties = e.keySet();
|
||||
for (String p : properties) {
|
||||
JsonElement property = e.get(p);
|
||||
if (!property.isJsonArray())
|
||||
continue;
|
||||
NerAnnotationData data = new NerAnnotationData(p);
|
||||
JsonArray jsonAnnotation = (JsonArray) property;
|
||||
int size = jsonAnnotation.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
JsonElement ann = jsonAnnotation.get(i);
|
||||
if (ann.isJsonObject()) {
|
||||
JsonObject annotation = (JsonObject) ann;
|
||||
Set<String> fields = annotation.keySet();
|
||||
JsonArray indices = (JsonArray) annotation.get("indices");
|
||||
NerEntity ne = new NerEntity(indices.get(0).getAsInt(), indices.get(1).getAsInt());
|
||||
|
||||
for (String f : fields) {
|
||||
if (f.equals("indices"))
|
||||
continue;
|
||||
JsonElement je = annotation.get(f);
|
||||
if (!je.isJsonArray() && !je.isJsonObject() && !je.isJsonNull()) {
|
||||
ne.addProperty(f, je.getAsString());
|
||||
}
|
||||
}
|
||||
data.addNerEntity(ne);
|
||||
}
|
||||
algInfo.addAnnotationData(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
return algInfo.toJson().toString();
|
||||
} catch (Exception x) {
|
||||
logger.error(x.getLocalizedMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package org.gcube.nlphub.mapper;
|
||||
|
||||
public interface JsonMapper {
|
||||
|
||||
public String getJson(String algorithm, String link);
|
||||
// public String JsonObject(HashMap<String, String> algs, String language);
|
||||
// public String JsonObject(HashMap<String, String> algs, String language, String text);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,209 @@
|
||||
package org.gcube.nlphub.nlp;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.gcube.data.analysis.dataminermanagercl.server.dmservice.SClient;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.OutputData;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.FileResource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.MapResource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.Resource;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.data.output.Resource.ResourceType;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.FileParameter;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ListParameter;
|
||||
import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter;
|
||||
import org.gcube.nlphub.NLPUploader;
|
||||
import org.gcube.nlphub.legacy.Constants;
|
||||
import org.gcube.nlphub.legacy.DataminerClient;
|
||||
import org.gcube.nlphub.legacy.JsonManager;
|
||||
import org.gcube.nlphub.legacy.NlpHubException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
public class NlpNerRunner extends DataminerClient {
|
||||
private Logger logger = Logger.getLogger(NlpNerRunner.class.getSimpleName());
|
||||
private HttpServletResponse response = null;
|
||||
private ArrayList<String> outputLinks;
|
||||
private String[] identifiers;
|
||||
private String currentId;
|
||||
|
||||
/**
|
||||
* This constructor is useful for local test cases...
|
||||
*
|
||||
* @param service
|
||||
* @param identifier
|
||||
* @param token
|
||||
*/
|
||||
public NlpNerRunner(String service, String identifier, String token) {
|
||||
super(service, identifier, token);
|
||||
outputLinks = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* This constructor is the "canonical one"
|
||||
*
|
||||
* @param service
|
||||
* @param identifier
|
||||
* @param token
|
||||
* @param response
|
||||
*/
|
||||
public NlpNerRunner(String service, String[] identifiers, String token) {
|
||||
super(service, "", token);
|
||||
outputLinks = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* This constructor is useful when multiple alogrithm identifiers are given
|
||||
*
|
||||
* @param service
|
||||
* @param identifiers
|
||||
* @param token
|
||||
*/
|
||||
public NlpNerRunner(String service, String[] identifiers, String token, HttpServletResponse response) {
|
||||
super(service, "", token);
|
||||
this.response = response;
|
||||
this.identifiers = identifiers;
|
||||
outputLinks = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void retrieveOutput(ComputationId computationId, SClient sClient) {
|
||||
try {
|
||||
OutputData output = sClient.getOutputDataByComputationId(computationId);
|
||||
Resource resource = output.getResource();
|
||||
if (resource.isMap()) {
|
||||
MapResource mapResource = (MapResource) resource;
|
||||
for (String key : mapResource.getMap().keySet()) {
|
||||
Resource r = mapResource.getMap().get(key);
|
||||
if (r.isFile()) {
|
||||
FileResource f = (FileResource) r;
|
||||
String link = f.getUrl();
|
||||
System.out.println("url: " + link);
|
||||
String op = computationId.getOperatorId();
|
||||
op = op.substring(op.lastIndexOf(".") + 1);
|
||||
testEndOfProcess(op + ":::" + link);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
writeResponse(e.getLocalizedMessage(), false);
|
||||
}
|
||||
}
|
||||
|
||||
public void run(String filePublicLink, String annotations, String language) throws NlpHubException {
|
||||
for (String id : identifiers) {
|
||||
try {
|
||||
super.identifier = id;
|
||||
super.init();
|
||||
List<Parameter> parameters = mapParameters(filePublicLink, annotations);
|
||||
super.execute(parameters);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
throw new NlpHubException(e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<String> getOutputLinks() {
|
||||
return outputLinks;
|
||||
}
|
||||
|
||||
private synchronized void testEndOfProcess(String link) {
|
||||
outputLinks.add(link);
|
||||
if (outputLinks.size() == identifiers.length) {
|
||||
String[] links = new String[outputLinks.size()];
|
||||
links = outputLinks.toArray(links);
|
||||
writeResponse(links);
|
||||
}
|
||||
}
|
||||
|
||||
private void writeResponse(String[] content) {
|
||||
if (response != null) {
|
||||
response.setContentType("application/json;charset=UTF-8");
|
||||
try {
|
||||
PrintWriter writer = response.getWriter();
|
||||
writer.println(new JsonManager().getSuccessJsonResponse(content));
|
||||
} catch (Exception ex) {
|
||||
logger.error(ex.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void writeResponse(String content, boolean isOk) {
|
||||
if (response != null) {
|
||||
response.setContentType("application/json;charset=UTF-8");
|
||||
try {
|
||||
PrintWriter writer = response.getWriter();
|
||||
if (isOk) {
|
||||
writer.println(new JsonManager().getSuccessJsonResponse("" + content));
|
||||
} else {
|
||||
writer.println(new JsonManager().getErrorJsonResponse("" + content));
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
logger.error(ex.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Parameter> mapParameters(String publicLink, String annotations) {
|
||||
List<Parameter> parameters = new ArrayList<>();
|
||||
try {
|
||||
List<Parameter> inputParameters = super.getOperatorInputParameters();
|
||||
System.out.println("n. " + inputParameters.size());
|
||||
for (Parameter p : inputParameters) {
|
||||
switch (p.getTypology()) {
|
||||
case FILE:
|
||||
FileParameter fileName = new FileParameter();
|
||||
fileName.setName(p.getName());
|
||||
fileName.setValue(publicLink);
|
||||
parameters.add(fileName);
|
||||
System.out.println(fileName.toString());
|
||||
break;
|
||||
case LIST:
|
||||
ListParameter list = new ListParameter();
|
||||
list.setName(p.getName());
|
||||
list.setValue(annotations.replace(",", "|"));
|
||||
parameters.add(list);
|
||||
System.out.println(list.toString());
|
||||
break;
|
||||
case ENUM:
|
||||
// to be managed...
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
logger.error(ex.getLocalizedMessage());
|
||||
}
|
||||
return parameters;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* public static void main(String[] args) { String service =
|
||||
* "http://dataminer-prototypes.d4science.org/wps/"; String identifier = "";
|
||||
* identifier =
|
||||
* "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.ENGLISH_NAMED_ENTITY_RECOGNIZER";
|
||||
* // identifier = //
|
||||
* "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.NEWSTANBOLWRAPPER";
|
||||
* // identifier = //
|
||||
* "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.GENERIC_OPINION_MINING_ENGLISH";
|
||||
* String token = "df2cc5f5-63ee-48c1-b2a6-1210030c57b8-843339462"; String
|
||||
* pLink =
|
||||
* "http://data.d4science.org/RW9KZDJ0eU9ZZlRNWEhLYmtVa3ltL0Y1UWdhdmZvTlVHbWJQNStIS0N6Yz0";
|
||||
*
|
||||
* ArrayList<NlpParameter> params = new ArrayList<>(); NlpParameter p = new
|
||||
* NlpParameter(NlpParameter.ANNOTATION_LIST, "", "Person,Token", 0);
|
||||
* params.add(p);
|
||||
*
|
||||
* NlpNerRunner runner = new NlpNerRunner(service, identifier, token); //
|
||||
* try { // runner.run(pLink, service, identifier, params); // } catch
|
||||
* (NlpHubException e) { // e.printStackTrace(); // } }
|
||||
*/
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package org.gcube.nlphub.nlp;
|
||||
|
||||
public class NlpParameter {
|
||||
public static String ANNOTATION_LIST = "annotations";
|
||||
private String name, description;
|
||||
private Object value;
|
||||
private int objectType;
|
||||
|
||||
public NlpParameter(String name, String description, Object value, int objectType) {
|
||||
super();
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.value = value;
|
||||
this.objectType = objectType;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public Object getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public int getObjectType() {
|
||||
return objectType;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
log4j.rootLogger=DEBUG, A1
|
||||
log4j.appender.A1=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
|
||||
|
||||
# Print the date in ISO 8601 format
|
||||
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
|
||||
|
||||
# Print only messages of level TRACE or above in the package org.gcube
|
||||
log4j.logger.org.gcube=TRACE
|
||||
log4j.logger.org.gcube.application.framework.core.session=INFO
|
||||
log4j.logger.org.gcube.common.scope.impl.DefaultScopeProvider=ERROR
|
||||
log4j.logger.com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor=ERROR
|
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE xml>
|
||||
<configuration>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
|
||||
<logger name="org.gcube" level="INFO" />
|
||||
<logger name="org.gcube.vremanagement.smartexecutor" level="TRACE" />
|
||||
<logger name="org.gcube.dataharvest" level="TRACE" />
|
||||
|
||||
<root level="WARN">
|
||||
<appender-ref ref="STDOUT" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
|
||||
<display-name>NLPHub</display-name>
|
||||
<welcome-file-list>
|
||||
<welcome-file>index.html</welcome-file>
|
||||
<welcome-file>index.htm</welcome-file>
|
||||
<welcome-file>index.jsp</welcome-file>
|
||||
<welcome-file>default.html</welcome-file>
|
||||
<welcome-file>default.htm</welcome-file>
|
||||
<welcome-file>default.jsp</welcome-file>
|
||||
</welcome-file-list>
|
||||
<servlet>
|
||||
<servlet-name>NLPServlet</servlet-name>
|
||||
<servlet-class>org.gcube.nlphub.NLPHub</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>NLPServlet</servlet-name>
|
||||
<url-pattern>/nlphub-servlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet>
|
||||
<servlet-name>NLPUploader</servlet-name>
|
||||
<servlet-class>org.gcube.nlphub.NLPUploader</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>NLPUploader</servlet-name>
|
||||
<url-pattern>/nlphub-uploader-servlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet>
|
||||
<servlet-name>NLPMapper</servlet-name>
|
||||
<servlet-class>org.gcube.nlphub.NLPMapper</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>NLPMapper</servlet-name>
|
||||
<url-pattern>/nlphub-mapper-servlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
</web-app>
|
@ -0,0 +1,179 @@
|
||||
[type="checkbox"]+label {
|
||||
margin-right: 15px !important;
|
||||
}
|
||||
|
||||
.my-textarea {
|
||||
border: 1px solid #555;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 4px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 5px;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.string {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.number {
|
||||
color: darkorange;
|
||||
}
|
||||
|
||||
.boolean {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.null {
|
||||
color: magenta;
|
||||
}
|
||||
|
||||
.key {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.column {
|
||||
margin-left: 1px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.half-width {
|
||||
width: 48%;
|
||||
}
|
||||
|
||||
.margin-left-10px {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.margin-right-10px {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.clearfix::after {
|
||||
content: "";
|
||||
clear: both;
|
||||
display: table;
|
||||
}
|
||||
|
||||
.fixed-height {
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.margin-3 {
|
||||
margin: 2px;
|
||||
}
|
||||
|
||||
.text-align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.text-align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
float: left;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.align-left-33 {
|
||||
float: right;
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
.centered {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.full-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.vscrollable {
|
||||
height: 220px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.ajax-file-upload {
|
||||
float: left;
|
||||
margin: 10px;
|
||||
color: white;
|
||||
background-color: #4CAF50 !important;
|
||||
padding: 0.6rem;
|
||||
text-transform: uppercase;
|
||||
vertical-align: middle;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#execute-button {
|
||||
margin: 10px;
|
||||
color: white;
|
||||
/*background-color: #4CAF50 !important;*/
|
||||
padding: 0.6rem;
|
||||
text-transform: uppercase;
|
||||
vertical-align: middle;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ajax-file-upload-statusbar {
|
||||
height: 1.3em;
|
||||
width: 100% !important;
|
||||
/*display: none !important;*/
|
||||
}
|
||||
|
||||
.ajax-upload-dragdrop {
|
||||
float: right;
|
||||
border: solid 1px #dfdfdf;
|
||||
width: 200px !important;
|
||||
}
|
||||
|
||||
#file-info {
|
||||
float: right;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.ajax-file-upload-progress {
|
||||
height: 2em !important;
|
||||
}
|
||||
|
||||
.full-width-bar {
|
||||
width: 100%;
|
||||
border-bottom: solid 1px gray;
|
||||
}
|
||||
|
||||
.title-box {
|
||||
width: 69%;
|
||||
float: right;
|
||||
padding-left: 3em;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#logo-image {
|
||||
width: 200px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.ajax-file-upload-container {
|
||||
display: none !important;
|
||||
float: right;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
select {
|
||||
display: block;
|
||||
visibility: visible;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 180 KiB |
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 178 KiB |
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
@ -0,0 +1,454 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!-- input=http%3A%2F%2Fws1-clarind.esc.rzg.mpg.de%2Fdrop-off%2Fstorage%2F1513257926038.txt&lang=en&analysis=const-parsing -->
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<title>NLPHub v1.2</title>
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
|
||||
rel="stylesheet" />
|
||||
<!--Import materialize.css-->
|
||||
<link type="text/css" rel="stylesheet" href="css/materialize.min.css"
|
||||
media="screen,projection" />
|
||||
<link type="text/css" rel="stylesheet" href="css/custom.css" />
|
||||
<!-- jQuery library -->
|
||||
<script
|
||||
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="js/materialize.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery.simple.websocket.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery.uploadfile.min.js"></script>
|
||||
<!-- <script type="text/javascript" src="js/main.js"></script> -->
|
||||
<!-- scripting code -->
|
||||
<script type="text/javascript">
|
||||
var tableRawSize = 5;
|
||||
var annotations = [];
|
||||
var algorithms = [];
|
||||
var languages = [];
|
||||
var publicLink = null;
|
||||
var pageGreen = "#4CAF50";
|
||||
var pageGray = "#A0A0A0";
|
||||
|
||||
$("#execute-button").css("background-color", pageGray);
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
// Starting point: get the csv file with algorithm parameters and set the page with valid algs info.
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
$
|
||||
.ajax({
|
||||
url : "http://data.d4science.org/bnp4UDNyb21lSURkQXdDUnlSS0JkVWgzWk1KMUxWVGZHbWJQNStIS0N6Yz0",
|
||||
type : "GET",
|
||||
async : true,
|
||||
contentType : "text/plain; charset=utf-8",
|
||||
success : function(data, stato) {
|
||||
var lineTokens = manageCsvData(data);
|
||||
getAlgorithms(lineTokens);
|
||||
buildAnnotationsAndLanguages();
|
||||
resizeTable();
|
||||
resizeLogo();
|
||||
buildLanguageList();
|
||||
setEventListeners();
|
||||
$("#execute-button").css("background-color", pageGray);
|
||||
|
||||
$("#upload-button").uploadFile({
|
||||
url : "/nlphub/nlphub-uploader-servlet",
|
||||
fileName : "mytxtfile",
|
||||
maxFileCount : 100,
|
||||
multiple : false,
|
||||
maxFileSize : 1024 * 1000 * 6.14,
|
||||
showFileCounter : false,
|
||||
showCancel : true,
|
||||
dragDropStr : "<img class='img-prompt' src='img/upload.png' width='60px' height='60px' style='display:block; margin:auto; padding: 10px'>",
|
||||
extErrorStr : "Error. Text file only",
|
||||
sizeErrorStr : "Error. Max size: 6 Mb",
|
||||
onLoad : function(obj) {
|
||||
$("#file-info").remove();
|
||||
$("#fu-container").append("<div id=\"file-info\"></div>");
|
||||
},
|
||||
onSuccess : function(files, data, xhr) {
|
||||
console.log("files: " + files);
|
||||
$("#file-info").empty();
|
||||
$("#file-info").append("Uploaded: <span style=\"color:#4CAF50; letter-spacing: 1px; font-weight: bold;\">" + files + "</span>");
|
||||
publicLink = data.message;
|
||||
$("#execute-button").css("background-color", pageGreen);
|
||||
if(publicLink == null) {
|
||||
alert("Error uploading file.");
|
||||
}
|
||||
},
|
||||
onError : function(files, status,
|
||||
errMsg, pd) {
|
||||
alert(errMsg);
|
||||
}
|
||||
});
|
||||
},
|
||||
error : function(richiesta, stato, errori) {
|
||||
alert("Unexpected Error");
|
||||
}
|
||||
});
|
||||
|
||||
manageCsvData = function(data) {
|
||||
// first of all: split on the "newline" character in order to
|
||||
// get all lines.
|
||||
var lines = data.split("\n");
|
||||
var tokens = [], lineTokens = [];
|
||||
|
||||
// second: parse each line
|
||||
for (i in lines) {
|
||||
var line = ',' + lines[i];
|
||||
var tokenStart = -1;
|
||||
for (var j = 0; j < line.length; j++) {
|
||||
if (line.charAt(j) == '\"') {
|
||||
j = line.indexOf('\"', j + 1);
|
||||
if (j < 0)
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line.charAt(j) == ',') {
|
||||
if (tokenStart == -1) {
|
||||
tokenStart = j;
|
||||
} else {
|
||||
tokens[tokens.length] = line.substring(tokenStart + 1,
|
||||
j);
|
||||
tokenStart = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
// get the new token and push it in the array
|
||||
tokens[tokens.length] = line.substring(tokenStart + 1);
|
||||
lineTokens[lineTokens.length] = tokens;
|
||||
tokens = [];
|
||||
}
|
||||
|
||||
return lineTokens;
|
||||
}
|
||||
|
||||
getAlgorithms = function(lineTokens) {
|
||||
// build the list of supported algorithms
|
||||
for (i = 0; i < lineTokens.length; i++) {
|
||||
if ((i == 0) || (lineTokens[i].length != 8))
|
||||
continue; // skip the header
|
||||
if (lineTokens[i][7].trim().toUpperCase() == "OK") {
|
||||
var algName = lineTokens[i][0].trim();
|
||||
var algDescription = lineTokens[i][1].trim();
|
||||
var algId = lineTokens[i][2].trim();
|
||||
var annotationList = lineTokens[i][3].replace(/"/g, " ").trim();
|
||||
var language = lineTokens[i][4].replace(/"/g, " ").trim();
|
||||
|
||||
algorithms[algorithms.length] = {
|
||||
"name" : algName,
|
||||
"description" : algDescription,
|
||||
"id" : algId,
|
||||
"lang" : language,
|
||||
"annotations" : annotationList
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildAnnotationsAndLanguages = function() {
|
||||
// extract data about languages and annotations in order to populate the proper
|
||||
// controls in the page
|
||||
for (i in algorithms) {
|
||||
var annotationList = algorithms[i].annotations;
|
||||
var a = annotationList.split(/\s|,/);
|
||||
for (j in a) {
|
||||
a[j] = a[j].trim();
|
||||
if (a[j].length > 0) {
|
||||
var thereIs = false;
|
||||
for (k in annotations) {
|
||||
if (annotations[k].toUpperCase == a[j].toUpperCase()) {
|
||||
thereIs = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!thereIs)
|
||||
annotations[annotations.length] = a[j];
|
||||
}
|
||||
}
|
||||
|
||||
var languageList = algorithms[i].lang;
|
||||
var langs = languageList.split(/\s|,/);
|
||||
for (j in langs) {
|
||||
langs[j] = langs[j].trim();
|
||||
if (langs[j].length > 0) {
|
||||
var thereIs = false;
|
||||
for (k in languages) {
|
||||
if (languages[k].toUpperCase == langs[j].toUpperCase()) {
|
||||
thereIs = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!thereIs)
|
||||
languages[languages.length] = langs[j];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
setEventListeners = function() {
|
||||
$("#input-textarea").on("keyup", function() {
|
||||
if($("#input-textarea").val() == "")
|
||||
$("#execute-button").css("background-color", pageGray);
|
||||
else
|
||||
$("#execute-button").css("background-color", pageGreen);
|
||||
});
|
||||
|
||||
|
||||
$("#execute-button").click(function() {
|
||||
if((publicLink == null) && ($("#input-textarea").val() == "")) {
|
||||
alert("You must upload a file or paste some text in the text area before submit a request.");
|
||||
return;
|
||||
}
|
||||
|
||||
// if some text has been written in the text area, then a corresponding text file
|
||||
// must be written in the workspace and the public link is set.
|
||||
if($("#input-textarea").val().length > 0) {
|
||||
freeText = $("#input-textarea").val();
|
||||
$
|
||||
.ajax({
|
||||
url : "/nlphub/nlphub-uploader-servlet?freetext=" + encodeURI(freeText),
|
||||
type : "POST",
|
||||
async : true,
|
||||
contentType : "text/plain; charset=utf-8",
|
||||
success : function(data, stato) {
|
||||
publicLink = data.message;
|
||||
if(publicLink == null) {
|
||||
alert("Error uploading file.");
|
||||
}
|
||||
launchAlgorithm();
|
||||
},
|
||||
error : function(richiesta, stato, errori) {
|
||||
alert("Unexpected Error");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
else {
|
||||
launchAlgorithm();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
launchAlgorithm = function() {
|
||||
if(publicLink == null) {
|
||||
alert("No input text available for the service.");
|
||||
return;
|
||||
}
|
||||
var list = buildInputAnnotationList();
|
||||
var annList = "";
|
||||
for(i in list) {
|
||||
annList += list[i] + ",";
|
||||
}
|
||||
annList = annList.substring(0, annList.length-1);
|
||||
|
||||
var algList = "";
|
||||
for(j in algorithms) {
|
||||
algList += encodeURI(algorithms[j].id) + ",";
|
||||
}
|
||||
algList = algList.substring(0, algList.length-1);
|
||||
|
||||
|
||||
var parameters = "annotations=" + annList;
|
||||
parameters += "&lang=" + $("#language-select").val();
|
||||
parameters += "&plink=" + encodeURI(publicLink);
|
||||
parameters += "&algs=" + algList;
|
||||
|
||||
$
|
||||
.ajax({
|
||||
url : "/nlphub/nlphub-servlet?" + parameters,
|
||||
type : "POST",
|
||||
async : true,
|
||||
//contentType : "text/plain; charset=utf-8",
|
||||
success : function(data, stato) {
|
||||
if(typeof(data.response) != 'undefined')
|
||||
alert(data.message);
|
||||
else if (typeof(data.error) != 'undefined')
|
||||
alert(data.message);
|
||||
else
|
||||
alert("Unexpected response");
|
||||
},
|
||||
error : function(richiesta, stato, errori) {
|
||||
alert("Unexpected Error");
|
||||
}
|
||||
});
|
||||
|
||||
publicLink = null;
|
||||
}
|
||||
|
||||
resizeTable = function() {
|
||||
// resize the annotation table
|
||||
$("#annotations-table").empty();
|
||||
var rowId = "";
|
||||
var ratio = window.innerWidth / window.innerHeight;
|
||||
|
||||
if (ratio <= 0.35) {
|
||||
tableRawSize = 1;
|
||||
} else if ((ratio > 0.35) && (ratio <= 0.75)) {
|
||||
tableRawSize = 2;
|
||||
} else if ((ratio > 0.75) && (ratio <= 1)) {
|
||||
tableRawSize = 3;
|
||||
} else if ((ratio > 1) && (ratio <= 1.5)) {
|
||||
tableRawSize = 4;
|
||||
} else {
|
||||
tableRawSize = 5;
|
||||
}
|
||||
|
||||
for (var i = 0; i < annotations.length; i++) {
|
||||
if (i % tableRawSize == 0) {
|
||||
rowId = "row-" + i;
|
||||
$("#annotations-table").append("<tr id=\"" + rowId +"\"></tr>");
|
||||
}
|
||||
var annotationElement = "<input type=\"checkbox\" id=\"check-" + i + "\" value=\"" + annotations[i] + "\" checked=\"checked\"></input> <label for=\"check-" + i + "\">"
|
||||
+ annotations[i] + "</label>";
|
||||
$("#" + rowId).append("<td>" + annotationElement + "</td>");
|
||||
}
|
||||
}
|
||||
|
||||
resizeLogo = function() {
|
||||
if(window.innerWidth < 200)
|
||||
$("#logo-image").width(window.innerWidth-10);
|
||||
}
|
||||
|
||||
buildInputAnnotationList = function() {
|
||||
var list = [];
|
||||
for (var i = 0; i < annotations.length; i++) {
|
||||
if($("#check-" + i).is(":Checked"))
|
||||
list[list.length] = $("#check-" + i).val();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
// event handlers
|
||||
window.onresize = function(event) {
|
||||
resizeTable();
|
||||
resizeLogo();
|
||||
};
|
||||
|
||||
$(".ajax-file-upload-abort").on("DOMAttrModified", function (event) {
|
||||
$(".ajax-file-upload-abort").css("display", "none");
|
||||
if(event.attributeName == "display") { // which attribute you want to watch for changes
|
||||
$(".ajax-file-upload-abort").css("display", "none");
|
||||
}
|
||||
});
|
||||
|
||||
buildLanguageList = function() {
|
||||
// build the language selection input control
|
||||
for (i in languages) {
|
||||
var opt = "<option value=\"" + languages[i] + "\" selected=\"selected\">"
|
||||
+ languages[i] + "</option>";
|
||||
if (i > 1)
|
||||
opt = "<option value=\"" + languages[i] + "\">" + languages[i]
|
||||
+ "</option>";
|
||||
$("#language-select").append(opt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// $("#upload-button").click(function() {
|
||||
// $("#upload-input").click();
|
||||
// });
|
||||
|
||||
// $("#upload-input").change(
|
||||
// function() {
|
||||
// $("#upload-button")
|
||||
// .text(
|
||||
// $("#upload-input").val().substring(
|
||||
// $("#upload-input").val().lastIndexOf(
|
||||
// "\\") + 1));
|
||||
// });
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body style="padding: 0 15px;">
|
||||
|
||||
<div class="logo"><img id="logo-image" src="img/nlphub-logo-3.png"></div>
|
||||
<!-- <div class="title-box"><h3>Natural Language Processing</h3></div> -->
|
||||
|
||||
<!-- the "main-div" contains all tabs and contents -->
|
||||
<div class="main-div">
|
||||
<!-- tabs div: each tab must refer a page div -->
|
||||
<div class="col s12">
|
||||
<ul class="tabs">
|
||||
<li class="tab col s3"><a href="#ner">NER</a></li>
|
||||
<li class="tab col s3"><a href="#other">other</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- "ner" div: contains the name entity recognizer interface -->
|
||||
<div id="ner">
|
||||
<p class="flow-text">Name Entity Recognition</p>
|
||||
<fieldset>
|
||||
<legend>Language selection</legend>
|
||||
<div class="row">
|
||||
<div class="clearfix">
|
||||
<div class="column half-width">
|
||||
<p class="margin-3 text-align-right">Select the desired
|
||||
language:</p>
|
||||
</div>
|
||||
<div class="column half-width">
|
||||
<select id="language-select" class="margin-3 align-left">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>Input text</legend>
|
||||
<div class="row">
|
||||
<div class="clearfix">
|
||||
<div class="column margin-right-10px">
|
||||
<p>Use the button to upload a text file or drag and drop a file in the upload area; or paste a text in
|
||||
the text area.</p>
|
||||
</div>
|
||||
<div class="column margin-left-10px">
|
||||
<div class="centered full-width" id="fu-container">
|
||||
<!-- <div class="waves-effect waves-light btn green darken-1"
|
||||
id="upload-button">Upload text file</div>-->
|
||||
<div class="waves-effect waves-light darken-1"
|
||||
id="upload-button">Upload text file</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field col s12">
|
||||
<textarea id="input-textarea" class="my-textarea" rows="8"
|
||||
placeholder="paste your text here"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend>Annotations (mark annotation you want to use)</legend>
|
||||
<div class="vscrollable">
|
||||
<table id="annotations-table">
|
||||
</table>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<div class="progress" id="progressBar" style="visibility: hidden;">
|
||||
<div class="indeterminate"></div>
|
||||
</div>
|
||||
<div style="text-align: center; padding: 5px;">
|
||||
<!-- <a class="waves-effect waves-light btn green darken-1" -->
|
||||
<a id="execute-button">Execute</a>
|
||||
</div>
|
||||
<div id="result-container" style="margin-top: -20px;">
|
||||
<div id="downloadLink" style="display: inline;"></div>
|
||||
<pre id="result">
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end "#ner" -->
|
||||
|
||||
<div id="#other"></div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- end "#main-div" -->
|
||||
</body>
|
||||
</html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,156 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
// $("#upload-button").uploadFile({
|
||||
// url : "uploader.php",
|
||||
// fileName : "myfile",
|
||||
// maxFileCount : 100,
|
||||
// multiple : false,
|
||||
// maxFileSize : 1024 * 1000 * 1,
|
||||
// showFileCounter : false,
|
||||
// showCancel : true,
|
||||
// allowedTypes : "txt",
|
||||
// //dragDropStr : "<img class='img-prompt' src='images/upload.png' width='60px' height='60px' style='display:block; margin:auto;'>",
|
||||
// doneStr : "Done",
|
||||
// abortStr : "End",
|
||||
// cancelStr : "Cancel",
|
||||
// extErrorStr : "Only text file (.txt), please",
|
||||
// sizeErrorStr : "Max size: 1 Mb",
|
||||
// onLoad : function(obj) {
|
||||
// //resizeTutor();
|
||||
// },
|
||||
// onSuccess : function(files, data, xhr) {
|
||||
// alert("Success");
|
||||
// /*$(".ajax-file-upload-statusbar")
|
||||
// .hide();
|
||||
// $(".obfuscating").css('opacity', '0.6');
|
||||
// $(".obfuscating").show();
|
||||
// $("#uploadedimg").attr("src", "images/" + uName + "/" + files[0]);
|
||||
// source = $("#uploadedimg").attr("src");
|
||||
// window.setTimeout(function(){ sizePopupUpload(); $("#popup-1-section").show();}, 500);*/
|
||||
// },
|
||||
// onError : function(files, status,
|
||||
// errMsg, pd) {
|
||||
// alert(errMsg);
|
||||
// }
|
||||
// });
|
||||
|
||||
|
||||
$( "#execute-button" ).click(function() {
|
||||
var firstnameBox = $.trim( $('#input-textarea').val() )
|
||||
if (firstnameBox == "") {
|
||||
$('#input-textarea').css("border-color","red");
|
||||
$('#input-textarea').attr("placeholder", "Paste your text here!");
|
||||
}
|
||||
else {
|
||||
$('#input-textarea').css("border-color","#555");
|
||||
doStartComputation();
|
||||
}
|
||||
});
|
||||
|
||||
doCallback = function(uri) {
|
||||
$.ajax({
|
||||
url : "nlphub-servlet",
|
||||
type : 'GET',
|
||||
datatype : 'json',
|
||||
data : {
|
||||
uri : uri
|
||||
},
|
||||
success : function(data) {
|
||||
var obj = eval("(" + data + ")");
|
||||
var str = JSON.stringify(obj, undefined, 4);
|
||||
$('#result').html(syntaxHighlight(str));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
doStartComputation = function() {
|
||||
var options = "default";
|
||||
options = $("input[type=checkbox]:checked").map(
|
||||
function () {return this.value;}).get().join("|");
|
||||
$('#result').html("");
|
||||
//var token2Send = getUrlParameter("token") == null ? "" : getUrlParameter("token");
|
||||
var tokenParam = getUrlParameter("token");
|
||||
var token2Send = ((tokenParam == null) || (tokenParam.length == 0)) ? "18fed2d9-030b-4c77-93af-af2015d945f7-843339462" : getUrlParameter("token");
|
||||
|
||||
webSocket.send({
|
||||
'action': 'start',
|
||||
'text' : $("#input-textarea").val(),
|
||||
'options' : options,
|
||||
'token' : token2Send
|
||||
}).done(function() {
|
||||
showProgressBar(true);
|
||||
enableCommands(false);
|
||||
}).fail(function(e) {
|
||||
console.log("failed");
|
||||
});
|
||||
}
|
||||
|
||||
doHandleResponse = function(message) {
|
||||
if (message.response == "error") {
|
||||
$('#result').html("<span style='color: red;'>"+message.value+"</span>");
|
||||
enableCommands(true);
|
||||
showProgressBar(false);
|
||||
}
|
||||
else if (message.response == "computing") {
|
||||
showProgressBar(true);
|
||||
enableCommands(false);
|
||||
}
|
||||
else if (message.response == "computed") {
|
||||
showProgressBar(false);
|
||||
enableCommands(true);
|
||||
console.log("message="+message.value);
|
||||
if (message.value.startsWith("http")) {
|
||||
$('#downloadLink').html("Result: <a class=\"waves-effect waves-light btn red darken-1\" href=\""+message.value+"\">Download</a> " +
|
||||
"<a class=\"waves-effect waves-light btn blue darken-1\" href=\"Javascript:doCallback(encodeURI('"+message.value.trim()+"'));\">View</a>");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function showProgressBar(show) {
|
||||
var display = (show) ? "visible" : "hidden";
|
||||
$('#progressBar').css('visibility', display);
|
||||
}
|
||||
|
||||
function enableCommands(enable) {
|
||||
if (enable) {
|
||||
$('#execute-button').removeAttr("disabled");
|
||||
$('#execute-button').text('Execute');
|
||||
$('input[type=checkbox]').removeAttr("disabled");
|
||||
} else {
|
||||
$('#execute-button').text('Computing ...');
|
||||
$('input[type=checkbox]').attr('disabled', 'true');
|
||||
$('#execute-button').attr('disabled', 'disabled');
|
||||
$('#downloadLink').html("");
|
||||
}
|
||||
}
|
||||
|
||||
function syntaxHighlight(json) {
|
||||
if (typeof json != 'string') {
|
||||
json = JSON.stringify(json, undefined, 1);
|
||||
}
|
||||
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
||||
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
|
||||
var cls = 'number';
|
||||
if (/^"/.test(match)) {
|
||||
if (/:$/.test(match)) {
|
||||
cls = 'key';
|
||||
} else {
|
||||
cls = 'string';
|
||||
}
|
||||
} else if (/true|false/.test(match)) {
|
||||
cls = 'boolean';
|
||||
} else if (/null/.test(match)) {
|
||||
cls = 'null';
|
||||
}
|
||||
return '<span class="' + cls + '">' + match + '</span>';
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function getUrlParameter(name) {
|
||||
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
|
||||
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
|
||||
var results = regex.exec(location.search);
|
||||
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
|
||||
};
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue