Ä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:
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_boundary Gibt 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 max angegeben. |
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