e-Gov 法令データを活用したいメモ

# 背景

* 契約書や利用規約などを, 手元で git + Markdown あたりでテキスト管理, チェックしたい
  * VS code などで, Intelli Sense のように, `"著作権法第27条及び第28条の権利を含む"` などの文章があったときに, 著作権法 27, 28 の条文をポップアップさせて確認できるようにしたい
* 契約書や利用規約などが, 各種法令(著作権法, 個人情報保護法, 労働基準法, etc)を遵守しているか, 機械学習とかでよろしくチェックしたい
  * 弁護士に頼んでもよいが, 自社の利用用途やビジネスなどコンテキストを考えてチェックしてもらうのは難しい(or 時間がかかる). また, アップデートがあるたびに逐次チェックしてもらうと費用もかかる
  * 機械学習 + NLP により, "この場合, どんな法令を遵守する必要ありますか...?" と質問文を書いたら, よろしく返答してくれるシステムほしい
 
リーガルテック系のサービスも出始めているが, word しか受け付けなかったり, 英語に対応していなかったり, クラウドのみだったり, 従量課金でなかったり, 日本においては非弁行為(弁護士法７２条)に該当するためか, 弁護士や弁護士事務所でない個人や法人にはサービス提供していなかったりと, 現状自身の利用形態にフィットするものがない.

現状, できたらいいなレベルなので, 特段成果物はありません.

## e-Gov

とりあえずは日本の法令を扱います.

https://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0100/

API でデータ取得とかできます.
XML で一括で落とした方がはやいかしらん?

xml スキーマあります.

https://elaws.e-gov.go.jp/search/html/readme.html#schema


法令APIを利用したリサーチツールを自作してみた【SmartRoppo】
https://qiita.com/lawyer_alpaca/items/0e434235b1254287ef53

ありがとうございます.

### XML ライブラリ

python : xml モジュールが標準であります
C++ : tinyxml2 が便利です(UTF8対応) https://github.com/leethomason/tinyxml2

## 構文解析

KNP で構文解析, 照応解析ができます.

http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP

Linux package あります.

とりあえず web で試せますので,  弁護士法 72 条を解析してみます.

```
弁護士又は弁護士法人でない者は、報酬を得る目的で訴訟事件、非訟事件及び審査請求、異議申立て、再審査請求等行政庁に対する不服申立事件その他一般の法律事件に関して鑑定、代理、仲裁若しくは和解その他の法律事務を取り扱い、又はこれらの周旋をすることを業とすることができない。ただし、この法律又は他の法律に別段の定めがある場合は、この限りでない。
# S-ID:1 KNP:4.2-1e9b642b DATE:2019/12/08 SCORE:-1254.50085
                                                                      弁護──┐                          <体言>
                                                                           士又は(P)─┐                  <体言><Wikipediaエントリ:弁護士>
                                                      弁護──┐                      │                  <体言>
                                                                士──┐              │                  <体言>
                                                                法人でない──┐      │                  <体言><用言:判><Wikipediaエントリ:弁護士法人><格解析結果:ガ/者;ノ/->
                                                                           者は、(P)─PARA──┐          <体言>
                                                    報酬を──┐                              │          <体言>
                                                              得る──┐                      │          <用言:動><格解析結果:ガ/-;ヲ/報酬;ニ/-;デ/-;カラ/-;時間/-;外の関係/目的;ニヨル/->
                                                                    目的で──┐              │          <体言>
                                              訴訟──┐                      │              │          <体言>
                                                   事件、(P)─┐              │              │          <体言><Wikipediaエントリ:訴訟事件>
                                              非訟──┐      │              │              │          <体言>
                                                 事件及び(P)-PARA(P)─┐      │              │          <体言>
                                              審査──┐              │      │              │          <体言>
                                                   請求、(P)─┐      │      │              │          <体言><Wikipediaエントリ:審査請求><格解析結果:ノ/-;ノ/->
                                                     異議(P)-PARA(P)─PARA──┤              │          <体言>
                                                                         申立て、(P)─┐      │          <用言:動><格解析結果:ガ/-;ヲ/事件;ヲ/異議;ニ/-;デ/目的;ヘ/-;時間/-;ニタイスル/-;ニツク/->
再──┐                                                                              │      │          
      審査──┐                                                                      │      │          <体言>
            請求等──┐                                                              │      │          <体言><Wikipediaエントリ:審査請求>
                      行政──┐                                                      │      │          <体言>
                              庁に──┐                                              │      │          <体言>
                                    対する──┐                                      │      │          <用言:動>
                              不服──┐      │                                      │      │          <体言>
                                      申立──┤                                      │      │          <体言>
                                        事件その他──┐                              │      │          <体言>
                                                    一般の──┐                      │      │          <体言>
                                                      法律──┤                      │      │          <体言>
                                                            事件に──┐              │      │          <体言>
                                                                    関して──┐      │      │          <用言:動>
                                                                           鑑定、(P)─PARA──┤          <体言><用言:動><格解析結果:ガ/-;ヲ/-;ニ/-;ト/-;デ/-;カラ/->
                                           代理、(P)─┐                                      │          <体言><格解析結果:ノ/-;ノ/->
                                     仲裁若しくは(P)─┤                                      │          <体言><格解析結果:ノ/-;ノ/->
                                     和解その他の(P)─PARA──┐                              │          <体言><格解析結果:ノ/->
                                                      法律──┤                              │          <体言>
                                                            事務を──┐                      │          <体言><Wikipediaエントリ:法律事務>
                                                           取り扱い、又は(P)─┐              │          <用言:動><格解析結果:ガ/-;ヲ/事務>
                                                  これらの──┐              │              │          <体言>
                                                            周旋を──┐      │              │          <体言><格解析結果:ノ/-;ノ/->
                                                                     する(P)─PARA──┐      │          <用言:動><格解析結果:ガ/-;ヲ/周旋;ニ/-;ト/-;デ/-;時間/-;ニツク/-;外の関係/こと>
                                                                                    ことを──┤          <体言>
                                                                                      業と──┤          <体言>
                                                                              することができない。──┐  <用言:動><格解析結果:ガ/士;ガ/者;ヲ/こと;ニ/-;ト/業;デ/-;時間/->
                                                                                          ただし、──┤  
                                                                      この──┐                      │  
                                                                 法律又は(P)─┤                      │  <体言>
                                                              他の──┐      │                      │  <体言>
                                                                   法律に(P)─PARA──┐              │  <体言>
                                                                    別段の──┐      │              │  <体言>
                                                                            定めが──┤              │  <体言>
                                                                                      ある──┐      │  <用言:動><格解析結果:ガ/定め;ニ/法律;ニ/法律;ト/-;時間/-;外の関係/場合>
                                                                                          場合は、──┤  <体言>
                                                                                              この──┤  
                                                                                              限りでない。<体言><用言:判><格解析結果:ガ/-;ニ/-;ニツク/-;ノ/-;ニオク/-;修飾/ただし;ニヨル/-;ニカンスル/->
EOS
```

