import json from spacy.matcher import Matcher from spacy.lang.ja import Japanese with open("exercises/ja/iphone.json", encoding="utf8") as f: TEXTS = json.loads(f.read()) nlp = Japanese() matcher = Matcher(nlp.vocab) # 小文字が"iphone"と"x"にマッチする2つのトークン pattern1 = [{"LOWER": "iphone"}, {"LOWER": "x"}] # 小文字が"iphone"と数字にマッチする2つのトークン pattern2 = [{"LOWER": "iphone"}, {"IS_DIGIT": True}] # パターンをmatcherに追加して、結果をチェックする matcher.add("GADGET", None, pattern1, pattern2) for doc in nlp.pipe(TEXTS): print([doc[start:end] for match_id, start, end in matcher(doc)])
import json from spacy.lang.ja import Japanese from spacy.tokens import Doc with open("exercises/ja/bookquotes.json") as f: DATA = json.loads(f.read()) nlp = Japanese() # デフォルト値がNoneのDoc拡張属性「author」を登録 Doc.set_extension("author", default=None) # デフォルト値がNoneのDoc拡張属性「book」を登録 Doc.set_extension("book", default=None) for doc, context in nlp.pipe(DATA, as_tuples=True): # doc._.bookとdoc._.author属性にコンテキストからデータをセット doc._.book = context["book"] doc._.author = context["author"] # テキストとカスタム属性を表示 print(f"{doc.text}\n — '{doc._.book}' by {doc._.author}\n")
import json from spacy.lang.ja import Japanese from spacy.tokens import Span from spacy.matcher import PhraseMatcher with open("exercises/ja/countries.json") as f: COUNTRIES = json.loads(f.read()) with open("exercises/ja/capitals.json") as f: CAPITALS = json.loads(f.read()) nlp = Japanese() matcher = PhraseMatcher(nlp.vocab) matcher.add("COUNTRY", None, *list(nlp.pipe(COUNTRIES))) def countries_component(doc): # すべてのマッチ結果に対して、「GPE」ラベルが付いたスパンを作成しましょう matches = matcher(doc) doc.ents = [ ____(____, ____, ____, label=____) for match_id, start, end in matches ] return doc # パイプラインにコンポーネントを追加しましょう ____.____(____) print(nlp.pipe_names) # 国の首都名が入った辞書をスパンのテキストで引くゲッター get_capital = lambda span: CAPITALS.get(span.text)
import json from spacy.lang.ja import Japanese with open("exercises/ja/countries.json") as f: COUNTRIES = json.loads(f.read()) nlp = Japanese() doc = nlp("チェコ共和国はスロバキアの領空保護に協力する可能性がある") # PhraseMatcherをインポートして初期化 from spacy.____ import ____ matcher = ____(____) # パターンを表すDocオブジェクトを作成し、matcherに追加 # これは[nlp(country) for country in COUNTRIES]の高速バージョンです patterns = list(nlp.pipe(COUNTRIES)) matcher.add("COUNTRY", None, *patterns) # サンプルのdocにmatcherを適用し、結果をプリントします matches = ____(____) print([doc[start:end] for match_id, start, end in matches])
from spacy.lang.ja import Japanese nlp = Japanese() people = ["デヴィッド・ボウイ", "アンゲラ・メルケル", "レディー・ガガ"] # PhraseMatcherのパターンのリストを作成 patterns = list(nlp.pipe(people))