RegEx z spaCy

Przetwarzanie języka naturalnego z użyciem spaCy

Azadeh Mobasher

Principal Data Scientist

Czym jest RegEx?

 

  • Ekstrakcja informacji oparta na regułach jest przydatna w wielu zadaniach NLP
  • Wyrażenia regularne (RegEx) służą do dopasowywania złożonych wzorców tekstowych
  • RegEx wyszukuje i pobiera wzorce lub zastępuje dopasowane fragmenty

RegEx: ekstrakcja linków i numerów telefonów

Przetwarzanie języka naturalnego z użyciem spaCy

Mocne i słabe strony RegEx

Zalety:

  • Umożliwia pisanie precyzyjnych reguł ekstrakcji informacji
  • Pozwala wykrywać wiele wariantów wzorców w tekście
  • Działa szybko
  • Obsługiwany przez języki programowania

Wady:

  • Składnia jest trudna dla początkujących
  • Wymaga znajomości wszystkich możliwych form wzorca w tekstach
Przetwarzanie języka naturalnego z użyciem spaCy

RegEx w Pythonie

 

  • Python zawiera wbudowaną bibliotekę RegEx: re.
  • Pierwszym krokiem jest zdefiniowanie wzorca pattern.
  • Wzorzec służy następnie do wyszukiwania dopasowań.

 

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."
Przetwarzanie języka naturalnego z użyciem spaCy

RegEx w Pythonie

 

  • Używamy metody .finditer() z pakietu 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
Przetwarzanie języka naturalnego z użyciem spaCy

RegEx w spaCy

  • RegEx w trzech komponentach potoku: 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')]
Przetwarzanie języka naturalnego z użyciem spaCy

Czas na ćwiczenia!

Przetwarzanie języka naturalnego z użyciem spaCy

Preparing Video For Download...