Entity Recognition

Konfiguration

Copyright ©

Mindbreeze GmbH, A-4020 Linz, .

Alle Rechte vorbehalten. Alle verwendeten Hard- und Softwarenamen sind Handelsnamen und/oder Marken der jeweiligen Hersteller.

Diese Unterlagen sind streng vertraulich. Durch die Übermittlung und Präsentation dieser Unterlagen alleine werden keine Rechte an unserer Software, an unseren Dienstleistungen und Dienstleistungsresultaten oder sonstigen geschützten Rechten begründet. Die Weitergabe, Veröffentlichung oder Vervielfältigung ist nicht gestattet.

Aus Gründen der einfacheren Lesbarkeit wird auf die geschlechtsspezifische Differenzierung, z.B. Benutzer/-innen, verzichtet. Entsprechende Begriffe gelten im Sinne der Gleichbehandlung grundsätzlich für beide Geschlechter.

EinführungPermanenter Link zu dieser Überschrift

Dieses Dokument beschäftigt sich mit dem Konzept, dem Setup und den Troubleshooting Methoden für die Konfiguration von Entity Recogntition.

Konfiguration Entity RecognitionPermanenter Link zu dieser Überschrift

In diesem Kapitel wird das Konzept von Entity Recognition anhand eines einfachen Beispiels erklärt.

Führen Sie zum Einrichten folgende Schritte durch:

  • Verbinden Sie sich zum Management Center
  • Navigieren Sie zu jenem Index, den Sie mit Entity Recognition konfigurieren möchten.
  • Aktivieren Sie die Advanced Settings und öffnen Sie diesen
  • Suchen Sie nach der Einstellung "Entity Recognition Parameter" im Management Center
  • Definieren Sie ihre Entity Recognition Regeln im Feld pattern-rules, die Ihrem Metadatum matchen sollen.
  • Folgende Regelformate werden unterstützt: https://github.com/google/re2/wiki/Syntax
  • In unserem konkreten Beispiel:

    rule=/\// digits /\//. 
    digits=/\d+/.

    Erklärung

    Die erste Regel definiert, dass alle Zahlen zwischen zwei slashes matchen sollen (Regex).: 
    Beispiel: test/1234test1234/test/543/test (543 wird extrahiert)
  • Fügen Sie nun eine neue Metadata-Definition hinzu um die Regeln für Metadaten anzuwenden
  • In diesem Beispiel sucht Mindbreeze im String des existierenden Metadatums In the "fullstring nach Zahlen zwischen 2 Slashes.  Sind Zahlen zwischen 2 Slashes vorhanden,   dann nimmt Mindbreeze den Teil der Matches heraus der in der Subregel „digits" konfiguriert ist und schreibt diesen als String in das neue Metadataum „myextractedVal“.

    Beispiel: 
    fullstring: xyz/1234/herbert543/345test
    Match der Regel  “rule”: /1234/
    Wert der Regel “digits”: 1234
    Wert des Metadataums myextractedVal==1234

Hinweise zur Konfiguration im Management CenterPermanenter Link zu dieser Überschrift

Bei der Konfiguration als Metadatum in Mindbreeze InSpire müssen folgende Felder befüllt werden:

  • If Rule Matches (=Name der Regel)
  • Name (=Name des Metadatums)
  • Value (=Wert der Regel {{Monat}} – kann auch normaler Text sein oder zusammengesetzt sein Bsp.: „Datum {{Tag}}.{{Monat}}.{{Jahr}}“ )
  • Format (=Format der Regel „String“, „Date“, „Number“)
  • Format Options (=Format Optionen – vor allem bei Datum wie bei Simpledateformat)
  • In Existing Metadata (=Bereich wo die Regel angwendet wird z.B.: content, title, datasource/mes:key, <eigenesMetadatum>,…)
  • Scope: Mit der Einstellung Scope ist es möglich, einen Bereich/mehrere Bereiche mit einer Entity Recognition Regel zu selektieren, in denen die Regeln für die Extraktion angewendet werden sollen. Dazu wird der Name der Regel für die Selektierung des Bereiches/der Bereiche in das Feld scope eingetragen. Im Gegensatz zur Werteextraktion müssen Sie hier den Namen ohne {{}} eingeben.

