[PYTHON] Erstellen Sie mithilfe der Gesetzes-API ein einfach zu lesendes PDF mit Gesetzen und Regierungsverordnungen

Einführung

Wenn Sie auf Gesetze und Vorschriften im Internet verweisen möchten, wird e-Gov Law Search vom Ministerium für innere Angelegenheiten und Kommunikation veröffentlicht. Und Law api, aber das Layout ist subtil und das XML-Stylesheet wird nicht bereitgestellt. Keiner von ihnen ist sehr einfach zu bedienen.

Als Versuch, das Gesetz API in einem früheren Artikel von Qiita zu verwenden,

Wenn Sie die Gesetze und Vorschriften in der Online-Umgebung sehen möchten, können Sie sich auf diese beziehen, aber es gibt Zeiten, in denen Sie die Gesetze und Vorschriften in der Offline-Umgebung verwenden oder auf Papiermedien drucken und verwenden möchten, also habe ich sie von der Gesetzes-API erhalten Ich habe ein Skript erstellt, um das Gesetz wie folgt in ein PDF mit einem geeigneten Layout umzuwandeln. EXOKk1CUYAAf07_.png Dieses Layout ist unter Bezugnahme auf das in Japanisches Recht PDF + XML PDF und XML des japanischen Rechts veröffentlichte PDF angeordnet. Da das Update der Homepage 2016 eingestellt wurde, habe ich beschlossen, es selbst zu machen.

