RegEx cu spaCy

Procesarea limbajului natural cu spaCy

Azadeh Mobasher

Principal Data Scientist

Ce este RegEx?

 

  • Extragerea regulilor de informații (IR) este utilă în multe sarcini NLP
  • Expresiile regulate (RegEx) sunt folosite pentru potrivirea complexă a șirurilor
  • RegEx găsește și extrage tipare sau înlocuiește potrivirile

RegEx: extragerea informațiilor despre linkuri și numere de telefon

Procesarea limbajului natural cu spaCy

Avantaje și dezavantaje ale RegEx

Avantaje:

  • Permite scrierea unor reguli robuste pentru extragerea informațiilor
  • Identifică numeroase variante ale unui șir
  • Rulează rapid
  • Suportat de limbajele de programare

Dezavantaje:

  • Sintaxa este dificilă pentru începători
  • Necesită cunoașterea tuturor variantelor în care un tipar poate apărea în texte
Procesarea limbajului natural cu spaCy

RegEx în Python

 

  • Python include biblioteca RegEx re.
  • Primul pas în utilizarea pachetului re este definirea unui pattern.
  • Tiparul obținut este folosit pentru găsirea conținutului potrivit.

 

import re

pattern = r"((\d){3}-(\d){3}-(\d){4})"
text = "Our phone number is 832-123-5555 and their phone number is 425-123-4567."
Procesarea limbajului natural cu spaCy

RegEx în Python

 

  • Folosim metoda .finditer() din pachetul re
iter_matches = re.finditer(pattern, text)

for match in iter_matches: start_char = match.start() end_char = match.end()
print ("Start character: ", start_char, "| End character: ", end_char, "| Matching text: ", text[start_char:end_char])
>>> Start character:  20 | End character:  32 | Matching text:  832-123-5555
Start character:  59 | End character:  71 | Matching text:  425-123-4567
Procesarea limbajului natural cu spaCy

RegEx în spaCy

  • RegEx în trei componente de pipeline: Matcher, PhraseMatcher și EntityRuler.
text = "Our phone number is 832-123-5555 and their phone number is 425-123-4567."

nlp = spacy.blank("en") patterns = [{"label": "PHONE_NUMBER", "pattern": [{"SHAPE": "ddd"}, {"ORTH": "-"}, {"SHAPE": "ddd"}, {"ORTH": "-"}, {"SHAPE": "dddd"}]}]
ruler = nlp.add_pipe("entity_ruler") ruler.add_patterns(patterns) doc = nlp(text) print ([(ent.text, ent.label_) for ent in doc.ents])
>>> [('832-123-5555', 'PHONE_NUMBER'), ('425-123-4567', 'PHONE_NUMBER')]
Procesarea limbajului natural cu spaCy

Să exersăm!

Procesarea limbajului natural cu spaCy

Preparing Video For Download...