Entity Recognition (Beispiel Filesystem)Permanenter Link zu dieser Überschrift

Dieses Kapitel beschäftigt sich mit der Einrichtung und Erklärung von Entity Recognition mit Mindbreeze unter Anlehnung an ein einfaches Beispiel.

Konfiguration von Entity Recognition für ein Filesystem:Permanenter Link zu dieser Überschrift

Zuerst müssen die Regeln für die Extraktion angelegt werden:

host=/[^\\]+/.

share=/[^\\]+/.

directory=/[^\\]+/.

UNCPath="\\\\" host "\\" share "\\" directory "\\".

If Rule Matches: UNCPath

Name: Laufwerk

Value: {{share}}

In Existing Metadata: datasource/mes:key

If Rule Matches: UNCPath

Name: Projektpfad

Value: {{directory}}

In Existing Metadata: datasource/mes:key

Aggregated Metadata Keys (; separated)

Laufwerk;Projektpfad

Date-Formate für Entity Recognition basieren auf den ICU-Patterns (z.B. Locale … de_AT)

Konfiguration für Entity Recognition für Filesystem Pfade (Variante 2) – mit Ausnahmen:Permanenter Link zu dieser Überschrift

Sind die Regeln mehrdeutig, kann über alternative Regeln und einer Reihung durch Benennung sowie die korrekte Reihung der mehrfachen Metadaten-Extraktion auch solch ein komplexer Fall erreicht werden. Der Pfad (path) als Metadatum ist lower-case und somit besser für CSV-Mapping.

Ein ODER (|) von Sub-Regeln funktioniert nicht!

> einfache Lösung ohne Ausnahme:

Pattern Rules:

LWPath=/\\\\[^\\]+\\[^\\]+\\[^\\]+\\[^\\]+/.

FilePath=/[^\\]+/.

FullPath=LWPath "\\" FilePath.

> Lösung mit einer Ausnahme (data\it):

Pattern Rules:

ASpecialPath="data\\it".

OtherPath=/[^\\]+/.

BaseShare=/\\\\[^\\]+\\[^\\]+\\[^\\]+/.

LWPathA= BaseShare "\\" ASpecialPath.

LWPathOther= BaseShare "\\" OtherPath.

FilePathA=/[^\\].*/.

FilePathOther=/[^\\].*/.

FullPathA=LWPathA "\\" FilePathA.

FullPathOther=LWPathOther "\\" FilePathOther.

Im nachstehenden Screenshot wird die Konfiguration der Regeln visualisiert.

CSV-Transform: der extrahierte Wert (fileshare) muss case-sensitive matchen, somit sollte der path als Quell-Metadatum verwendet werden.

fileshare;letter

\\fileserver.mycompany.com\qa\fstest\projekte;U:

\\fileserver.mycompany.com\qa\fstest\vorlagen;T:

\\fileserver.mycompany.com\qa\fstest\allgemein;G:

\\fileserver.mycompany.com\qa\fstest\spezial;M:

\\fileserver.mycompany.com\qa\fstest\data\it;H:

\\fileserver.mycompany.com\qa\fstest\data;H:

\\fileserver.mycompany.com\qa\fstest\data-services;H:

\\fileserver.mycompany.com\qa\fstest\allgemein-retail;G:

Match auf mes:key geht in CSV-Transformation (sowie in ER-rules) nur mit: In Property = datasource/mes:key.

Achtung: /documents-Servlet liefert keine Werte die nur über Index Re-Invert entstehen!

Troubleshooting Entity RecognitionPermanenter Link zu dieser Überschrift

Dieses Kapitel beschäftigt sich mit dem Troubleshooting der Entity Recognition Regeln.

