0 / 0
Zurück zur englischen Version der Dokumentation
Entitäten mit regulären Ausdrücken erkennen
Letzte Aktualisierung: 22. Juli 2024
Entitäten mit regulären Ausdrücken erkennen

Ähnlich wie beim Erkennen von Entitäten mithilfe von Wörterverzeichnissen, können Sie reguläre Ausdrücke für den Musterabgleich verwenden, um Entitäten zu erkennen.

Reguläre Ausdrücke werden nicht in Dateien (z. B. Wörterverzeichnisdateien) bereitgestellt, sondern speicherintern in einer Konfiguration für reguläre Ausdrücke. In einem Extraktionsvorgang können mehrere Konfigurationen für reguläre Ausdrücke verwendet werden.

In regulären Ausdrücken, die Sie mit Watson Natural Language Processing definieren, können Tokengrenzen verwendet werden. Auf diese Weise können Sie sicherstellen, dass der reguläre Ausdruck in einem oder mehreren Token(s) übereinstimmt. Dies ist ein wesentlicher Vorteil gegenüber einfachen Engines für reguläre Ausdrücke, insbesondere beim Arbeiten mit einer Sprache ohne trennende Leerzeichen (z. B. Chinesisch).

Reguläre Ausdrücke werden von einer dedizierten Komponente mit dem Namen Rule-Based Runtime (RBR) verarbeitet.

Konfigurationen für regulärte Ausdrücke erstellen

Erstellen Sie zunächst ein Modulverzeichnis in Ihrem Notebook. Dies ist ein Verzeichnis im Dateisystem des Notebooks, das zum temporären Speichern der beim RBR-Training erstellten Dateien verwendet wird. Als Modulverzeichnis kann auch das Verzeichnis verwendet werden, das Sie zum Extrahieren von Entitäten anhand eines Wörterverzeichnisses erstellt und genutzt haben. Wörterverzeichnisse und reguläre Ausdrücke können im selben Trainingslauf verwendet werden.

Geben Sie in Ihrem Notebook Folgendes in eine Codezelle ein, um das Modulverzeichnis zu erstellen. Dabei ist zu beachten, dass das Modulverzeichnis keinen Gedankenstrich (-) enthalten darf.

import os
import watson_nlp
module_folder = "NLP_RBR_Module_2"
os.makedirs(module_folder, exist_ok=True)

Eine Konfiguration für reguläre Ausdrücke ist ein Python-Wörterverzeichnis mit den folgenden Attributen:

Verfügbare Attribute in Regex-Konfigurationen mit ihren Werten, Verwendungsbeschreibungen und Indikationen, falls erforderlich oder nicht
Attribut Wert Beschreibung Erforderlich
name Zeichenfolge Der Name des regulären Ausdrucks. Im Eingabetext enthaltene Übereinstimmungen mit dem regulären Ausdruck werden im in der Ausgabe mit diesem Namen gekennzeichnet. Ja
regexes list (string of perl based regex patterns) Sollte nicht leer sein. Es können mehrere reguläre Ausdrücke angegeben werden. Ja
flags Zeichenfolge mit Begrenzern, die gültige Flags enthält Flags wie UNICODE oder CASE_INSENSITIVE steuern den Abgleich. Es kann auch eine Kombination aus Flags angegeben werden. Informationen zu den unterstützten Flags finden Sie unter Muster (Java Platform SE 8). Nein (Standardwert ist DOTALL)
token_boundary.min Ganzzahl token_boundaryGibt an, ob der Abgleich für den regulären Ausdruck nur an Tokengrenzen erfolgen soll. Wird als Wörterverzeichnisobekt (dict) mit den Attributen min und maxangegeben. Nein (gibt die längste Übereinstimmung ohne Überschneidung an jeder Zeichenposition im Eingabetext zurück)
token_boundary.max Ganzzahl max ist ein optionales Attribut für token_boundary und erforderlich, wenn die Begrenzung für einen Bereich (zwischen min -und max -Tokens) erweitert werden muss. token_boundary.max muss >= token_boundary.min sein. No (wenn token_boundary angegeben ist, kann das Attribut min allein angegeben werden)
groups list (string labels for matching groups) Der Zeichenfolgeindex in der Liste entspricht der übereinstimmenden Gruppe in dem Muster, das mit 1 beginnt. Dabei entspricht der Indexwert 0 einer vollständigen Übereinstimmung. Beispiel: regex: (a)(b) on ab with group: ['full', 'first', 'second'] will yield full: ab, first: a, second: b. Nein (Standardwert: label match on full match)

