始める無料で始める

spaCy で単語を1つだけマッチさせる

RegEx のパターンは読み書きやデバッグが簡単ではありません。そこで頼りになるのが、可読性が高く本番運用にも使える spaCy の Matcher クラスです。Matcher クラスは、定義済みルールを Doc コンテナ内のトークン列に照合できます。この演習では、Matcher を使って単語を1つ見つける練習をします。

対応するテキストは example_text にあります。nlpdoc を使って、それぞれ spaCy モデルと example_textDoc コンテナにアクセスできます。

この演習はコースの一部です

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)
コードを編集して実行