Java¶
Dependencies¶
In order to call our REST API, one needs a JSON parser and a HTTP client. In this example, we will use Jackson and Apache HttpClient. Below we show dependency declaration for Maven.
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.7</version>
</dependency>
</dependencies>
Example¶
The examples below show how to call the General API from Java. Expected inputs and outputs are described in G3 API Reference.
First, you create a very simple API client.
import java.util.List;
import java.util.Map;
import org.apache.commons.codec.Charsets;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
public class GeneeaApi {
private static final String USER_KEY = "<your user key>";
private static final String URL = "https://api.geneea.com/v3/analysis";
private static final CloseableHttpClient CLIENT = HttpClients.createDefault();
private static final ObjectMapper MAPPER = new ObjectMapper();
public static String call(String text, String... analyses) throws Exception {
// prepare JSON request body
byte[] jsonBody = MAPPER.writeValueAsBytes(
Map.of("text", text, "analyses", List.of(analyses))
);
// prepare HTTP request
HttpPost httpPost = new HttpPost(URL);
httpPost.addHeader("Authorization", "user_key " + USER_KEY);
httpPost.setEntity(new ByteArrayEntity(jsonBody, ContentType.APPLICATION_JSON));
// perform the HTTP request
try (CloseableHttpResponse response = CLIENT.execute(httpPost)) {
return EntityUtils.toString(response.getEntity(), Charsets.UTF_8);
}
}
}
Then you can use it as follows.
String result = GeneeaApi.call("The pizza in London was great!");
System.out.println(result);
produces the following results (see the Response reference page for explanation):
{
'language': {'detected': 'en'},
'entities': [{'id': 'E0', 'gkbId': 'hash_dc386592', 'stdForm': 'London', 'type': 'location'}],
'tags': [
{'id': 'T0', 'stdForm': 'London', 'type': 'ENTITIES', 'relevance': 1.0},
{'id': 'T1', 'stdForm': 'pizza', 'type': 'KEYWORDS', 'relevance': 0.462},
{'id': 'T2', 'stdForm': 'great', 'type': 'KEYWORDS', 'relevance': 0.284}
],
'relations': [
{
'id': 'R0',
'name': 'great',
'textRepr': 'great(pizza)',
'type': 'ATTR',
'args': [{'type': 'SUBJECT', 'name': 'pizza'}],
'feats': {'negated': 'false', 'modality': ''}
}
],
'docSentiment': {'mean': 0.6, 'label': 'positive', 'positive': 0.6, 'negative': 0.0},
'usedChars': 100
}
You can restrict the type of analyses. For example, requesting only entities
will produce the following simpler result:
String result = GeneeaApi.call("The pizza in London was great!", "entities");
System.out.println(result);
{'language': {'detected': 'en'}, 'entities': [{'id': 'E0', 'gkbId': 'hash_dc386592', 'stdForm': 'London', 'type': 'location'}], 'usedChars': 100}
For using the results in a code, they should be deserialized from JSON into an appropriate objects.
String result = GeneeaApi.call("The pizza in London was great!", "sentiment");
Map resObj = new ObjectMapper().readValue(result, Map.class);
Map sentiment = (Map) resObj.get("docSentiment");
System.out.println(sentiment.get("label"));
positive