RegEx у spaCy

Обробка природної мови (NLP) зі spaCy

Azadeh Mobasher

Principal Data Scientist

Що таке RegEx?

 

  • Правилове видобування інформації (IR) корисне для багатьох задач NLP
  • Regular expression (RegEx) застосовують для складних шаблонів співставлення рядків
  • RegEx знаходить і витягує шаблони або замінює відповідні збіги

RegEx: видобування посилань і телефонів

Обробка природної мови (NLP) зі spaCy

Сильні та слабкі сторони RegEx

Переваги:

  • Дозволяє писати надійні правила для пошуку інформації
  • Дозволяє знаходити багато варіантів написання в рядках
  • Працює швидко
  • Підтримується мовами програмування

Недоліки:

  • Синтаксис складний для новачків
  • Потрібно знати всі способи, якими шаблон може згадуватися в текстах
Обробка природної мови (NLP) зі spaCy

RegEx у Python

 

  • Python постачається з бібліотекою RegEx — re.
  • Перший крок у використанні пакета re — визначити pattern.
  • Отриманий шаблон використовують для пошуку збігів.

 

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."
Обробка природної мови (NLP) зі spaCy

RegEx у Python

 

  • Використаємо метод .finditer() з пакета 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
Обробка природної мови (NLP) зі spaCy

RegEx у spaCy

  • RegEx у трьох компонентах конвеєра: Matcher, PhraseMatcher та 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')]
Обробка природної мови (NLP) зі spaCy

Давайте потренуємось!

Обробка природної мови (NLP) зі spaCy

Preparing Video For Download...