spaCyでのRegEx

spaCyで学ぶNatural Language Processing

Azadeh Mobasher

Principal Data Scientist

RegExとは?

 

  • 多くのNLPで役立つのがルールベース情報抽出(IR)
  • 正規表現RegEx)は複雑な文字列パターンに使用
  • RegExはパターンを検索取得、または一致を置換

RegEx:リンクと電話の情報抽出

spaCyで学ぶNatural Language Processing

RegExの長所・短所

長所:

  • 情報取得の堅牢なルールを作れる
  • 文字列の多様な表記ゆれに対応可能
  • 高速
  • 多くの言語でサポート

短所:

  • 構文が初心者には難しい
  • テキストでの表現揺れを把握する必要
spaCyで学ぶNatural Language Processing

PythonでのRegEx

 

  • Pythonには標準のRegExライブラリreがある
  • まずrepattern(パターン)を定義
  • そのパターンで一致箇所を検索

 

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で学ぶNatural Language Processing

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で学ぶNatural Language Processing

spaCyでのRegEx

  • パイプライン3要素でのRegEx: MatcherPhraseMatcherEntityRuler
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で学ぶNatural Language Processing

Passons à la pratique !

spaCyで学ぶNatural Language Processing

Preparing Video For Download...