Vergleichsprofile

Filter und Optimierungen

Inhalte herausfiltern

Die GUI-Seite Inhalte herausfiltern beschreibt die aktuelle Profil-Sidebar. Diese Programming-Seite dokumentiert die Rohwerte und die Java-RegEx-Ausführung getrennt von der Bedienoberfläche.

Rohprofilwerte

Name Wert und Bedeutung
FILTERS Enthält die Filterkennung REGEXP, damit der Inhaltsfilter aktiv ist. Die Werte werden als kommaseparierte Liste gespeichert.
FILTER_PATTERNS Enthält mehrere Musterzeilen, die durch echte Zeilenumbrüche getrennt sind. Das kanonische Format pro Zeile ist Muster|Typ|Status mit Typ als text oder regexp und Status als active oder inactive.
REGEX_MATCH_WORDS Boolescher Wert, standardmäßig true. Bei true wird jedes von einem Treffer berührte Wort vollständig entfernt. Bei false werden nur die passenden Zeichenbereiche entfernt.

Inaktive Muster bleiben gespeichert, werden aber nicht angewendet. Aktive Muster müssen Inhalt enthalten. Ein aktives RegEx-Muster muss als Java-Pattern kompilierbar sein; ein inaktives ungültiges Muster kann als Entwurf erhalten bleiben.

Zeilenumbrüche und Profil-XML

Beim Speichern werden echte Zeilenumbrüche innerhalb eines Musters als CR kodiert. Der Decoder versteht zusätzlich das Legacy-Token BR. Wenn ein Muster selbst eines dieser Tokens enthält oder mit dem reservierten Präfix beginnt, verwendet der Codec die versionierte Hülle <base64>, damit der Mustertext eindeutig bleibt.

<entry key="FILTERS">REGEXP</entry>
<entry key="REGEX_MATCH_WORDS">true</entry>
<entry key="FILTER_PATTERNS">Version [[CR]][[CR]]|text|active
(?s)Start.*?End|regexp|active</entry>

Die Zeilen in FILTER_PATTERNS werden in der gespeicherten Reihenfolge verarbeitet. Der Typ text wird wörtlich gesucht; der Typ regexp wird als Java-RegEx kompiliert.

Struktur- und API-Schlüssel

Schlüssel Abbildung
pdfc.filter.regex_filter Aktiviert oder deaktiviert REGEXP in FILTERS.
pdfc.filter.regex_filter.filter_patterns Greift auf FILTER_PATTERNS als Liste von Musterzeilen zu.
pdfc.filter.regex_filter.match_words Greift auf REGEX_MATCH_WORDS zu. true entspricht Ganze Wörter, false entspricht Teiltreffer.

Java-RegEx-Semantik

RegEx-Muster werden mit Java Pattern.compile ohne fest vorgegebene Flag-Maske kompiliert. Klartextmuster werden vor der Kompilierung mit Java Pattern.quote wörtlich maskiert. Für reguläre Ausdrücke gelten daher die Java-RegEx-Regeln einschließlich eingebetteter Flags.

  • (?s) aktiviert DOTALL für den folgenden Ausdruck und lässt den Punkt auch über Zeilenumbrüche hinweg suchen.
  • (?m) aktiviert MULTILINE und ändert die Bedeutung von ^ und $ für einzelne Zeilen.
  • Weitere Java-Flags können eingebettet werden, zum Beispiel (?i) für eine Suche ohne Beachtung der Groß- und Kleinschreibung.
(?s)Start.*?End
(?m)^Artikel:.*$

Jedes aktive Muster wird mit Java Matcher.find() auf den vollständig extrahierten Seitentext angewendet. Die Suche erfolgt nicht getrennt für einzelne PDF-Textelemente. Ein ungültiger aktiver Java-RegEx wird bei der Sidebar-Validierung abgewiesen.

Capture-Group-Semantik

Enthält ein Treffer keine Capture Groups, wird der vollständige Treffer, also Gruppe 0, entfernt. Enthält das Muster mindestens eine Capture Group, werden nur die tatsächlich beteiligten Gruppen 1 bis n entfernt. Gruppe 0 wird in diesem Fall nicht zusätzlich entfernt. Eine optionale Gruppe, die bei einem konkreten Treffer nicht beteiligt ist, wird übersprungen.

Invoice (number: [0-9]+)

Bei Ganze Wörter wird jedes von einem Treffer berührte Wort vollständig entfernt. Bei Teiltreffer werden nur die durch den Treffer oder die beteiligten Capture Groups beschriebenen Zeichenbereiche entfernt. Überlappende Bereiche werden zusammengeführt, bevor die Seitenelemente angepasst werden.

Abbildung auf die aktuelle Sidebar

  • Inhalte herausfiltern steuert die Filterkennung REGEXP in FILTERS.
  • Filtermuster ist eine bearbeitbare Liste. Filter hinzufügen ... erzeugt ein aktives Muster als Klartext oder als Regulärer Ausdruck.
  • Filter aktivieren steuert den Status active oder inactive der jeweiligen Musterzeile.
  • Typ mit Klartext verwendet den Typ text und sucht den Inhalt wörtlich. Regulärer Ausdruck verwendet den Typ regexp und die Java-RegEx-Semantik.
  • Muster schreibt den Pattern-Anteil. Ganze Wörter filtern mit Ganze Wörter oder Teiltreffer schreibt REGEX_MATCH_WORDS.
  • Beim Aktivieren eines leeren Musters oder eines ungültigen regulären Ausdrucks zeigt die Sidebar eine Validierungsmeldung für die betroffene Zeile.