Die Verwendung usw. wird im Folgenden ausführlich beschrieben. Wenn Sie sie jedoch nur verwenden möchten, lesen Sie [Umgebungskonstruktion (für Jurastudenten)](# Umgebungskonstruktion (für Jurastudenten)) und [Verwendung](# Verwendung). Ich denke es ist genug. [Code-Erklärung](# Code-Erklärung) dient auch als Referenz, wenn Sie die Gesetzes-API selbst bearbeiten oder meinen Code ändern möchten. Beachten Sie außerdem, dass Achtung den Fall beschreibt, in dem es nicht richtig funktioniert.

Aufbau einer Umgebung (für Jurastudenten)

Grundsätzlich ist es für Jurastudenten nützlich, aber ich denke, dass es nicht viele Jurastudenten gibt, die mit Python und TeX vertraut sind, daher werde ich die Umgebungskonstruktion etwas detaillierter erläutern. Wenn Sie Python und TeX verwenden können, benötigen Sie es nicht. Überspringen Sie es daher.

Stellen Sie Python vor

Laden Sie die neueste Version von Python von der offiziellen Python-Website (https://www.python.org/) herunter. キャプチャ.PNG Wählen Sie auf der Registerkarte "Downloads" auf dem Foto die für Ihr Betriebssystem aus (ich denke, es ist entweder Windows oder MacOS). Wenn Sie im detaillierten Prozess Fragen haben, gibt es viele Webseiten, auf denen die Einführung erläutert wird (z. B. https://gammasoft.jp/blog/python-install-and-code-run/). Lesen Sie daher auch diese.

Nach dem Herunterladen und Installieren ist Python bereit.

Stellen Sie TeX vor

Bitte installieren Sie TeX Live (siehe https://texwiki.texjp.org/?TeX%20Live usw.). TeX wird anscheinend von mehr Juristen verwendet als Python. Wenn Sie also LuaLaTeX als Satzmethode in Ihrer aktuellen TeX-Nutzungsumgebung auswählen können, ist dies in Ordnung. Starten Sie nach Abschluss der Installation TeXworks, wählen Sie "Einstellungen" auf der Registerkarte "Bearbeiten" und setzen Sie "Standard" für die Satzmethode auf der Registerkarte "Satz" auf LuaLaTeX. キャプチャ.PNG

Damit sind die Einstellungen für TeX abgeschlossen.

Andere Punkte, die wahrscheinlich stolpern

Ich werde den Teil von Usage, der möglicherweise stolpert, ausführlich beschreiben.

Code herunterladen

Gehen Sie zu https://github.com/tbyuunagi/make_lawtex und drücken Sie Klonen oder laden Sie das Foto herunter. キャプチャ00.PNG

Anfragen herunterladen

Öffnen Sie eine Eingabeaufforderung für Windows oder ein Terminal für Mac (siehe https://techacademy.jp/magazine/5318 und https://techacademy.jp/magazine/5155) und geben Sie "pip install request" ein. Bitte ausführen.

Führen Sie make_lawtex.py aus

Wenn Sie auf die heruntergeladene Datei make_lawtex.py doppelklicken und sie ausführen (wie unter [Verwendung](# Verwendung) beschrieben), liegt kein Problem vor. Wenn Sie doppelklicken, um Editor usw. zu öffnen, https://boukenki.info/python-py-file-doubleclick-kidou-jikkou-houhou/ usw. für Windows, https: / für Mac Weitere Informationen finden Sie unter /yutori-gi.com/pythonscript-run/ usw. und können Sie die .py-Datei in Python öffnen.

Wie benutzt man

Der Code ist unten. https://github.com/tbyuunagi/make_lawtex

Es sollte gut funktionieren, wenn Sie Python und LuaLaTex verwenden können. Wir haben den Vorgang unter Windows10 und Ubuntu18.04 bestätigt.

Installieren Sie die Python-Bibliothek Anfragen.

$ pip install requests

Wenn Sie make_lawtex.py ausführen

Bitte geben Sie das Schlüsselwort ein, nach dem Sie suchen möchten

Wird gedruckt, geben Sie einen Teil oder den gesamten gesuchten Namen ein. Dann

1 Zivilrecht
2 Auszug aus dem Gesetz zur Durchsetzung des Bürgerlichen Gesetzbuchs
3 Gesetz über besondere Bestimmungen des Bürgerlichen Gesetzbuches über die Anforderungen gegen die Übertragung von beweglichen Waren und Forderungen
4 Gesetz über besondere Ausnahmen vom Zivilrecht in Bezug auf elektronische Verbraucherverträge
5 Ministerialverordnung zur Aufsicht über besondere zivilrechtliche Körperschaften unter der Zuständigkeit des Ministers für innere Angelegenheiten und Kommunikation
6 Gesetz über besondere Bestimmungen des Bürgerlichen Gesetzbuchs über den Zeitraum, für den die Erbschaft aufgrund des Erdbebens im Großen Osten Japans genehmigt oder aufgegeben werden sollte
7 Ministeriumsverordnung, die den in der Verordnung des Justizministeriums in Artikel 909-2 des Bürgerlichen Gesetzbuchs festgelegten Betrag festlegt
8 Ministeriumsverordnung zur Notifizierung des Standardverhältnisses nach Artikel 404 Absatz 3 des Bürgerlichen Gesetzbuchs und Artikel 404 Absatz 5 desselben Artikels
welcher?

Die Auswahlmöglichkeiten werden mit einer Nummer in Form von angezeigt (z. B. bei der Suche nach "Zivilrecht"). Geben Sie also das gesuchte Gesetz anhand der Nummer ein. Dies schließt den Python-Prozess ab und generiert "Gesetzname" .xml (erhalten von law api) und "Gesetzname" .tex unter dem Gesetzesverzeichnis (im Fall von Zivilrecht, Zivilrecht.xml und Zivilrecht). tex).

Wenn Sie die hier mit LuaLaTeX generierte .tex-Datei setzen, erhalten Sie eine PDF-Datei mit dem am Anfang gezeigten Layout. Wenn Sie beispielsweise TeXworks nach der Installation von TeXLive verwenden, wird der in der folgenden Abbildung von Blau umgebene Teil auf LuaLaTeX gesetzt. Capture.PNG Darüber hinaus muss der festgelegte Typ dreimal ausgeführt werden, um die Tabelle auf der richtigen Seite anzuzeigen (siehe https://cns-guide.sfc.keio.ac.jp/2000/8/3/5.html usw.). .. Um ehrlich zu sein, habe ich das Gefühl, dass ich etwas falsch mache, aber ich kenne TeX nicht, also weiß ich es nicht. Ich wäre dankbar, wenn jemand, der eine geeignetere Methode kennt, darauf hinweisen könnte.

Codebeschreibung

Wenn Sie die Gesetzes-API für den gleichen Zweck verwenden möchten, wenn Sie die Gesetz-API natürlich für andere Zwecke verwenden möchten, kann sie meiner Meinung nach bis zu einem gewissen Grad umgeleitet werden, daher werde ich den Stolperteil erläutern, und sie war etwas kompliziert. Law API Specifications (Version 1) wird als angemessen bezeichnet. Bereiten Sie dies daher vor, wenn Sie ausführlich lesen möchten. Bitte denken Sie daran, dass dies der Fall ist, wenn Sie ohne vorherige Ankündigung auf "Spezifikationen" verweisen.

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

Das Obige ist die verwendete Bibliothek.

#Wird nur verwendet, wenn die Gesetzesliste erfasst und die XML-Datei gespeichert und aktualisiert wird
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

Greifen Sie auf die API zur Erfassung von Gesetzesnamenlisten (Spezifikationen, Seiten 5 und 10) zu, um die XML-Datei für die Liste der Gesetzesnamen zu erhalten. Diese XML-Datei wird bei der Suche nach dem unten stehenden Gesetznamen verwendet. Standardmäßig

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

Wenn Sie jedoch keine Ministerialverordnung benötigen, lesen Sie bitte Abschnitt 4.2 auf Seite 10 der Spezifikationen und ändern Sie das Ende der URL.

#Eine Funktion, die den offiziellen Namen und die Nummer eines Gesetzes zurückgibt, nachdem nach einem bestimmten Gesetz aus der Liste der Gesetznamen nach Schlüsselwörtern gesucht wurde.
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

Wie kommentiert, handelt es sich um eine Funktion, die ein Schlüsselwort als Argument verwendet und eine Liste von Gesetzen und Vorschriften zurückgibt, die das Schlüsselwort enthalten. Als Vorsichtsmaßnahme beim Umgang mit der Gesetzes-API ist, wie Sie dem Inhalt der XML-Datei entnehmen können, die aus der oben erwähnten API zur Erfassung von Gesetzesnamenlisten stammt, ein bestimmtes Gesetz das, was wir als Namen erkennen (Gesetzname wie "Zivilrecht") Zusätzlich werden Attribute wie Gesetz Nr. M des japanischen Kalenderjahres n (Gesetz Nr. Wie "Gesetz Nr. 89 von Meiji 29") angegeben. Natürlich wissen die Menschen nicht, worum es im Gesetz geht, wenn sie sich die Gesetzesnummer ansehen, aber in der Gesetzes-API ist diese Gesetzesnummer ein eindeutiger Schlüssel zur Angabe eines bestimmten Gesetzes ( (Siehe get_LawContent ()), damit wir diese LawNos zusammen mit den LawNames verwalten können, die wir leicht erkennen können.

#Input-Output
def get_Law(search_Laws):
    LawName_list = search_Laws[0]
    LawNo_list = search_Laws[1]
    if len (LawName_list) == 0:
        print('Es gibt kein anwendbares Recht')
        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('welcher?')
    input_num = int(input())-1
    LawName = LawName_list[input_num]
    LawNo = LawNo_list[input_num]
    return LawName, LawNo

Dies ist der Eingabe- / Ausgabeteil, der Gesetze und Vorschriften auflistet und auswählt, die den Schlüsselwörtern entsprechen. Die Anzahl der aufgeführten Gesetze ist unbegrenzt, daher kann die Suche nach "Gesetzen" eine entmutigende Aufgabe sein. Wenn eine solche Operation unangenehm ist, begrenzen Sie sie bitte entsprechend.

# get_Erhalten Sie den Inhalt anhand des Gesetzesergebnisses und speichern Sie ihn unter dem entsprechenden Gesetznamen
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

Erhalten Sie das gewünschte Gesetz mithilfe der API zum Erwerb von Gesetzen (Seite 6 der Spezifikation). Wie ich schon sagte

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

Bitte beachten Sie, dass Sie am Ende der URL der Zeile eine Gesetzesnummer angeben sollten.

Gemäß Anmerkungen können einige Gesetze und Vorschriften von dieser Funktion nicht erhalten werden, da sie von der Gesetzes-API überhaupt nicht erhalten werden können.

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

Es ist zur Ausführung. Ich habe beschlossen, get_lawlist () jedes Mal auszuführen, um immer die neueste Liste zu verwenden, aber die Verarbeitung ist etwas langsam, da lawlist.xml eine angemessene Datengröße hat. Da get_lawlist () ein Prozess ist, der nach seiner Ausführung nicht viele Male ausgeführt werden muss, halte ich es für in Ordnung, diese Zeile ab dem zweiten Mal zu kommentieren.

Das Obige ist die Erklärung der Funktion. Sie können sehen, was nicht erklärt wird. Wenn Ihnen das generierte Layout nicht gefällt, vergleichen Sie die resultierende TeX-Datei mit der Funktion xml_to_tex () und nehmen Sie die erforderlichen Korrekturen vor. Es ist nutzlos lang, aber der Präambelteil ist alles am Anfang geschrieben (Zeile 79 von make_lawtex.py), daher sollte es ausreichen, ihn in Bezug auf das Layout zu ändern.

Vorsichtsmaßnahmen

Einige Gesetze und Vorschriften können aufgrund der Datengröße nicht von der Gesetzes-API abgerufen werden. Insbesondere möchte ich, dass Sie die Einschränkungen für https://www.e-gov.go.jp/elaws/interface_api/index.html sehen, aber was für das Erlernen von Gesetzen notwendig erscheint und nicht erhältlich ist Es gibt das Einkommensteuergesetz und das Gesetz über besondere Steuermaßnahmen. Wir planen, in naher Zukunft zu reagieren. Bitte beachten Sie jedoch, dass wir diese Gesetze und Vorschriften derzeit nicht erhalten können.

abschließend

Weiterverteilung, Änderung und selbst gemachte Bemerkungen sind kostenlos. Sie können sie also gerne verwenden. Wenn Sie Fehler oder Verbesserungsvorschläge haben (nicht nur zum Code, sondern auch zu diesem Artikel), teilen Sie uns dies bitte in den Kommentaren hier mit, rufen Sie die Anfrage auf github oder My Twitter ab. ..

Recommended Posts

Erstellen Sie mithilfe der Gesetzes-API ein einfach zu lesendes PDF mit Gesetzen und Regierungsverordnungen
Erstellen Sie eine Anwendung mit der Spotify-API
Erstellen Sie eine API zum Konvertieren von PDF-Dateien in TIF-Bilder mit FastAPI und Docker
Erstellen Sie eine REST-API mit dem in Lobe und TensorFlow Serving erlernten Modell.
Erstellen Sie mithilfe der COTOHA-API eine App, die gut mit Berichten von Personen funktioniert
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Verwenden Sie die Spotify-API, um alle Songs von Arashis Songinformationen abzurufen und den Index zu überprüfen
[Python] Ruft den Gesetzestext aus der e-GOV-Gesetz-API ab
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
(Verschieben / Reposten) Extrahieren Sie Text mit bestimmten Wörtern mithilfe der E-Gov-Gesetz-API und XML Python
Holen Sie sich den Kauf- und Verkaufspreis der virtuellen Währung mit der API von Zaif Exchange und erstellen Sie ein Diagramm
Erhalten Sie Daten mithilfe der API des Ministeriums für innere Angelegenheiten und Kommunikation
Erstellen Sie mithilfe der Twitter-Streaming-API einen Echtzeit-Bot für die automatische Antwort
Zeigen Sie den Inhalt der Warteschlange mithilfe der RabbitMQ Management-Web-API an
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Ich habe einen Original-Programmführer mit der NHK-Programmführer-API erstellt.
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Ist die Lotterie rentabel? ~ LOTO7 und das Gesetz der großen Zahlen ~
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht