spaCy で単語を1つだけマッチさせる
RegEx のパターンは読み書きやデバッグが簡単ではありません。そこで頼りになるのが、可読性が高く本番運用にも使える spaCy の Matcher クラスです。Matcher クラスは、定義済みルールを Doc コンテナ内のトークン列に照合できます。この演習では、Matcher を使って単語を1つ見つける練習をします。
対応するテキストは example_text にあります。nlp と doc を使って、それぞれ spaCy モデルと example_text の Doc コンテナにアクセスできます。
この演習はコースの一部です
spaCyで学ぶNatural Language Processing
演習の手順
Matcherクラスを初期化します。example_text内で小文字のwitchにマッチするパターンを定義します。- パターンを
Matcherクラスに追加して一致を検索します。 - 一致結果を反復処理し、開始・終了のトークンインデックスと一致したテキストのスパンを出力します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
nlp = spacy.load("en_core_web_sm")
doc = nlp(example_text)
# Initialize a Matcher object
matcher = Matcher(nlp.____)
# Define a pattern to match lower cased word witch
pattern = [{"lower" : ____}]
# Add the pattern to matcher object and find matches
matcher.add("CustomMatcher", [____])
matches = matcher(____)
# Print start and end token indices and span of the matched text
for match_id, start, end in matches:
print("Start token: ", ____, " | End token: ", ____, "| Matched text: ", doc[____:____].text)