Wichtige HinweisePermanenter Link zu dieser Überschrift

  1. In Mindbreeze InSpire werden die regulären Ausdrücke zusätzlich mit einem „/“ umschlossen.
  2. Dabei muss jeder Regeleintrag durch einen Punkt getrennt sein.
  3. Regelnamen dürfen keine „_“ beinhalten
  4. Regeln sind greedy (gierig – matchen so viel wie möglich Achtung bei „.*“ bzw. „.+“ Konfigurationen)
  5. Regeln werden alphabetisch abgearbeitet (Groß-/Kleinschreibung beachten!)
    Zuerst kommen Großbuchstaben von A bis Z, danach Kleinbuchstaben a bis z.
  6. Trifft eine Regel einen Bereich, so kann keine zweite Regel treffen Annahme: Befindet sich sowohl in Gremium als auch in Schlagwort das Wort „Vorstand“, so wird nur das  Metadatum mit der Regel „Gremium“, das Wort „Vorstand“ beinhalten
  7. Entity Recognition Rules können nur pro Index, also über alle darin befindlichen Datenquellen angelegt werden.

IndexPermanenter Link zu dieser Überschrift

Index-Status prüfen über http://localhost:8443/index/<Indexport>/statistics

Privileged Servlets:Permanenter Link zu dieser Überschrift

  • Verbinden Sie sich zum Management Center
  • Navigieren Sie zum Index
  • Aktivieren Sie die Advanced Settings
  • Öffnen Sie den Index für den Sie Entity Recognition testen möchten
  • Deaktivieren Sie die Checkbox "Disable Unrestricted Privileged Servlets"
  • Anschließend speichern Sie die Einstellungen und Starten Sie sie Services neu
  • Nachdem die Services neugestartet sind:
    • Öffnen Sie https://yourappliance:8443/index/Indexport (In unseren Beispiel 23101/processitems) https://yourappliance:8443/index/23101/processitems
    • Auf dieser Seite können Sie die Regeln (Pattern-Rules) mit einer bestimmten Abfrage (z.B.: ALL) testen
    • Klicken Sie dazu nach dem Ausfüllen auf process. Wenn Sie Syntax der Regeln richtig ist, haben Sie nach Betätigung des Knopfes mehr Optionen zum Testen zur Verfügung.
    • Wählen Sie die Regel aus, die Sie matchen möchten und konfigurieren Sie die Werte der Regel(n).
    • Klicken Sie anschließend auf process, um das Testen der Regel(n) anzustoßen:

Deaktivierung von gierigen Verhalten der Entity Recognition RegelnPermanenter Link zu dieser Überschrift

Entity Recognition Regeln sind normalerweise gierig Im folgenden Beispiel werden die markierten Zeilen gematcht:

Regel

R1=/ (?s)(test)(?P<line>.+)\s+(.*Page) /.

Match:

Wird gierig deaktiviert würde jedoch nicht mehr alles gematchet werden, sondern nur jene Blöcke die mit test beginnen und mit Page enden:

Regel:

(?U)(?s)(test)(?P<line>.+)\s+(.*Page)(?U)

Match:

Häufige FehlerursachenPermanenter Link zu dieser Überschrift

Bei folgender Fehlermeldung ist ein Fehler beim Parsen der ER-Regeln aufgetreten:

“MesQuery::Text::RE2Tokenizer ERROR: Matched empty (epsilon) token, pattern is”

… z.B. wird ein „\“ am Ende einer Regex nicht unterstützt (LWPath=/\\\\[^\\]+\\/. … liefert Fehler besser: LWPath=/\\\\[^\\]+/ \\“.).

Eventuell kann es auch zu Problemen mit “.*“ in Regeln kommen.

Entity Recognition Rules werden in alphabetischer Reihenfolge ausgewertet und der erste vollständige Match gewinnt.

Regex-Rules nach deutschen Wörtern treffen mit \w nicht alle Zeichen (Umlaute, etc.). Stattdessen können Sie mit \pL alle Unicode-Buchstaben matchen.

Typische AnwendungsfällePermanenter Link zu dieser Überschrift

Personal InformationPermanenter Link zu dieser Überschrift

SVNRPermanenter Link zu dieser Überschrift

RegEx

\d{4}(\s|\.|\-)\d{6}

Example

1237 010180

1237.010180

