Skip to content

Commit cfbd000

Browse files
committed
add Split classes
1 parent 0975f89 commit cfbd000

6 files changed

Lines changed: 163 additions & 2 deletions

File tree

src/main/java/com/mindee/v2/product/ocr/OcrResult.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public final class OcrResult {
2828
public String toString() {
2929
StringJoiner joiner = new StringJoiner("\n");
3030
joiner.add("Pages\n======");
31-
for (OcrPage page : pages) {
32-
joiner.add(page.toString());
31+
for (OcrPage item : pages) {
32+
joiner.add(item.toString());
3333
}
3434
return joiner.toString();
3535
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.mindee.v2.product.split;
2+
3+
import com.mindee.v2.parsing.BaseInference;
4+
5+
/**
6+
* The inference result for a split utility request.
7+
*/
8+
public class SplitInference extends BaseInference<SplitResult> {
9+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.mindee.v2.product.split;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import java.util.ArrayList;
6+
import lombok.AllArgsConstructor;
7+
import lombok.EqualsAndHashCode;
8+
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
10+
11+
/**
12+
* A single document as identified when splitting a multi-document source file.
13+
*/
14+
@Getter
15+
@EqualsAndHashCode
16+
@JsonIgnoreProperties(ignoreUnknown = true)
17+
@AllArgsConstructor
18+
@NoArgsConstructor
19+
public class SplitRange {
20+
/**
21+
* 0-based page indexes, where the first integer indicates the start page and the second integer
22+
* indicates the end page.
23+
*/
24+
@JsonProperty("page_range")
25+
public ArrayList<Integer> pageRange;
26+
27+
/**
28+
* The document type, as identified on given classification values.
29+
*/
30+
@JsonProperty("document_type")
31+
public String documentType;
32+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.mindee.v2.product.split;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import com.mindee.parsing.v2.CommonResponse;
6+
import lombok.Getter;
7+
8+
/**
9+
* Response for a crop utility inference.
10+
*/
11+
@Getter
12+
@JsonIgnoreProperties(ignoreUnknown = true)
13+
public class SplitResponse extends CommonResponse {
14+
15+
/**
16+
* The inference result for a split utility request.
17+
*/
18+
@JsonProperty("inference")
19+
private SplitInference inference;
20+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.mindee.v2.product.split;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import java.util.ArrayList;
6+
import java.util.StringJoiner;
7+
import lombok.AllArgsConstructor;
8+
import lombok.EqualsAndHashCode;
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
12+
/**
13+
* Result of the document splitter inference.
14+
*/
15+
@Getter
16+
@EqualsAndHashCode
17+
@JsonIgnoreProperties(ignoreUnknown = true)
18+
@AllArgsConstructor
19+
@NoArgsConstructor
20+
public final class SplitResult {
21+
/**
22+
* List of documents identified within a multi-document source file.
23+
*/
24+
@JsonProperty("splits")
25+
private ArrayList<SplitRange> splits;
26+
27+
@Override
28+
public String toString() {
29+
StringJoiner joiner = new StringJoiner("\n");
30+
joiner.add("Splits\n======");
31+
for (SplitRange item : splits) {
32+
joiner.add(item.toString());
33+
}
34+
return joiner.toString();
35+
}
36+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.mindee.v2.product;
2+
3+
import static com.mindee.TestingUtilities.getV2ResourcePath;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertNotNull;
6+
7+
import com.mindee.input.LocalResponse;
8+
import com.mindee.v2.product.split.SplitRange;
9+
import com.mindee.v2.product.split.SplitResponse;
10+
import java.io.IOException;
11+
import java.util.ArrayList;
12+
import org.junit.jupiter.api.DisplayName;
13+
import org.junit.jupiter.api.Nested;
14+
import org.junit.jupiter.api.Test;
15+
16+
@DisplayName("MindeeV2 - Split Model Tests")
17+
public class SplitTest {
18+
private SplitResponse loadResponse(String filePath) throws IOException {
19+
LocalResponse localResponse = new LocalResponse(getV2ResourcePath(filePath));
20+
return localResponse.deserializeResponse(SplitResponse.class);
21+
}
22+
23+
@Nested
24+
@DisplayName("Result with single value")
25+
class SinglePredictionTest {
26+
@Test
27+
@DisplayName("all properties must be valid")
28+
void mustHaveValidProperties() throws IOException {
29+
SplitResponse response = loadResponse("products/split/split_single.json");
30+
assertNotNull(response.getInference());
31+
32+
ArrayList<SplitRange> splits = response.getInference().getResult().getSplits();
33+
assertEquals(1, splits.size());
34+
assertEquals("receipt", splits.get(0).getDocumentType());
35+
assertEquals(0, splits.get(0).getPageRange().get(0));
36+
}
37+
}
38+
39+
@Nested
40+
@DisplayName("Result with multiple values")
41+
class MultiPredictionTest {
42+
@Test
43+
@DisplayName("all properties must be valid")
44+
void mustHaveValidProperties() throws IOException {
45+
SplitResponse response = loadResponse("products/split/split_multiple.json");
46+
assertNotNull(response.getInference());
47+
48+
ArrayList<SplitRange> splits = response.getInference().getResult().getSplits();
49+
assertEquals(3, splits.size());
50+
51+
SplitRange split1 = splits.get(0);
52+
assertEquals("invoice", split1.getDocumentType());
53+
assertEquals(0, split1.getPageRange().get(0));
54+
55+
SplitRange split2 = splits.get(1);
56+
assertEquals("invoice", split2.getDocumentType());
57+
assertEquals(1, split2.getPageRange().get(0));
58+
59+
SplitRange split3 = splits.get(2);
60+
assertEquals("invoice", split3.getDocumentType());
61+
assertEquals(4, split3.getPageRange().get(0));
62+
}
63+
}
64+
}

0 commit comments

Comments
 (0)