diff options
| -rw-r--r-- | pom.xml | 84 | ||||
| -rw-r--r-- | src/main/java/eu/mulk/aendggner/AendGgner.java | 53 | ||||
| -rw-r--r-- | src/main/java/module-info.java | 6 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/logging.properties | 17 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/tika-config.xml | 32 |
5 files changed, 175 insertions, 17 deletions
@@ -1,6 +1,8 @@ <?xml version="1.0"?> -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +<project + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> @@ -30,13 +32,19 @@ <basic-annotations.version>0.2.0</basic-annotations.version> <findbugs-jsr305.version>3.0.2</findbugs-jsr305.version> <google.java.format.version>1.8</google.java.format.version> - <itext7.version>7.1.13</itext7.version> <kotlin-annotations.version>1.4.10</kotlin-annotations.version> <lanterna.version>3.0.4</lanterna.version> <picocli.version>4.3.2</picocli.version> <pdfocr.version>1.0.2</pdfocr.version> <term4j.version>0.4.0</term4j.version> - <tika.version>1.24.1</tika.version> + <tess4j.version>4.5.1</tess4j.version> + <tika.version>1.25</tika.version> + <jbig2-imageio.version>3.0.3</jbig2-imageio.version> + <jai-imageio-core.version>1.4.0</jai-imageio-core.version> + <jai-imageio-jpeg2000.version>1.3.0</jai-imageio-jpeg2000.version> + <sqlite-jdbc.version>3.30.1</sqlite-jdbc.version> + <jboss-logging.version>3.4.1.Final</jboss-logging.version> + <slf4j.version>1.7.30</slf4j.version> </properties> <dependencies> @@ -68,6 +76,13 @@ <version>${picocli.version}</version> </dependency> + <!-- Logging --> + <dependency> + <groupId>org.jboss.logging</groupId> + <artifactId>jboss-logging</artifactId> + <version>${jboss-logging.version}</version> + </dependency> + <!-- Document reading --> <dependency> <groupId>org.apache.tika</groupId> @@ -80,9 +95,54 @@ <version>${tika.version}</version> </dependency> <dependency> + <groupId>org.apache.tika</groupId> + <artifactId>tika-parsers</artifactId> + <version>${tika.version}</version> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>jcl-over-slf4j</artifactId> + </exclusion> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>jul-to-slf4j</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.pdfbox</groupId> + <artifactId>jbig2-imageio</artifactId> + <version>${jbig2-imageio.version}</version> + </dependency> + <dependency> + <groupId>com.github.jai-imageio</groupId> + <artifactId>jai-imageio-core</artifactId> + <version>${jai-imageio-core.version}</version> + </dependency> + <dependency> + <groupId>com.github.jai-imageio</groupId> + <artifactId>jai-imageio-jpeg2000</artifactId> + <version>${jai-imageio-jpeg2000.version}</version> + </dependency> + <dependency> + <groupId>org.xerial</groupId> + <artifactId>sqlite-jdbc</artifactId> + <version>${sqlite-jdbc.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-jdk14</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>log4j-over-slf4j</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> - <version>4.5.1</version> + <version>${tess4j.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> @@ -92,6 +152,14 @@ <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> </exclusion> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>jul-to-slf4j</artifactId> + </exclusion> + <exclusion> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </exclusion> </exclusions> </dependency> @@ -111,6 +179,12 @@ <build> + <resources> + <resource> + <directory>src/main/resources</directory> + </resource> + </resources> + <pluginManagement> <plugins> diff --git a/src/main/java/eu/mulk/aendggner/AendGgner.java b/src/main/java/eu/mulk/aendggner/AendGgner.java index e510efb..c4efd45 100644 --- a/src/main/java/eu/mulk/aendggner/AendGgner.java +++ b/src/main/java/eu/mulk/aendggner/AendGgner.java @@ -1,13 +1,22 @@ package eu.mulk.aendggner; +import java.io.BufferedReader; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.concurrent.Callable; +import java.util.logging.LogManager; import org.apache.tika.config.TikaConfig; import org.apache.tika.exception.TikaException; import org.apache.tika.io.TikaInputStream; import org.apache.tika.metadata.Metadata; +import org.apache.tika.parser.AutoDetectParser; +import org.apache.tika.parser.ParseContext; +import org.apache.tika.parser.Parser; +import org.apache.tika.parser.ParsingReader; +import org.jboss.logging.Logger; +import org.xml.sax.SAXException; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; @@ -19,6 +28,8 @@ import picocli.CommandLine.Parameters; description = "Displays German amendment acts in a user-friendly, consolidated way.") public class AendGgner implements Callable<Integer> { + private static final Logger log = Logger.getLogger(AendGgner.class); + @Parameters(index = "0", description = "The base text to modify.") private Path baseFile; @@ -31,19 +42,49 @@ public class AendGgner implements Callable<Integer> { } @Override - public final Integer call() throws TikaException, IOException { - var tika = new TikaConfig(); + public final Integer call() throws TikaException, IOException, SAXException { + setupLogging(); + + log.debugf("Logging configured."); + + TikaConfig tika; + try (var configResource = + this.getClass().getResourceAsStream("/eu/mulk/aendggner/tika-config.xml")) { + tika = new TikaConfig(configResource); + } for (var file : patches) { var metadata = new Metadata(); - metadata.set(Metadata.RESOURCE_NAME_KEY, file.toString()); + metadata.set(Metadata.RESOURCE_NAME_KEY, file.getFileName().toString()); + try (var is = TikaInputStream.get(file)) { - var mimetype = tika.getDetector().detect( - TikaInputStream.get(file), metadata); - System.out.printf("File %s is %s.\n", file, mimetype); + var mimetype = tika.getDetector().detect(TikaInputStream.get(file), metadata); + log.infof("File %s is %s.", file, mimetype); + } + + var parser = new AutoDetectParser(tika); + try (var in = Files.newInputStream(file); + var reader = + new BufferedReader( + new ParsingReader(parser, in, metadata, makeParseContext(parser)))) { + log.infof("%s: %d lines of text.", file, reader.lines().count()); + // reader.lines().forEachOrdered(x -> log.infof("%s: %s", file, x)); } } return 0; } + + private static ParseContext makeParseContext(Parser parser) { + var parseContext = new ParseContext(); + parseContext.set(Parser.class, parser); + return parseContext; + } + + private static void setupLogging() throws IOException { + try (var loggingProperties = + AendGgner.class.getResourceAsStream("/eu/mulk/aendggner/logging.properties")) { + LogManager.getLogManager().readConfiguration(loggingProperties); + } + } } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java deleted file mode 100644 index dbe7d62..0000000 --- a/src/main/java/module-info.java +++ /dev/null @@ -1,6 +0,0 @@ -module aendggner { - requires info.picocli; - requires org.apache.tika.core; - requires java.sql; - opens eu.mulk.aendggner; -} diff --git a/src/main/resources/eu/mulk/aendggner/logging.properties b/src/main/resources/eu/mulk/aendggner/logging.properties new file mode 100644 index 0000000..cdebd0e --- /dev/null +++ b/src/main/resources/eu/mulk/aendggner/logging.properties @@ -0,0 +1,17 @@ +# +# General settings +# +handlers=java.util.logging.ConsoleHandler +java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$-11s %2$-40s %5$s %6$s%n +java.util.logging.ConsoleHandler.level=ALL +.level=INFO +# +# Application +# +eu.mulk.level=ALL +# +# 3rd-party libraries +# +org.apache.level=WARNING +org.apache.tika.config.level=SEVERE +org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.level=SEVERE diff --git a/src/main/resources/eu/mulk/aendggner/tika-config.xml b/src/main/resources/eu/mulk/aendggner/tika-config.xml new file mode 100644 index 0000000..7c7983c --- /dev/null +++ b/src/main/resources/eu/mulk/aendggner/tika-config.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<properties> + <service-loader dynamic="true" loadErrorHandler="IGNORE"/> + + <encodingDetectors> + <encodingDetector class="org.apache.tika.detect.DefaultEncodingDetector"/> + </encodingDetectors> + + <translator class="org.apache.tika.language.translate.DefaultTranslator"/> + + <detectors> + <detector class="org.apache.tika.detect.DefaultDetector"/> + </detectors> + + <parsers> + + <parser class="org.apache.tika.parser.DefaultParser"> + <parser-exclude class="org.apache.tika.parser.pdf.PDFParser"/> + <parser-exclude class="org.apache.tika.parser.ocr.TesseractOCRParser"/> + </parser> + + <parser class="org.apache.tika.parser.pdf.PDFParser"> + <params> + <param name="extractInlineImages" type="bool">true</param> + <param name="ocrStrategy" type="string">auto</param> + </params> + </parser> + + <parser class="org.apache.tika.parser.ocr.TesseractOCRParser"/> + + </parsers> +</properties> |
