This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new 54192b4e0 TIKA-3824 -- add distinct metadata values, add match 
map/functionality
     new 42da5357f Merge remote-tracking branch 'origin/main' into main
54192b4e0 is described below

commit 54192b4e0b8c07598171f58b402664ea45f41ecc
Author: tballison <[email protected]>
AuthorDate: Tue Jul 26 12:33:27 2022 -0400

    TIKA-3824 -- add distinct metadata values, add match map/functionality
---
 .../org/apache/tika/parser/RegexCaptureParser.java | 55 +++++++++++++++++++---
 .../apache/tika/parser/RegexCaptureParserTest.java |  2 +-
 .../tika/config/TIKA-3557-exiftool-example.xml     |  2 +-
 .../resources/org/apache/tika/config/TIKA-3557.xml |  2 +-
 4 files changed, 51 insertions(+), 10 deletions(-)

diff --git 
a/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java 
b/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java
index 710d0395e..beb3d9d82 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java
@@ -23,6 +23,7 @@ import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -45,7 +46,8 @@ public class RegexCaptureParser extends AbstractParser 
implements Initializable
     private static final Set<MediaType> SUPPORTED_TYPES =
             Collections.singleton(MediaType.TEXT_PLAIN);
 
-    private Map<String, Pattern> regexMap = new HashMap();
+    private Map<String, Pattern> captureMap = new HashMap<>();
+    private Map<String, Pattern> matchMap = new HashMap<>();
 
     @Override
     public void initialize(Map<String, Param> params) throws 
TikaConfigException {
@@ -69,29 +71,68 @@ public class RegexCaptureParser extends AbstractParser 
implements Initializable
         try (BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream,
                 StandardCharsets.UTF_8))) {
             String line = reader.readLine();
-            Map<String, Matcher> matchers = new HashMap();
-            for (Map.Entry<String, Pattern> e : regexMap.entrySet()) {
-                matchers.put(e.getKey(), e.getValue().matcher(""));
+            Map<String, Matcher> localCaptureMap = new HashMap();
+            for (Map.Entry<String, Pattern> e : captureMap.entrySet()) {
+                localCaptureMap.put(e.getKey(), e.getValue().matcher(""));
             }
+            Map<String, Matcher> localMatchMap = new HashMap<>();
+            for (Map.Entry<String, Pattern> e : matchMap.entrySet()) {
+                localMatchMap.put(e.getKey(), e.getValue().matcher(""));
+            }
+
+            Map<String, Set<String>> keyVals = new HashMap<>();
             while (line != null) {
-                for (Map.Entry<String, Matcher> e : matchers.entrySet()) {
+                for (Map.Entry<String, Matcher> e : 
localCaptureMap.entrySet()) {
                     Matcher m = e.getValue();
                     if (m.reset(line).find()) {
                         String val = m.group(1);
-                        metadata.set(e.getKey(), val);
+                        Set<String> vals = keyVals.get(e.getKey());
+                        if (vals == null) {
+                            vals = new LinkedHashSet<>();
+                            keyVals.put(e.getKey(), vals);
+                        }
+                        vals.add(val);
+                    }
+                }
+                for (Map.Entry<String, Matcher> e : localMatchMap.entrySet()) {
+                    if (e.getValue().reset(line).find()) {
+                        metadata.set(e.getKey(), "true");
                     }
                 }
                 line = reader.readLine();
             }
+            for (Map.Entry<String, Set<String>> e : keyVals.entrySet()) {
+                for (String val : e.getValue()) {
+                    metadata.add(e.getKey(), val);
+                }
+            }
         }
     }
 
     @Field
+    @Deprecated
+    /**
+     * @deprecated use setCaptureMap
+     */
     public void setRegexMap(Map<String, String> map) {
+        setCaptureMap(map);
+    }
+
+    @Field
+    public void setCaptureMap(Map<String, String> map) {
+        for (Map.Entry<String, String> e : map.entrySet()) {
+            String field = e.getKey();
+            Pattern pattern = Pattern.compile(e.getValue());
+            captureMap.put(field, pattern);
+        }
+    }
+
+    @Field
+    public void setMatchMap(Map<String, String> map) {
         for (Map.Entry<String, String> e : map.entrySet()) {
             String field = e.getKey();
             Pattern pattern = Pattern.compile(e.getValue());
-            regexMap.put(field, pattern);
+            matchMap.put(field, pattern);
         }
     }
 }
diff --git 
a/tika-core/src/test/java/org/apache/tika/parser/RegexCaptureParserTest.java 
b/tika-core/src/test/java/org/apache/tika/parser/RegexCaptureParserTest.java
index a3f1e1a4e..13c5eada7 100644
--- a/tika-core/src/test/java/org/apache/tika/parser/RegexCaptureParserTest.java
+++ b/tika-core/src/test/java/org/apache/tika/parser/RegexCaptureParserTest.java
@@ -43,7 +43,7 @@ public class RegexCaptureParserTest {
         RegexCaptureParser parser = new RegexCaptureParser();
         Map<String, String> regexes = new HashMap<>();
         regexes.put("title", "^Title: ([^\r\n]+)");
-        parser.setRegexMap(regexes);
+        parser.setCaptureMap(regexes);
 
         try (InputStream stream =
                      
TikaInputStream.get(output.getBytes(StandardCharsets.UTF_8))) {
diff --git 
a/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557-exiftool-example.xml
 
b/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557-exiftool-example.xml
index efe430fd4..c06d3592d 100644
--- 
a/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557-exiftool-example.xml
+++ 
b/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557-exiftool-example.xml
@@ -32,7 +32,7 @@
         </param>
         <param name="outputParser" type="class" 
class="org.apache.tika.parser.RegexCaptureParser">
           <params>
-            <param name="regexMap" type="map">
+            <param name="captureMap" type="map">
               <match key="mime" value="^MIME Type\s+: ([^\r\n]+)"/>
               <match key="pages" value="^Page Count\s+: ([^\r\n]+)"/>
               <match key="pdf:version" value="^PDF Version\s+: ([^\r\n]+)"/>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557.xml 
b/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557.xml
index 1df090bf7..93b13fa44 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557.xml
+++ b/tika-core/src/test/resources/org/apache/tika/config/TIKA-3557.xml
@@ -30,7 +30,7 @@
                 </param>
                 <param name="outputParser" type="class" 
class="org.apache.tika.parser.RegexCaptureParser">
                     <params>
-                        <param name="regexMap" type="map">
+                        <param name="captureMap" type="map">
                             <title>^Title: ([^\r\n]+)</title>
                         </param>
                     </params>

Reply via email to