Glue の PII Detection が漢字をスルーしちゃうので、GiNZA を試す。
GiNZA とは
日本語の自然言語ライブラリ。形態素解析をやってくれるらしい。
https://megagonlabs.github.io/ginza/
https://github.com/megagonlabs/ginza
インストール
pip でOK。上記 github によると、Python 3.8 以降が必要とのこと(自分の環境は3.12.3)。
% pip install ja_ginza --break-system-packages
サンプルコード
某 Claude 氏が生成してくれたものに手を加えて作ったもの。
ginza-test.py
import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('山田太郎は東京都渋谷区に住んでいます。木村 花子は山口に住んでいましたが、現在は引っ越して桐生に住んでいます。山口は近々、仕事の都合で津に転居するという話です。あ、三重県の津市のことです。')
print("go!")
for ent in doc.ents:
if ent.label_ == 'Person':
print('人名:', ent.text)
elif ent.label_ == 'City':
print('住所:', ent.text)
実行
% python ginza-test.py
go!
人名: 山田太郎
住所: 東京都渋谷区
人名: 木村 花子
住所: 山口
住所: 桐生
人名: 山口
住所: 津市
考察
人名、住所とも案外綺麗に取れる。が、当たり前だが 100% ではない。
- スペースが入っていても問題ない("木村 花子")
- 地名と人名両方で使われる単語でも前後の文脈から判別してくれる("山口")
- 「市」とか付いてなくても取れる("桐生")
- 取れないものもある("津")
あとは置換えるなり、一般化するなりすればよいが、「検知は 100% ではないこと」は意識しておいた方がよさそう。