[PYTHON] Créez un pdf facile à lire des lois et ordonnances gouvernementales à l'aide de l'API Law

introduction

Si vous souhaitez consulter les lois et règlements sur Internet, e-Gov Law Search publié par le ministère des Affaires intérieures et des Communications. Et Law api, mais la mise en page est subtile et la feuille de style xml n'est pas fournie. Ni l'un ni l'autre n'est très facile à utiliser.

Pour tenter d'utiliser la loi api dans un article précédent de qiita,

Si vous voulez voir les lois et règlements dans l'environnement en ligne, vous pouvez vous y référer, mais il y a des moments où vous voulez utiliser les lois et règlements dans l'environnement hors ligne ou les imprimer et les utiliser sur des supports papier, donc je l'ai obtenu de l'api de la loi J'ai créé un script pour transformer la loi en pdf avec une mise en page appropriée comme suit. EXOKk1CUYAAf07_.png Cette mise en page est organisée en référence au pdf publié dans Loi japonaise PDF + XML PDF et XML de la loi japonaise. Depuis que la mise à jour de la page d'accueil s'est arrêtée en 2016, j'ai décidé de la faire moi-même.

L'utilisation, etc. est décrite en détail ci-dessous, mais si vous souhaitez simplement l'utiliser, consultez [Construction de l'environnement (pour les étudiants en droit)](# Construction de l'environnement (pour les étudiants en droit)) et [Utilisation](# Utilisation). Je pense que ça suffit. [Explication du code](# Explication du code) est également écrit pour référence si vous souhaitez gérer vous-même l'API de loi ou modifier mon code. Veuillez également noter que Attention décrit le cas où cela ne fonctionne pas correctement.

Créer un environnement (pour les étudiants en droit)

Fondamentalement, il est conçu pour être utile pour les apprenants en droit, mais je pense qu'il n'y a pas beaucoup d'apprenants en droit qui connaissent Python et TeX, donc je vais expliquer la construction de l'environnement un peu plus en détail. Si vous pouvez utiliser Python et TeX, vous n'en avez pas besoin, veuillez donc l'ignorer.

Présentez Python

Téléchargez la dernière version de Python sur le site officiel de Python (https://www.python.org/). キャプチャ.PNG Sélectionnez celui de votre système d'exploitation (je pense que c'est Windows ou Mac OS) dans l'onglet Téléchargements de la photo. Si vous avez des questions sur le processus détaillé, il existe de nombreuses pages Web qui expliquent l'introduction (par exemple, https://gammasoft.jp/blog/python-install-and-code-run/), veuillez donc vous y référer également.

Une fois téléchargé et installé, Python est prêt.

Présentez TeX

Veuillez installer TeX Live (voir https://texwiki.texjp.org/?TeX%20Live etc.). Quant à TeX, il semble que plus d'apprenants en droit l'utilisent que Python, donc si vous pouvez sélectionner LuaLaTeX comme méthode de composition dans votre environnement d'utilisation TeX actuel, c'est très bien. Une fois l'installation terminée, démarrez TeXworks, sélectionnez "Paramètres" dans l'onglet "Edition" et définissez le paramètre "Par défaut" pour la méthode de composition de l'onglet "Typeset" sur LuaLaTeX. キャプチャ.PNG

Ceci termine les réglages pour TeX.

Autres points susceptibles de trébucher

Je décrirai en détail la partie de Usage qui peut trébucher.

Téléchargement de code

Allez sur https://github.com/tbyuunagi/make_lawtex et appuyez sur Cloner ou téléchargez sur la photo. キャプチャ00.PNG

Télécharger les demandes

Ouvrez une invite de commande pour Windows ou un terminal pour Mac (voir https://techacademy.jp/magazine/5318 et https://techacademy.jp/magazine/5155) et entrez "pip install requests" Veuillez exécuter.

Exécutez make_lawtex.py

Si vous double-cliquez sur le fichier make_lawtex.py téléchargé et que vous l'exécutez (comme décrit dans [Comment utiliser](# Utilisation)), il n'y a pas de problème. Si vous double-cliquez pour ouvrir le Bloc-notes etc., https://boukenki.info/python-py-file-doubleclick-kidou-jikkou-houhou/ etc. pour Windows, https: / pour Mac Veuillez vous référer à /yutori-gi.com/pythonscript-run/ etc. et configurer pour ouvrir le fichier .py à partir de Python.

Comment utiliser

Le code est ci-dessous. https://github.com/tbyuunagi/make_lawtex

Cela devrait fonctionner correctement si vous pouvez utiliser Python et LuaLaTex. Nous avons confirmé l'opération sous Windows10 et Ubuntu18.04.

Installez la bibliothèque Python requêtes.

$ pip install requests

Lorsque vous exécutez make_lawtex.py

Veuillez saisir le mot-clé que vous souhaitez rechercher

Sera imprimé, alors entrez une partie ou la totalité du nom de loi que vous recherchez. Puis

1 Droit civil
2 Extrait de la loi d'application du code civil
3 Loi relative aux dispositions spéciales du Code civil concernant les conditions de lutte contre le transfert de marchandises en mouvement et les créances
4 Loi relative aux exceptions spéciales au droit civil concernant les contrats de consommation électroniques
5 Ordonnance ministérielle sur la surveillance des sociétés spéciales de droit civil relevant de la compétence du Ministre de l'intérieur et des communications
6 Loi concernant les dispositions spéciales du Code civil concernant la période pendant laquelle l'héritage doit être approuvé ou abandonné en raison du grand tremblement de terre de l'est du Japon
7 Une ordonnance ministérielle qui fixe le montant fixé par l'ordonnance du ministère de la justice prévue à l'article 909-2 du code civil
8 Ordonnance ministérielle concernant la notification du ratio standard en vertu de l'article 404, paragraphe 3 du Code civil et de l'article 404, paragraphe 5 du même article
laquelle?

Les choix sont affichés avec un nombre sous la forme de (par exemple, lors de la recherche de «droit civil»), alors entrez la loi que vous recherchez par numéro. Ceci termine le processus Python et génère "nom de loi" .xml (obtenu à partir de l'api de loi) et "nom de loi" .tex dans le répertoire des lois (dans le cas du droit civil, du droit civil.xml et du droit civil. Texas).

Si vous composez le fichier .tex généré ici avec LuaLaTeX, vous obtiendrez un fichier pdf avec la mise en page indiquée au début. Par exemple, lors de l'utilisation de TeXworks après l'installation de TeXLive, la partie entourée de bleu dans la figure ci-dessous sera définie sur LuaLaTeX. Capture.PNG De plus, il est nécessaire d'effectuer le type défini trois fois afin d'afficher le tableau sur la bonne page (voir https://cns-guide.sfc.keio.ac.jp/2000/8/3/5.html etc.) .. Pour être honnête, j'ai l'impression de faire quelque chose de mal, mais je ne connais pas TeX, donc je ne sais pas. Je serais reconnaissant à quiconque connaissant une méthode plus appropriée de le signaler.

Description du code

Si vous voulez utiliser l'api de loi dans le même but, bien sûr, si vous voulez utiliser l'api de loi à d'autres fins, je pense qu'elle peut être détournée dans une certaine mesure, alors je vais expliquer la partie d'achoppement et c'était un peu compliqué. Les Spécifications de l'API Law (Version 1) seront désignées comme appropriées, veuillez donc préparer ceci si vous souhaitez lire en détail. Veuillez penser que cela fait référence à cela lorsque vous vous référez aux "spécifications" sans préavis ci-dessous.

import requests
import os
import xml.etree.ElementTree as ET

Ce qui précède est la bibliothèque utilisée.

#Utilisé uniquement lors de l'acquisition de la liste de lois et de l'enregistrement et de la mise à jour du fichier xml
def  get_lawlist():
    r = requests.get('https://elaws.e-gov.go.jp/api/1/lawlists/1')
    root = ET.fromstring(r.text)
    tree = ET.ElementTree(element=root)
    if not os.path.exists('laws/'):
        os.mkdir('laws')
    tree.write('laws/lawlist.xml', encoding='utf-8', xml_declaration=True)
    return

Accédez à l'API d'acquisition de la liste des noms de lois (pages 5 et 10 des spécifications) pour acquérir le fichier xml de la liste des noms de lois. Ce fichier xml est utilisé lors de la recherche du nom de loi ci-dessous. Par défaut

r = requests.get('https://elaws.e-gov.go.jp/api/1/lawlists/1')

Cependant, si vous n'avez pas besoin d'une ordonnance ministérielle, veuillez vous reporter à la section 4.2 de la page 10 des spécifications et changer la fin de l'url.

#Une fonction qui renvoie le nom officiel et le numéro d'une loi après avoir recherché une loi spécifique dans la liste des noms de lois par mot-clé.
def search_Laws(key):
    tree = ET.parse('laws/lawlist.xml')
    root = tree.getroot()
    LawName_list = []
    LawNo_list = []
    for child in root[1]:
        if child.tag != 'Category':
            if key in child[0].text:
                LawName_list.append(child[0].text)
                LawNo_list.append(child[1].text)
    return LawName_list, LawNo_list

Comme commenté, il s'agit d'une fonction qui prend un mot-clé comme argument et renvoie une liste de lois et réglementations qui incluent le mot-clé. Par mesure de précaution lorsque vous traitez avec l'API de loi, comme vous pouvez le voir à partir du contenu du XML obtenu à partir de l'API d'acquisition de liste de noms de loi mentionnée ci-dessus, une certaine loi est ce que nous reconnaissons comme un nom (LawName tel que "Civil Law") En outre, des attributs tels que la loi n ° m de l'année civile japonaise n (loi n °, telle que la «loi n ° 89 de Meiji 29») sont donnés. Bien sûr, les êtres humains ne savent pas en quoi consiste la loi en regardant le numéro de loi, mais dans l'api de la loi, ce numéro de loi est une clé unique pour spécifier une loi spécifique ( (Voir get_LawContent ()) donc nous devons être en mesure de gérer ces LawNos avec les LawNames que nous pouvons facilement reconnaître.

#Entrée sortie
def get_Law(search_Laws):
    LawName_list = search_Laws[0]
    LawNo_list = search_Laws[1]
    if len (LawName_list) == 0:
        print('Il n'y a pas de loi applicable')
        return None
    if len(LawName_list) == 1:
        return LawName_list[0], LawNo_list[0]
    for i,x in enumerate(LawName_list):
        print(i+1,x)
    print('laquelle?')
    input_num = int(input())-1
    LawName = LawName_list[input_num]
    LawNo = LawNo_list[input_num]
    return LawName, LawNo

Il s'agit de la partie entrée / sortie qui énumère et sélectionne les lois et réglementations qui correspondent aux mots-clés. Il n'y a pas de limite au nombre de lois répertoriées, donc la recherche par «loi» peut être une tâche ardue. Si une telle opération est désagréable, veuillez la limiter de manière appropriée.

# get_Obtenez le contenu en utilisant le résultat de la loi et enregistrez-le sous le nom légal pertinent
def get_LawContent(get_Law):
    LawName = get_Law[0]
    LawNo = get_Law[1]
    r = requests.get('https://elaws.e-gov.go.jp/api/1/lawdata/'+LawNo)
    root = ET.fromstring(r.text)
    tree = ET.ElementTree(element=root)
    if not os.path.exists('laws/'):
        os.mkdir('laws')
    tree.write('laws/' + LawName + '.xml', encoding='utf-8', xml_declaration=True)
    return LawName

Obtenez la loi souhaitée à l'aide de l'API d'acquisition de lois (page 6 de la spécification). Comme je l'ai mentionné un peu

r = requests.get('https://elaws.e-gov.go.jp/api/1/lawdata/'+LawNo)

Veuillez noter que ce que vous devez spécifier à la fin de l'url de la ligne est une loi No.

De plus, comme indiqué dans Notes, certaines lois et réglementations ne peuvent pas être obtenues par cette fonction car elles ne peuvent pas être obtenues par l'API loi en premier lieu.

def main():
    get_lawlist()
    Law_Name = search_get_LawContent()
    result = xml_to_tex(Law_Name)
    return result

C'est pour l'exécution. J'ai décidé d'exécuter get_lawlist () à chaque fois du point de vue de toujours utiliser la dernière liste, mais le traitement est un peu lent car lawlist.xml a une taille de données raisonnable. Puisque get_lawlist () est un processus qui n'a pas besoin d'être fait plusieurs fois une fois qu'il est exécuté, je pense qu'il est normal de commenter cette ligne à partir de la deuxième fois.

Ce qui précède est l'explication de la fonction. Vous pouvez voir ce qui n'est pas expliqué. Si vous n'aimez pas la mise en page générée, comparez le fichier TeX résultant avec la fonction xml_to_tex () et apportez les corrections nécessaires. C'est inutilement long, mais le préambule est tout écrit au début (ligne 79 de make_lawtex.py), il devrait donc suffire de le modifier par rapport à la mise en page.

Remarques

Certaines lois et réglementations ne peuvent pas être obtenues par la loi api en raison de la taille des données. Plus précisément, je voudrais que vous voyiez la partie de restriction de https://www.e-gov.go.jp/elaws/interface_api/index.html, mais ce qui semble être nécessaire pour l'apprentissage juridique et ne peut pas être obtenu Il y a la loi de l'impôt sur le revenu et la loi sur les mesures fiscales spéciales. Nous prévoyons de répondre dans un proche avenir, mais veuillez noter que nous ne pouvons pas obtenir ces lois et règlements pour le moment.

en conclusion

La redistribution, la modification et les remarques faites par vous-même sont gratuites, alors n'hésitez pas à les utiliser. Si vous avez des bogues ou des suggestions d'amélioration (non seulement sur le code mais aussi sur cet article), veuillez nous en informer dans les commentaires ici, pull request sur github, ou My Twitter. ..

Recommended Posts

Créez un pdf facile à lire des lois et ordonnances gouvernementales à l'aide de l'API Law
Créer une application à l'aide de l'API Spotify
Créez une API pour convertir des fichiers PDF en images TIF avec FastAPI et Docker
Créez une API REST à l'aide du modèle appris dans Lobe et TensorFlow Serving.
Créez une application qui fonctionne bien avec les rapports des utilisateurs à l'aide de l'API COTOHA
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Utilisez l'API Spotify pour obtenir toutes les chansons des informations sur les chansons d'Arashi et vérifier l'index
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
(Déplacer / Republier) Extraire du texte contenant des mots spécifiques à l'aide de l'API e-Gov law et de XML Python
Obtenez le prix d'achat et de vente de la monnaie virtuelle avec l'API de l'échange Zaif et créez un graphique
Obtenez des données à l'aide de l'API du ministère des Affaires intérieures et des Communications
Créez un robot de réponse automatique en temps réel à l'aide de l'API Twitter Streaming
Afficher le contenu de la file d'attente à l'aide de l'API Web de gestion RabbitMQ
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
J'ai créé un guide de programme original en utilisant l'API de guide de programme NHK.
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
La loterie est-elle rentable? ~ LOTO7 et la loi des grands nombres ~
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle