* import properties from layoutparser

* add logging-commons
This commit is contained in:
Kilian Schuettler 2023-07-31 16:45:09 +02:00
parent e744c488ef
commit 33ec43e15e
2 changed files with 20 additions and 78 deletions

View File

@ -11,18 +11,17 @@ plugins {
description = "redaction-service-server-v1"
extra["layoutparserVersion"] = "0.8.0"
dependencies {
implementation(project(":redaction-service-api-v1"))
implementation("com.iqser.red.service:persistence-service-internal-api-v1:RED-6725")
implementation("com.knecon.fforesight:layoutparser-service-internal-api:0.16.0")
implementation("com.iqser.red.service:persistence-service-internal-api-v1:RED-6725-3")
implementation("com.knecon.fforesight:layoutparser-service-internal-api:0.17.0")
implementation("com.iqser.red.commons:spring-commons:2.1.0") { exclude(group = "org.springframework.boot", module = "spring-boot-starter-log4j2") }
implementation("com.iqser.red.commons:metric-commons:2.1.0") { exclude(group = "org.springframework.boot", module = "spring-boot-starter-log4j2") }
implementation("com.iqser.red.commons:dictionary-merge-commons:1.3.0")
implementation("com.iqser.red.commons:storage-commons:2.1.0")
implementation("com.iqser.red.commons:logging-commons:2.3.0")
implementation("com.knecon.fforesight:tenant-commons:0.10.0")
implementation("org.springframework.boot:spring-boot-starter-aop:3.0.4")
@ -37,13 +36,14 @@ dependencies {
implementation("org.locationtech.jts:jts-core:1.19.0")
implementation("org.springframework.cloud:spring-cloud-starter-openfeign:4.0.1")
implementation("org.springframework.boot:spring-boot-starter-amqp:3.0.4")
testImplementation("org.apache.pdfbox:pdfbox:3.0.0-alpha2")
testImplementation("org.apache.pdfbox:pdfbox-tools:3.0.0-alpha2")
implementation("org.springframework.cloud:spring-cloud-starter-openfeign:4.0.1")
implementation("org.springframework.boot:spring-boot-starter-amqp:3.0.4")
testImplementation("org.springframework.boot:spring-boot-starter-test:3.0.4")
testImplementation("com.knecon.fforesight:layoutparser-service-processor:0.16.0") { exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1") }
testImplementation("com.knecon.fforesight:layoutparser-service-processor:0.17.0") { exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1") }
}
tasks.test {

View File

@ -1,109 +1,51 @@
package com.iqser.red.service.redaction.v1.server.document.data.mapper;
import static java.lang.String.format;
import java.awt.geom.Rectangle2D;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image;
import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell;
import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType;
import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table;
import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell;
import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructure;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import lombok.experimental.UtilityClass;
@UtilityClass
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class PropertiesMapper {
String imageType = "imageType";
private final String transparency = "transparency";
private final String position = "position";
String id = "id";
String row = "row";
String col = "col";
String header = "header";
String bBox = "bBox";
String numberOfRows = "numberOfRows";
String numberOfCols = "numberOfCols";
public Map<String, String> buildImageProperties(Image image) {
Map<String, String> properties = new HashMap<>();
properties.put(imageType, image.getImageType().toString());
properties.put(transparency, String.valueOf(image.isTransparent()));
properties.put(position, toString(image.getPosition()));
properties.put(id, image.getId());
return properties;
}
private String toString(Rectangle2D rectangle2D) {
return format("%f,%f,%f,%f", rectangle2D.getX(), rectangle2D.getY(), rectangle2D.getWidth(), rectangle2D.getHeight());
}
public Map<String, String> buildTableCellProperties(TableCell tableCell) {
Map<String, String> properties = new HashMap<>();
properties.put(row, String.valueOf(tableCell.getRow()));
properties.put(col, String.valueOf(tableCell.getCol()));
properties.put(header, String.valueOf(tableCell.isHeader()));
if (tableCell.getPages().size() > 1 || tableCell.getBBox().keySet().size() > 1) {
throw new IllegalArgumentException("TableCell can only occur on a single page!");
}
String bBoxString = toString(tableCell.getBBox().get(tableCell.getPages().stream().findFirst().get()));
properties.put(bBox, bBoxString);
return properties;
}
public Map<String, String> buildTableProperties(Table table) {
Map<String, String> properties = new HashMap<>();
properties.put(numberOfRows, String.valueOf(table.getNumberOfRows()));
properties.put(numberOfCols, String.valueOf(table.getNumberOfCols()));
return properties;
}
public void parseImageProperties(Map<String, String> properties, Image.ImageBuilder builder) {
builder.imageType(ImageType.fromString(properties.get(imageType)));
builder.transparent(Boolean.parseBoolean(properties.get(transparency)));
builder.position(parseRectangle2D(properties.get(position)));
builder.id(properties.get(id));
builder.imageType(ImageType.fromString(properties.get(DocumentStructure.ImageProperties.IMAGE_TYPE)));
builder.transparent(Boolean.parseBoolean(properties.get(DocumentStructure.ImageProperties.TRANSPARENT)));
builder.position(parseRectangle2D(properties.get(DocumentStructure.ImageProperties.POSITION)));
builder.id(properties.get(DocumentStructure.ImageProperties.ID));
}
public void parseTableCellProperties(Map<String, String> properties, TableCell.TableCellBuilder builder) {
builder.row(Integer.parseInt(properties.get(row)));
builder.col(Integer.parseInt(properties.get(col)));
builder.header(Boolean.parseBoolean(properties.get(header)));
builder.bBox(parseRectangle2D(properties.get(bBox)));
builder.row(Integer.parseInt(properties.get(DocumentStructure.TableCellProperties.ROW)));
builder.col(Integer.parseInt(properties.get(DocumentStructure.TableCellProperties.COL)));
builder.header(Boolean.parseBoolean(properties.get(DocumentStructure.TableCellProperties.HEADER)));
builder.bBox(parseRectangle2D(properties.get(DocumentStructure.TableCellProperties.B_BOX)));
}
public void parseTableProperties(Map<String, String> properties, Table.TableBuilder builder) {
builder.numberOfRows(Integer.parseInt(properties.get(numberOfRows)));
builder.numberOfCols(Integer.parseInt(properties.get(numberOfCols)));
builder.numberOfRows(Integer.parseInt(properties.get(DocumentStructure.TableProperties.NUMBER_OF_ROWS)));
builder.numberOfCols(Integer.parseInt(properties.get(DocumentStructure.TableProperties.NUMBER_OF_COLS)));
}
private Rectangle2D parseRectangle2D(String bBox) {
List<Float> floats = Arrays.stream(bBox.split(",")).map(Float::parseFloat).toList();
List<Float> floats = Arrays.stream(bBox.split(DocumentStructure.RECTANGLE_DELIMITER)).map(Float::parseFloat).toList();
return new Rectangle2D.Float(floats.get(0), floats.get(1), floats.get(2), floats.get(3));
}