spaCy에서의 정규식(RegEx)

spaCy로 배우는 자연어 처리

Azadeh Mobasher

Principal Data Scientist

RegEx란?

 

  • 규칙 기반 정보 추출(IR)은 여러 NLP 작업에 유용합니다
  • 정규식(RegEx)은 복잡한 문자열 패턴 매칭에 사용됩니다
  • RegEx는 패턴을 찾고 추출하거나 일치하는 패턴을 대체합니다

정규식: 링크와 전화번호 정보 추출

spaCy로 배우는 자연어 처리

RegEx의 장단점

장점:

  • 정보를 추출하는 견고한 규칙을 작성할 수 있습니다
  • 문자열의 다양한 변형을 폭넓게 찾을 수 있습니다
  • 빠르게 동작합니다
  • 여러 프로그래밍 언어에서 지원됩니다

단점:

  • 초보자에게 문법이 어렵습니다
  • 텍스트에서 패턴이 표현될 모든 방식을 파악해야 합니다
spaCy로 배우는 자연어 처리

Python의 RegEx

 

  • 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."
spaCy로 배우는 자연어 처리

Python의 RegEx

 

  • re 패키지의 .finditer() 메서드를 사용합니다
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
spaCy로 배우는 자연어 처리

spaCy의 RegEx

  • 파이프라인 구성요소 3개에서 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')]
spaCy로 배우는 자연어 처리

연습해 봅시다!

spaCy로 배우는 자연어 처리

Preparing Video For Download...