diff options
| author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2020-12-06 15:16:22 +0100 |
|---|---|---|
| committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2020-12-06 19:24:02 +0100 |
| commit | 545aeb6e25386121b414e6aa0cae0a96758cf3c8 (patch) | |
| tree | 6cb998430e9c461c283ff7d692d0b14aad2a541d /src/main | |
| parent | 1d92ac8fbb6c5c3a3be7bf477fef9251dcd3dfe2 (diff) | |
Configure Tika correctly.
With the new configuration, Tika can now extract text from PDFs and
XML documents.
Also configures logging for the application.
Change-Id: I7a89c2b232ed4e220665dd335a5f5a0cc3ef2994
Diffstat (limited to 'src/main')
| -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 |
4 files changed, 96 insertions, 12 deletions
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> |