1237-010180

Telephone numberPermanenter Link zu dieser Überschrift

RegEx

(\+)([\s.\(\)]*\d{1}){8,13}(-)?(\d{1,5})

Example

+43 732 606162-0

+43 732 606162-609

+49(732)606162-609

Number (With delimiters)Permanenter Link zu dieser Überschrift

RegEx

z1=/\d/.z2=/\d/. (…)Dlmtr=/[\s\-_.:]?/.

z1 Dlmtr z2 Dlmtr z3 Dlmtr z4 Dlmtr z5 Dlmtr z6.

Example

12-34567

12 34 56-7

1-2 3456.7

AmountPermanenter Link zu dieser Überschrift

RegEx

((\d{1,3}(\.(\d){3})*)|\d*)(,\d{1,2})

Example

0,84

100.000,49

100.000,00

1.000.000.000.000,00

DatumPermanenter Link zu dieser Überschrift

Handbuch zu den Datumsformaten: http://userguide.icu-project.org/formatparse/datetime

  • dd(.|-|/)MM(.|-|/)yyyy
    • RegEx
      ((0[1-9])|[1-9]|([1-3][0-9]))(\.|\/|-)((0[1-9])|[1-9]|10|11|12)(\.|\/|-)((19|20)\d{2})
    • Beispiel
      11.03.2014
      11.3.2014
      3.3.2014
      03.2.2010
      11/03/2014
      11/3/2014
      3/3/2014
      03/2/2010
      11-03-2014
      11-3-2014
      3-3-2014
      03-2-2010
  • dd. MMM yyyy
    • RegEx
      ((0[1-9])|[1-9]|([1-3][0-9]))\..(|Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember).((19|20)\d{2})
    • Example
      3. Jänner 2014
      4. Februar 2012
      30. November 2013
  • MMM yyyy
    • RegEx
      (Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember).((19|20)\d{2})
    • Example
      Februar 2014
      September 2014
  • MM(.|-|/)yyyy
    • RegEx
      (Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember).((19|20)\d{2})|((0[1-9])|[1-9]|10|11|12)(\.|\/|-)((19|20)\d{2})
    • Example
      03-2014
      03.2014
      03/2014
  • yyyy(.|-|/)mm(.|-|/)dd
    • RegEx
      ((19|20)\d{2})(\.|\/|-)((0[1-9])|[1-9]|10|11|12)(\.|\/|-)((([1-3][0-9]|0[1-9])|[1-9]))
    • Example
      2014-03-21

  • Datums-Regex Gesamt
    ((0[1-9])|[1-9]|([1-3][0-9]))(\.|\/|-)((0[1-9])|[1-9]|10|11|12)(\.|\/|-)((19|20)\d{2})|((0[1-9])|[1-9]|([1-3][0-9]))\..(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember).((19|20)\d{2})|(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember).((19|20)\d{2})|((0[1-9])|[1-9]|10|11|12)(\.|\/|-)((19|20)\d{2})|((19|20)\d{2})(\.|\/|-)((0[1-9])|[1-9]|10|11|12)(\.|\/|-)((([1-3][0-9]|0[1-9])|[1-9]))
  • Datums-Regex Gesamt II
    ((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))
  • Example
    31.12.2005
    12.12.12
    1.2.2003
    1.3.98
    04-05-2004

ZeitPermanenter Link zu dieser Überschrift

RegEx

(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?

Example

11:00:23

12:30

EmailPermanenter Link zu dieser Überschrift

RegEx

([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})

Example

david.porter@inspire.mindbreeze.com

egov@mindbreeze.com

IBANPermanenter Link zu dieser Überschrift

RegEx

AT\d{18}

Example

AT002105017000123456

Kommagetrennte Liste von InhaltenPermanenter Link zu dieser Überschrift

In diesem Beispiel wird eine Liste von Inhalten getrennt mit einem Beistrich als Liste in Mindbreeze interpretiert.

Input: Liste aus Wort, Wort,

Wert=/[^\s,][^,]*[^,\s]?/.

Regel=/\s*/value/\s*(,\s*|$)/.