spacy GINZAを使った固有表現抽出の記事を色々見ていると, jupyterのdisplay使ったコードばかりでした。
筆者は普段リモートワークでLinuxのCUIで開発しており, jupyter使うと面倒になるため, なるべくやりたくないのです。
リモートでCUIマシンでjupyter使う場合, jupyter用にport開けて暗号化かけて, 毎回サーバ立てて使い終わったら落としたり面倒です。
今回は, spacy GINZA entityのprintをjupyterなしでやります。
まずはセットアップです。
自然言語処理Libのspacyです。
pip install spacy
spacyだけでも形態要素解析が可能です。
次に日本語対応のモデルが使えるようにします。
pip install -U ginza ja_ginza_electra
ginza-electraは今のところ公開されている中では, 日本語の対応が一番良かった感じがします。
実際のコードは以下になります。
内容としては単純な文字列処理になります。
import spacy #model loading nlp = spacy.load('ja_ginza_electra') in_text = '猫次郎は5月18日の朝9時にタヌキ商店へタヌ吉に会いに行った。' doc = nlp(in_text) hidden_text = copy.deepcopy(in_text) for ent in doc.ents: hidden_text = ( hidden_text[:ent.start_char] + '*' * int(ent.end_char - ent.start_char) + hidden_text[ent.end_char:] ) labeled_text = copy.deepcopy(in_text) num_diff_word = 0 for ent in doc.ents: labeled_text = ( labeled_text[:ent.start_char + num_diff_word] + '"' + ent.text + '[' + ent.label_ + ']' + '"' + labeled_text[ent.end_char + num_diff_word:] ) num_diff_word += len(ent.label_) + 4 print(in_text) print(hidden_text) print(labeled_text)
出力は以下のようになります。
in_text: 猫次郎は5月18日の朝9時にタヌキ商店へタヌ吉に会いに行った。
hidden_text: ***は*****の***に*****へ***に会いに行った。
labeled_text:"猫次郎[Person]"は"5月18日[Date]"の"朝9時[Time]"に"タヌキ商店[Dish]"へ"タヌ吉[Person]"に会いに行った。
以上でJupyterなしでentity出力できました。