RegEx med spaCy

Naturlig språkbehandling med spaCy

Azadeh Mobasher

Principal Data Scientist

Vad är RegEx?

 

  • Regelbaserad informationsextraktion (IR) är användbar för många NLP-uppgifter
  • Reguljära uttryck (RegEx) används för komplex strängmatchning
  • RegEx hittar och hämtar mönster eller ersätter matchande mönster

RegEx: extraktion av länk- och telefoninformation

Naturlig språkbehandling med spaCy

RegEx – styrkor och svagheter

Fördelar:

  • Möjliggör robusta regler för informationsextraktion
  • Kan hitta många typer av variation i strängar
  • Körs snabbt
  • Stöds av programmeringsspråk

Nackdelar:

  • Syntaxen är utmanande för nybörjare
  • Kräver kännedom om alla sätt ett mönster kan förekomma i texter
Naturlig språkbehandling med spaCy

RegEx i Python

 

  • Python levereras med ett inbyggt RegEx-bibliotek, re.
  • Det första steget är att definiera ett pattern.
  • Det resulterande mönstret används för att hitta matchande innehåll.

 

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."
Naturlig språkbehandling med spaCy

RegEx i Python

 

  • Vi använder metoden .finditer() från paketet 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
Naturlig språkbehandling med spaCy

RegEx i spaCy

  • RegEx i tre pipeline-komponenter: Matcher, PhraseMatcher och 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')]
Naturlig språkbehandling med spaCy

Nu kör vi en övning!

Naturlig språkbehandling med spaCy

Preparing Video For Download...