You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2026/04/03 20:31:00 UTC
(tika) 01/03: parameterize glossary extraction
This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch TIKA-4692-improve-ooxml-sax-parsers
in repository https://gitbox.apache.org/repos/asf/tika.git
commit 8eec3f2999d62cfe864dff5b7fabddacb12c7aff
Author: tallison <ta...@apache.org>
AuthorDate: Fri Apr 3 06:57:48 2026 -0400
parameterize glossary extraction
---
.../tika/parser/microsoft/OfficeParserConfig.java | 18 ++++++++++
.../ooxml/SXWPFWordExtractorDecorator.java | 24 ++++++++-----
.../ooxml/xwpf/XWPFEventBasedWordExtractor.java | 40 +++++++++++++---------
3 files changed, 57 insertions(+), 25 deletions(-)
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
index db6d4e78e9..fab2355064 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
@@ -40,6 +40,7 @@ public class OfficeParserConfig implements Serializable {
private boolean writeSelectHeadersInBody = false;
private boolean extractAllAlternativesFromMSG = false;
+ private boolean includeGlossary = true;
private String dateOverrideFormat = null;
private int maxOverride = 0;//ignore
@@ -231,6 +232,23 @@ public class OfficeParserConfig implements Serializable {
this.extractAllAlternativesFromMSG = extractAllAlternativesFromMSG;
}
+ public boolean isIncludeGlossary() {
+ return includeGlossary;
+ }
+
+ /**
+ * Whether or not to include the glossary (building blocks / AutoText) document
+ * from docx files. The glossary can contain template content such as form field
+ * placeholders that may duplicate content already present in the main body.
+ * <p/>
+ * Default: <code>true</code>
+ *
+ * @param includeGlossary whether or not to include glossary content
+ */
+ public void setIncludeGlossary(boolean includeGlossary) {
+ this.includeGlossary = includeGlossary;
+ }
+
public boolean isIncludeMissingRows() {
return includeMissingRows;
}
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
index 1aca8a9647..45c2725e67 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
@@ -46,6 +46,7 @@ import org.apache.tika.metadata.Office;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.microsoft.EMFParser;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFEventBasedWordExtractor;
import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFFeatureExtractor;
import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFNumberingShim;
@@ -126,16 +127,21 @@ public class SXWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
}
}
//handle glossary document
- pps = opcPackage.getPartsByContentType(XWPFRelation.GLOSSARY_DOCUMENT.getContentType());
- if (pps != null) {
- if (pps.size() > 0) {
- xhtml.startElement("div", "class", "glossary");
-
- for (PackagePart pp : pps) {
- //likely only one, but why not...
- handleDocumentPart(pp, xhtml);
+ OfficeParserConfig officeParserConfig = context.get(OfficeParserConfig.class,
+ new OfficeParserConfig());
+ if (officeParserConfig.isIncludeGlossary()) {
+ pps = opcPackage.getPartsByContentType(
+ XWPFRelation.GLOSSARY_DOCUMENT.getContentType());
+ if (pps != null) {
+ if (pps.size() > 0) {
+ xhtml.startElement("div", "class", "glossary");
+
+ for (PackagePart pp : pps) {
+ //likely only one, but why not...
+ handleDocumentPart(pp, xhtml);
+ }
+ xhtml.endElement("div");
}
- xhtml.endElement("div");
}
}
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
index 2bb53a3c69..ec1a1fa437 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
@@ -62,6 +62,7 @@ public class XWPFEventBasedWordExtractor implements POIXMLTextExtractor {
private OPCPackage container;
private POIXMLProperties properties;
+ private boolean includeGlossary = true;
public XWPFEventBasedWordExtractor(OPCPackage container)
throws XmlException, OpenXML4JException, IOException {
@@ -85,6 +86,10 @@ public class XWPFEventBasedWordExtractor implements POIXMLTextExtractor {
return this.container;
}
+ public void setIncludeGlossary(boolean includeGlossary) {
+ this.includeGlossary = includeGlossary;
+ }
+
public POIXMLProperties.CoreProperties getCoreProperties() {
POIXMLProperties props = getOrCreateProperties();
return props != null ? props.getCoreProperties() : null;
@@ -131,23 +136,26 @@ public class XWPFEventBasedWordExtractor implements POIXMLTextExtractor {
}
}
//handle glossary document
- pps = container.getPartsByContentType(XWPFRelation.GLOSSARY_DOCUMENT.getContentType());
-
- if (pps != null) {
- for (PackagePart pp : pps) {
- //likely only one, but why not...
- try {
- handleDocumentPart(pp, sb);
- } catch (IOException e) {
- LOG.warn("IOException handling glossary document part", e);
- } catch (SAXException e) {
- if (WriteLimitReachedException.isWriteLimitReached(e)) {
- throw new RuntimeSAXException(e);
+ if (includeGlossary) {
+ pps = container.getPartsByContentType(
+ XWPFRelation.GLOSSARY_DOCUMENT.getContentType());
+
+ if (pps != null) {
+ for (PackagePart pp : pps) {
+ //likely only one, but why not...
+ try {
+ handleDocumentPart(pp, sb);
+ } catch (IOException e) {
+ LOG.warn("IOException handling glossary document part", e);
+ } catch (SAXException e) {
+ if (WriteLimitReachedException.isWriteLimitReached(e)) {
+ throw new RuntimeSAXException(e);
+ }
+ //swallow this because we don't actually call it
+ LOG.warn("SAXException handling glossary document part", e);
+ } catch (TikaException e) {
+ LOG.warn("ParseException handling document part", e);
}
- //swallow this because we don't actually call it
- LOG.warn("SAXException handling glossary document part", e);
- } catch (TikaException e) {
- LOG.warn("ParseException handling document part", e);
}
}
}