RegEx avec spaCy

Traitement du langage naturel avec spaCy

Azadeh Mobasher

Principal Data Scientist

Qu'est-ce que RegEx ?

 

  • L'extraction d'information basée sur des règles est utile pour bien des tâches de TAL
  • Les expressions régulières (RegEx) servent à faire des correspondances complexes dans des chaînes
  • RegEx repère, extrait ou remplace des motifs correspondants

RegEx : extraction d'un lien et d'un numéro de téléphone

Traitement du langage naturel avec spaCy

Forces et limites de RegEx

Atouts :

  • Permet d'écrire des règles solides pour extraire de l'information
  • Peut repérer plusieurs variantes dans les chaînes
  • Exécution rapide
  • Pris en charge par les langages de programmation

Limites :

  • Syntaxe ardue pour les débutants
  • Nécessite de connaître toutes les façons dont un motif peut apparaître dans les textes
Traitement du langage naturel avec spaCy

RegEx en Python

 

  • Python inclut une bibliothèque RegEx, re.
  • Première étape avec re : définir un pattern.
  • Ce motif sert ensuite à trouver le contenu correspondant.

 

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."
Traitement du langage naturel avec spaCy

RegEx en Python

 

  • Nous utilisons la méthode .finditer() du module 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
Traitement du langage naturel avec spaCy

RegEx dans spaCy

  • RegEx dans trois composants de pipeline : Matcher, PhraseMatcher et 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')]
Traitement du langage naturel avec spaCy

Passons à la pratique !

Traitement du langage naturel avec spaCy

Preparing Video For Download...