Super cool!
いいかんじに解析できました. 少し入力文を修正したら完璧になるかな?


構文木を graphviz あたりで可視化したいですね.

### 字句に関しての注意

ちなみに ",", "." は句読点として判別できていなそうです. "、", "。"に置き換える必要があります.

## GiNZA を試す.

日本語NLPライブラリGiNZAのすゝめ 
https://qiita.com/poyo46/items/7a4965455a8a2b2d2971

動きました.

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">たいせつな Ginza での構文?可視化 <a href="https://t.co/IT7vjk0gcn">pic.twitter.com/IT7vjk0gcn</a></p>&mdash; Syoyo Fujita 🌸  RayWa(Ray and Peace) (@syoyo) <a href="https://twitter.com/syoyo/status/1207704679645245441?ref_src=twsrc%5Etfw">December 19, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ただ, diplaCy で `style="ent"` は弁護士法 72 条の条文では entry は見つかりませんでした.

はじめての自然言語処理
https://www.ogis-ri.co.jp/otc/hiroba/technical/similar-document-search/part4.html

spaCyを使ってルールベースの記述をシンプルに！
https://qiita.com/moriyamanaoto/items/e98b8a6ff1c8fcf8e293

法令に特化したルールを追加するか, 再学習が必要ですね.

## HuggingFace で日本語をためす.

huggingface 2.3 から Japanese がデフォルトで使えるようになりました.

huggingface/transformers の日本語BERTで文書分類器を作成する
https://qiita.com/nekoumei/items/7b911c61324f16c43e7e

とりあえず Tokenizer で改正著作権法 47条の5 の最初のほうを分類してみます.

```

```

Voala!


`##微` など, `##` がついているのは  Non-word-initial units と呼ばれるものとのことです.

Exploring BERT's Vocabulary
http://juditacs.github.io/2019/02/19/bert-tokenization-stats.html

日本語においては, 前のトークンと連続しているものということかしらん...?

## 朗読させる

法令を text to speech で朗読させたいですね!

ESPNet で standalone python script で日本語 text-to-speech するメモ
https://qiita.com/syoyo/items/cfc7f1af7588ab7963ce

ちょっとおかしいところありますができました.

https://clyp.it/wiybmdjk

## e-Gov 法令と対話したい

CMU SARA プロジェクトが参考になります.

http://articulab.hcii.cs.cmu.edu/projects/sara/

