This SDK provides a Java wrapper around the Zuva DocAI API.
- Make an account at zuva.ai
- In the Dashboard, navigate to DocAI and select a region
- Click Create Token and save your token somewhere safe (you will not be able to view it again)
Start by instantiating a DocAIApiClient
with the url of the Zuva region you are using and your token:
DocAIApiClient client = new DocAIApiClient(url, token);
Submit your file to Zuva:
File file = File.submitFile(client, Paths.get(fileName));
Obtain field IDs of the fields you are interested in from the field library, or from the GET fields endpoint, and submit a field extraction request:
String[] fieldIds = new String[]{
"668ee3b5-e15a-439f-9475-05a21755a5c1",
"f743f363-1d8b-435b-8812-204a6d883834",
"4d34c0ac-a3d4-4172-92d0-5fad8b3860a7"
};
ExtractionRequest extractionRequest = ExtractionRequest.createRequest(client, file, fieldIds);
DocAI field extraction works asynchronously: you will need to poll the status of the request until it completes.
long tStart = Instant.now().toEpochMilli();
System.out.print("Wait for processing");
while (Instant.now().toEpochMilli() - tStart < 300000) {
String status = extractionRequest.getStatus();
System.out.print(".");
if (status.equals("complete") || status.equals("failed")) {
System.out.println(status);
break;
}
Thread.sleep(1000);
}
If the status is complete
, you can now retrieve the results, which are grouped by field. Note
that there may be multiple results for any particular field, so a nested for
loop is required to walk
the full set of results.
if (status.equals("complete")) {
ExtractionResults[] extractions = extractionRequest.getResults();
for (ExtractionResults ex : extractions) {
FieldMetadata fm = (new Field(client, ex.fieldId)).getFieldMetadata();
System.out.println(String.format("%s:", fm.name));
for (ExtractionData ed : ex.extractions) {
System.out.println("> " + ed.text);
}
}
}
A command line demo is provided in the examples folder. The demo exercises the document analysis workflow, including uploading a document, determining its document type and language, extracting text fields and fetching the results of OCR. The example expect certain environment variables to be set:
DOCAI_URL
: the URL of the Zuva environment to connect toDOCAI_TOKEN
: your token for the Zuva environmentZUVA_DEMO_DOC
: the path to the demo document to analyze (defaults to "CANADAGOOS-F1Securiti-2152017.PDF" in the current working directory)
The general DocAIException
class has two subclasses:
DocAIApiException
captures unexpected status codes (4xx, 5xx) returned from the API request and includes the status code and response from the serverDocAIClientException
captures all other errors and always includes the originalcause
(e.g.IOException
,JsonProcessingException
etc.)
The client currently uses OkHttp, which is compatible with Java 8+. This dependency is
isolated to ai.zuva.api
, which can be rewritten to use your http library of choice.