法律文書を読んで、「えっ…まるで1800年代の英語を読んでいるみたい…」と思ったことはありませんか?私もです。
実は、1年前に刑事弁護士の友人が、古い判例ファイルのデジタル化を手伝ってくれと言ってきました。最初はOCRと整理だけだったんですが、ある日彼がこう言ったんです:「判決文を論調や主張のスタイルで検索できたら最高じゃない?」と。
その時、「うーん…検索ってそういう風には機能しないんだけど」と思ったんですが、そこから自然言語処理(NLP)というラビットホールに落ちていったんです。特に法律文書に使うと、まるで秘密の言語を解読する感じ。そしてPythonを使えば?驚くほど簡単でした。裁判官じゃなくても使えます。
検索では見つからない「法的な言い回し」をNLPで見つける
法律文書って、契約書や判決、規則など、とにかく分かりづらくて読みにくいですよね。何かをしようと思っても、普通の検索では限界があります。
でもNLPを使えば、膨大な情報の中から意味のあるデータを取り出せるんです。Pythonでなら、意外と簡単に。探す
Pythonコード例
from nltk.tokenize import word_tokenize
text = "被告人は合理的な疑いを超えて有罪とされた。"
tokens = word_tokenize(text)
print(tokens)
検索したい語句をトークン化して、意味ごとに分解できます。
import spacy
nlp = spacy.load("ja_core_news_sm")
doc = nlp("2021年7月5日、アダムス判事がイリノイ州で判決を下した。")
for ent in doc.ents:
print(ent.text, ent.label_)
これで判決の中から「誰が」「どこで」「いつ」を抽出できます。刑事弁護士にとっては大助かりです。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
docs = ["これは刑事事件です", "これは民事事件に関するものです"]
labels = ["刑事", "民事"]
vec = CountVectorizer()
X = vec.fit_transform(docs)
clf = MultinomialNB()
clf.fit(X, labels)
print(clf.predict(vec.transform(["窃盗と暴行の罪"])))
文書の分類を自動化し、膨大な情報の整理が可能になります。
doc = nlp("借主は毎月1日に家賃を支払うものとする。")
for token in doc:
print(token.text, token.dep_, token.head.text)
契約文の「〜する場合」などの条件文も解析できます。これはhouses関連の契約にもよく出てきます。
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer
texts = ["契約違反と罰則", "暴行と傷害の罪"]
vec = CountVectorizer()
X = vec.fit_transform(texts)
lda = LatentDirichletAllocation(n_components=2)
lda.fit(X)
print(lda.components_)
大量の判例からトピックを自動抽出してくれるので、法廷記録の整理に最適です。扱うデータが多くなるほど役立ちます。
まとめ
PythonとNLPで法律文書を解析することで、手作業では無理だったことが次々とできるようになります。小さなスクリプトから始めて、まずは一つ試してみてください。今週中に一度試してみてください—you’ll see!!