まずは法令に特化した言語モデルあたりで学習させて日本語 ASR(Automatic Speech Recognition)が必要になるでしょうか.
　
## 基礎知識

そもそも, 法令の文章ってどうなっているのかしらん?

法律等を読み解くうえで必要な基礎知識
https://www.mirai-inc.jp/support/roppo/basic-knowledge.pdf

ありがとうございます.

## そのほか解析など

文書-法令条文グラフを利用した法律文書解析
https://www.anlp.jp/proceedings/annual_meeting/2016/pdf_dir/C6-3.pdf

可視化を目的としたテキストマイニングによる法律文の解析－要件効果構造の分類と権利義務配分の定量化の精度向上の試み－
https://www.jsise.org/taikai/2015/program/contents/pdf/I1-2.pdf

## テキスト可視化(?)

https://github.com/JasonKessler/scattertext

## 法令抽出

草案段階や, できたてほやほやの法令(e.g. 改正著作権法)

https://www.bunka.go.jp/seisaku/chosakuken/hokaisei/h30_hokaisei/

ですと, 縦書き(!)の PDF しか提供されていません.
(原本は一太郎あたりで作っているのでしょうか)

また, 差分も PDF になります.

とりあえず, 縦書き法令 PDF は python + pdfminer で抽出できました.

pythonで法律の改正案（縦書きPDF）を整えてテキストファイルにする
https://qiita.com/fsdfdsaff/items/51cdecbc4a2a566d1f86

ただ, 新旧対照のものは, 構文をうまくあつかえていませんので diff を取るのは難しいでした. XML データのアップデート待ちですかね.

## 活用案

できたらいいな.

* XML 法令文章を BERT/XLNET あたりでいいかんじに解析する
  * 最近(2019/12) 16 億円調達した Hugging Face https://jp.techcrunch.com/2019/12/18/2019-12-17-hugging-face-raises-15-million-to-build-the-definitive-natural-language-processing-library/ の Transformer + 日本語モデルを使えばペロッとできるやも? 
* XML 法令文章に対して検索, VCode などで使えるように IntelliSense 関連のモジュールを書く
* ESPNet あたりで ASR(音声認識)して, "ねぇ e-Gov 法令, 著作権法第 42 条について朗読して" と音声入力したら音声認識して著作権法第 42 条を同じく ESPNet で text-to-speech させたい

## さらなる高みへ

文法の曖昧性を排除するため, 法令を BERT/XLNET あたりで解析したのち, 法令に特化した言語もしくは中間言語形式を定義したい(Prolog っぽいのとか?). ここから各言語に translate できるとなおよい.

### 参考文献

号の列挙や参照表現をもつ法令文の論理式への変換
https://www.anlp.jp/proceedings/annual_meeting/2008/pdf_dir/PA2-9.pdf

法令工学の提案
https://dspace.jaist.ac.jp/dspace/bitstream/10119/4497/1/COE-Research-vol2.pdf

https://www.jstage.jst.go.jp/article/jssst/36/3/36_3_33/_pdf

## References

* （移動・再投稿）e-Gov法令APIとXML　Pythonを用いた特定ワードが含まれる条文抽出 https://qiita.com/kzuzuo/items/d53ff2e092a69424fea0
* 法令APIが使いづらい話 https://qiita.com/aoharu514/items/a384b0d2dabdd9b13526

## TODO

* [ ] 法令の Formal verification したい. 他の条文と齟齬がないかなど.
* [ ] Flutter desktop あたりでオシャンティな UI つくる
* [ ] 海外の法令(e.g. US)を扱い, 英文契約書や英文利用規約をチェックできるようにする
  * 日本語で契約書/利用規約などつくったとしても, 準拠法をシンガポールとかにするときに必要 
  * [ ] 外国法邦訳の調べ方 https://rnavi.ndl.go.jp/research_guide/entry/gaikokuhou-houyaku.php
* [ ] ESPNet https://github.com/espnet/espnet で ASR(Automatic Speech Recognition. 音声認識)して音声で法令検索とかできるようにする
* [ ] BERT, XLNET あたりでよろしく法令文章を解析する
* [ ] ツールを作って公開した場合, **弁護士法７２条**に抵触しないか調べる
  * 参考: 本サービスと弁護士法等について https://ai-con.lawyer/about-bengoshiho
* [ ] e-Gov 法令データを活用するシステムを作り, 効率的に学習することで, 弁護士資格を取得し合法的に活動できるようにする > "54歳から弁護士になった人"の人生設計 https://president.jp/articles/-/25855
* [ ] 優秀な若人さまが, **人類史上最速で優秀な e-Gov 法令解析若人さまへと昇華なされるスキーム**を確立する旅に出たい.