Torna alla versione inglese della documentazione

Rilevazione di entità con espressioni regolari

Ultimo aggiornamento: 29 lug 2024
Rilevazione di entità con espressioni regolari

Simile a rilevare entità con dizionari, è possibile utilizzare le corrispondenze di pattern regex per rilevare entità.

Le espressioni regolari non vengono fornite in file come dizionari ma in - memoria all'interno di una configurazione regex. È possibile utilizzare più configurazioni regex durante la stessa estrazione.

Regesti che si definiscono con Watson Natural Language Processing possono utilizzare i limiti del token. In questo modo è possibile garantire che le tue corrispondenze di espressione regolare all'interno di uno o più token. Si tratta di un evidente vantaggio rispetto ai più semplici motori di espressione regolare, soprattutto quando si lavora con una lingua che non è separata da whitespace, come il cinese.

Le espressioni regolari vengono elaborate da un componente dedicato chiamato Rule - Based Runtime o RBR per breve.

Creazione di configurazioni regex

Iniziare creando una directory di modulo all'interno del tuo notebook. Si tratta di una directory all'interno del file system del notebook che viene utilizzato temporaneamente per memorizzare i file creati dalla formazione RBR. Questa directory del modulo può essere la stessa directory creata e utilizzata per l'estrazione di entità basata sul dizionario. I dizionari e le espressioni regolari possono essere utilizzati nello stesso allenamento.

Per creare la directory del modulo nel tuo notebook, inserire quanto segue in una cella di codice. Da notare che la directory del modulo non può contenere un trattino (-).

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

Una configurazione regex è un dizionario Python , con i seguenti attributi:

Attributi disponibili nelle configurazioni regex con i relativi valori, descrizioni di utilizzo e indicazione se richiesto o meno
Attributo Valore Descrizione Obbligatorio
name stringa Il nome dell'espressione regolare. Le corrispondenze dell'espressione regolare nel testo di input sono contrassegnate con questo nome nell'output.
regexes elenco (stringa di modelli regex basati su perl) Dovrebbe essere non vuoto. Possono essere fornite più regine.
flags Stringa delimitata di bandiere valide Le bandiere come UNICODE o CASE_INSENSITIVE controllano il matching. Può anche essere una combinazione di bandiere. Per le bandiere supportate, consultare Pattern (Java Platform SE 8). No (default su DOTALL)
token_boundary.min int token_boundary Indica se mettere in corrispondenza l'espressione regolare solo sui limiti di token. Specificato come oggetto dict con attributi min e max . No (restituisce la corrispondenza non sovrapposta più lunga in ogni posizione di carattere nel testo di input)
token_boundary.max int max è un attributo opzionale per token_boundary e necessario quando il limite deve estendersi per un intervallo (tra min e max token). token_boundary.max deve essere >= token_boundary.min No (se token_boundary è specificato, l'attributo min può essere specificato da solo)
groups elenco (etichette di stringa per gruppi corrispondenti) L'indice di stringa in elenco corrisponde al gruppo corrispondente in modello a partire da 1 dove l'indice 0 corrisponde all'intero match. Ad esempio: regex: (a)(b) su ab con group: ['full', 'first', 'second'] si freverà full: ab, first: a, second: b No (impostazioni predefinite per la corrispondenza etichetta in piena corrispondenza)

Le configurazioni regex possono essere caricate utilizzando i seguenti metodi helper:

  • Per caricare una singola configurazione regex, utilizzare watson_nlp.toolkit.RegexConfig.load(<regex configuration>)
  • Per caricare più configurazioni regex, utilizzare watson_nlp.toolkit.RegexConfig.load_all([<regex configuration>)])

Esempio di codice

Questo esempio mostra come caricare due diverse configurazioni regex. La prima configurazione rileva i nomi delle persone. Utilizza gli attributi dei gruppi per consentire un facile accesso al completo, primo e cognome in una fase successiva.

La seconda configurazione rileva gli acronimi come una sequenza di caratteri in maiuscolo. Utilizzando l'attributo token_boundary, impedisce le corrispondenze a parole che contengono sia caratteri maiuscoli che minuscoli.

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
        }
    }
])

Formazione di un modello che contiene espressioni regolari

Dopo aver caricato le configurazioni regex, creare un modello RBR utilizzando il metodo RBR.train() . Nel metodo, specificare:

  • La directory del modulo
  • La lingua del testo
  • Le configurazioni regex da utilizzare

Questo è lo stesso metodo che viene utilizzato per addestrare RBR con estrazione a base di dizionario. È possibile passare la configurazione del dizionario nella stessa chiamata al metodo.

Esempio di codice

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

Applicazione del modello su nuovi dati

Dopo aver addestrato i dizionari, applicare il modello su nuovi dati utilizzando il metodo run() , come si utilizzerebbe su uno qualsiasi dei blocchi pre - formati esistenti.

Esempio di codice

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

Output dell'esempio di codice:

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

Per mostrare i sottogruppi corrispondenti o il testo corrispondente:

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))

Output dell'esempio di codice:

{
  "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"
        }
      }
    ]
  },
...
}

Argomento principale: Creazione dei propri modelli