見出し画像

NetworkXを利用した法律のネットワーク図の作成

TL;DR

プログラミング初心者の弁護士が、PythonとNetworkXを用いて法律同士の関係性を表すネットワーク図の作成に挑戦したところ、中途半端なものが出来上がった。

はじめに

弁護士の宮澤といいます。昨年夏からUC Berkeleyのロースクールに留学しています。
同校ではシリコンバレーとの近さなどを活かしてテック系の法領域に力を入れているところ、この春学期に”Computer Programming for Lawyers” というPythonの入門講座を受講したので、そこで得た知識を活かしてこの記事を書くことにしました。
弁護士×プログラミングという切り口ではSmart Roppoが有名ですね。こんなに高度なことはできませんが、今回はPythonとNetworkXを使って、法律同士の関係を示すネットワーク図を作ろうと思います。

背景

特に深い理由はありませんが、Pythonを使う、正規表現を使う、e-Gov法令検索を使う、という3つのことを前提としたときに、「一般法・特別法みたいな法律同士の関係を何らかの方法で図示できたらいいな」と思って取り組むことにしました。

考え方

法律同士の関係の強弱については、ある法律の本文のなかで、ほかの法律の名称が参照されている回数をカウントすることで判断することにしました。具体的には、以下のとおりです。

  1. ある法律のテキスト(本文)を取得する

  2. 本文から参照される各法令の名称を正規表現で取得し、数え上げる

  3. e-Gov法令検索に掲載されている全ての法律について、上記1-2を行う

  4. 上記3の結果を図示する

詳しい内容

ある法律のテキスト(本文)を取得する
こちらは以下の記事を参考にして取得しました。
なお、今回は本文のみ(附則を含まない)を分析の対象とするため、原始的に、附則の始まる「附\u3000則」(全角スペース)を探し、それ以降を無視することにしています。

本文から参照される各法令の名称を正規表現で取得し、数え上げる
ある法律において他の法律が言及される場合、最初に「○○に関する法律(平成××年法律第△△号)」(例:民間事業者による信書の送達に関する法律(平成十四年法律第九十九号))ですとか、「○○法(昭和××年法律第△△号)」(例:地方自治法(昭和二十二年法律第六十七号))のように登場します。また、「(大正××年法律第△△号。以下「○○法」という。)」のように定義語が用いられる場合もあります。
そこで、①単純に法令番号を探す正規表現と、②定義語を探す正規表現を用いることにしました。それぞれ以下のとおりです。

# 正規表現①
法(律|)(([(明治)(昭和)(平成)(令和)][一-龥]+年法律第[一-龥]+号)
# 正規表現②
{〔注:法令名称〕}({〔注:法令番号〕}。以下(この[一-龥]において|)「([一-龥]+法)」とい

なお、正規表現①では、法律ではあるものの末尾が「法」または「法律」ではないもの(例えば、明治十七年太政官布告第三十二号(爆発物取締罰則)を取得することはできませんが、今回はそういったものは気にしないことにしています。
また、正規表現①を用いずに、本文に法令の名称が含まれるかどうかを全て調べるということもできたのですが、あまりスマートではないのではないかと思って採用しませんでした(一応気になって実験したところ、正規表現を用いた方が速いようです)。

さて、なんとなく塩梅がよさそうだったので個人情報の保護に関する法律(平成十五年法律第五十七号)で実験してみたところ、以下の19の法律が参照されているようです(定義語は3つありました)。

# 参照される法令の一覧
'内閣府設置法', '国家行政組織法', '宮内庁法', '独立行政法人通則法', '地方独立行政法人法', '民間事業者による信書の送達に関する法律', '医療法', '行政機関の保有する情報の公開に関する法律', '独立行政法人等の保有する情報の公開に関する法律', '労働者派遣事業の適正な運営の確保及び派遣労働者の保護等に関する法律', '国家公務員法', '地方公務員法', '行政不服審査法', '個人情報の保護に関する法律', '行政手続における特定の個人を識別するための番号の利用等に関する法律', '地方自治法', '民事訴訟法', '行政手続法', '情報通信技術を活用した行政の推進等に関する法律'
# 定義語
'行政機関情報公開法', '独立行政法人等情報公開法', '番号利用法'

実際にe-Govで調べてみると(地道に「法律第」で数えてみるなどすると)、確かに上記のとおりでよさそうです。
(なお、同法104条2項では個人情報保護法自体への言及がありますが、これは意図的に削除しています)

e-Gov法令検索に掲載されている全ての法律について、これを行う
これが課題でした。というのも、個人情報保護法を例にとれば、上記の処理に2.2秒ぐらいかかっていたためです。
e-Govに掲載されている法律は2022年4月2日時点で2039件だったようですので、雑な単純計算で75分ぐらいかかってもおかしくないことになります。
結局この点は「寝ているうちに終わらせる」ためにはどうすればよいかを考えることが面倒になったので、他のことをやりながら100個ずつぐらい処理することにしました。

得られたデータを使って少し遊びましょう。

  • 一番他の法律を参照する法律は何でしょうか:租税特別措置法のようです(3,763件)

  • 一番他の法律に参照されている法律は何でしょうか:会社法のようです(3,561件)

結果を図示する
知り合いのエンジニアの方に聞いたところ、「NetworkXを使ってKamada Kawai Layoutで描写することがよさそう」とのことでしたので、そのとおりにしました。
NetworkXの使い方については、以下の記事を参照しています。

最終的に出来上がったものがこちらです。

NetworkXのデフォルトのレイアウトよりは、Kamada Kawai Layoutの方がよさそうなのですが、「エッジの重みの大きいものは近く、小さいものは遠く」には残念ながらなっていません。
詳しくご存知の方がいらっしゃいましたら、ぜひ教えていただけるととてもうれしいです。

最後に

法令APIを利用した記事は一見したところあまり多くないようですが、法律の関係では法令・判決・ガイドライン・審議会議事録など、色々なものが公開されています。
「こういうことを調べたら面白そう」といったことなど、アイデアをお持ちの方がいらっしゃいましたら、ぜひご教示ください。

この記事が気に入ったらサポートをしてみませんか?