RegEx com spaCy

Processamento de Linguagem Natural com spaCy

Azadeh Mobasher

Principal Data Scientist

O que é RegEx?

 

  • A extração de informações baseada em regras (IR) é útil em muitas tarefas de PLN
  • Expressão regular (RegEx) serve para padrões complexos de correspondência de strings
  • RegEx encontra e recupera padrões ou substitui padrões correspondentes

RegEx: extração de link e telefone

Processamento de Linguagem Natural com spaCy

Forças e fraquezas do RegEx

Prós:

  • Permite escrever regras robustas para recuperar informações
  • Ajuda a encontrar muitas variações em strings
  • É rápido
  • Suportado por linguagens de programação

Contras:

  • Sintaxe difícil para iniciantes
  • Exige conhecer todas as formas como um padrão pode aparecer nos textos
Processamento de Linguagem Natural com spaCy

RegEx no Python

 

  • O Python já inclui a biblioteca de RegEx, re.
  • O primeiro passo ao usar o pacote re é definir um pattern.
  • O padrão resultante é usado para encontrar conteúdos correspondentes.

 

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."
Processamento de Linguagem Natural com spaCy

RegEx no Python

 

  • Usamos o método .finditer() do pacote 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
Processamento de Linguagem Natural com spaCy

RegEx no spaCy

  • RegEx em três componentes do pipeline: Matcher, PhraseMatcher e 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')]
Processamento de Linguagem Natural com spaCy

Vamos praticar!

Processamento de Linguagem Natural com spaCy

Preparing Video For Download...