use of org.opensextant.extraction.TextMatch in project Xponents by OpenSextant.
the class XlayerClient method process.
/**
*
* @param text
* @return
* @throws IOException
* @throws JSONException
*/
public List<TextMatch> process(String docid, String text) throws IOException, JSONException {
ClientResource client = new ClientResource(serviceContext, serviceURI);
org.json.JSONObject content = new JSONObject();
content.put("text", text);
content.put("docid", docid);
content.put("features", "places,coordinates,countries,persons,orgs,reverse-geocode");
/* Coordinates mainly are XY locations; Reverse Geocode them to find what country the location resides */
StringWriter data = new StringWriter();
try {
Representation repr = new JsonRepresentation(content.toString());
repr.setCharacterSet(CharacterSet.UTF_8);
//log.debug("CLIENT {} {}", serviceAddress, client);
// Process and read response fully.
Representation response = client.post(repr, MediaType.APPLICATION_JSON);
response.write(data);
response.exhaust();
response.release();
JSONObject json = new JSONObject(data.toString());
log.debug("POST: response {}", json.toString(2));
JSONObject meta = json.getJSONObject("response");
JSONArray annots = json.getJSONArray("annotations");
List<TextMatch> matches = new ArrayList<TextMatch>();
for (int x = 0; x < annots.length(); ++x) {
Object m = annots.get(x);
matches.add(Transforms.parseAnnotation(m));
}
return matches;
} catch (ResourceException restErr) {
if (restErr.getCause() instanceof IOException) {
throw (IOException) restErr.getCause();
} else {
throw restErr;
}
} catch (java.net.SocketException err) {
// This never happens. Restlet wraps everything.
throw err;
} finally {
client.release();
}
}
Aggregations