Die Konfigurationen für reguläre Ausdrücke können mit den folgenden Helper-Methoden geladen werden:

  • Verwenden Sie watson_nlp.toolkit.RegexConfig.load(<regex configuration>), um eine einzelne Konfiguration für reguläre Ausdrücke zu laden.
  • Verwenden Sie watson_nlp.toolkit.RegexConfig.load_all([<regex configuration>)]), um mehrere Konfigurationen für reguläre Ausdrücke zu laden.

Codebeispiel

Dieses Beispiel zeigt, wie zwei verschiedene Konfigurationen für reguläre Ausdrücke geladen werden. Die erste Konfiguration dient zum Erkennen von Personennamen. Dabei wird das Attribut 'groups' verwendet, um in einer späteren Phase den einfachen Zugriff auf den vollständigen Namen, den Vornamen und den Nachnamen zu ermöglichen.

Die zweite Konfiguration dient zum Erkennen von Akronymen als Zeichenfolge, die nur Großbuchstaben enthält. Durch die Verwendung des Attributs 'token_boundary' wird verhindert, dass Wörter mit Groß- und Kleinbuchstaben als Übereinstimmungen erkannt werden.

from watson_nlp.toolkit.rule_utils import RegexConfig

# Load some regex configs, for instance to match First names or acronyms
regexes = RegexConfig.load_all([
    {
        'name': 'full names',
        'regexes': ['([A-Z][a-z]*) ([A-Z][a-z]*)'],
        'groups': ['full name', 'first name', 'last name']
    },
    {
        'name': 'acronyms',
        'regexes': ['([A-Z]+)'],
        'groups': ['acronym'],
        'token_boundary': {
            'min': 1,
            'max': 1
        }
    }
])

Modell trainieren, das reguläre Ausdrücke enthält

Erstellen Sie nach dem Laden der Konfigurationen für reguläre Ausdrück ein RBR-Modell unter Verwendung der Methode RBR.train(). Geben Sie in der Methode Folgendes an:

  • Das Modulverzeichnis
  • Die Sprache für den Text
  • Die zu verwendenden Konfigurationen für reguläre Ausdrücke

Dies ist dieselbe Methode wie beim Trainieren von RBR mit wörterverzeichnisbasierter Extraktion. Die Wörterverzeichniskonfiguration kann im selben Methodenaufruf übergeben werden.

Codebeispiel

# Train the RBR model
custom_regex_block = watson_nlp.resources.feature_extractor.RBR.train(module_path=module_folder, language='en', regexes=regexes)

Modell auf neue Daten anwenden

Nachdem Sie die Wörterverzeichnisse trainiert haben, wenden Sie das Modell mit der Methode run() auf neue Daten an, wie bei den vorhandenen, vorab trainierten Blöcken.

Codebeispiel

custom_regex_block.run('Bruce Wayne works for NASA')

Ausgabe des Codebeispiels:

{(0, 11): ['regex::full names'], (0, 5): ['regex::full names'], (6, 11): ['regex::full names'], (22, 26): ['regex::acronyms']}

So zeigen Sie die übereinstimmenden Untergruppen oder den übereinstimmenden Text an:

import json
# Get the raw response including matching groups
full_regex_result = custom_regex_block.executor.get_raw_response('Bruce Wayne works for NASA‘, language='en')
print(json.dumps(full_regex_result, indent=2))

Ausgabe des Codebeispiels:

{
  "annotations": {
    "View_full names": [
      {
        "label": "regex::full names",
        "fullname": {
          "location": {
            "begin": 0,
            "end": 11
          },
          "text": "Bruce Wayne"
        },
        "firstname": {
          "location": {
            "begin": 0,
            "end": 5
          },
          "text": "Bruce"
        },
        "lastname": {
          "location": {
            "begin": 6,
            "end": 11
          },
          "text": "Wayne"
        }
      }
    ],
    "View_acronyms": [
      {
        "label": "regex::acronyms",
        "acronym": {
          "location": {
            "begin": 22,
            "end": 26
          },
          "text": "NASA"
        }
      }
    ]
  },
...
}

Übergeordnetes Thema: Eigene Modelle erstellen

Generative KI-Suche und -Antwort
Diese Antworten werden von einem großen Sprachmodell in watsonx.ai basierend auf dem Inhalt der Produktdokumentation generiert. Weitere Informationen