TL; DR
Klicken Sie auf die API von Python, um alle Parlamentsprotokolle zu sammeln.
Sie können auch über die grafische Benutzeroberfläche im Suchsystem für Aufzeichnungen von Parlamentssitzungen suchen, aber Es gibt ein geeignetes API-Handbuch .jp / api.html).
Hier sammeln wir Protokolle mit den folgenden Schlüsselwörtern für die Aussagen, die in den 10 Jahren von 2010 bis 2019 gemacht wurden.
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 26 15:05:04 2019
@author: boomin
pip install untangle
"""
import urllib
import untangle
import urllib.parse
import re
import pandas as pd
import os
spt = os.sep
pklDir = "pkl"
def getSpeech(keyword:str):
start="1" #'#Seriennummer der Bemerkung
apipath = 'http://kokkai.ndl.go.jp/api/1.0/speech?'
#Regulärer Ausdruck, um den Sprecherteil aus dem Inhalt der Anweisung zu entfernen
p = re.compile(r'^○([^ ]+)Du?\s(.+)')
startdate='2010-01-01'
enddate= '2020-01-01'
df = pd.DataFrame()
while start!=None:
date = []
speaker = []
speech = []
speakerGroup = []
speakerPosition = []
url = apipath+urllib.parse.quote(
'maximumRecords=100&recordPacking=xml'
+ '&from=' + startdate
+ '&until=' + enddate
+ '&any=' + keyword
+ f'&startRecord={start}'
)
#Suchergebnisse für Signalanfragen abrufen (XML)
obj = untangle.parse(url)
for record in obj.data.records.record:
speechrecord = record.recordData.speechRecord
speechdata = speechrecord.speech.cdata.replace("\u3000"," ").replace("\n"," ")
m = p.search(speechdata)
if not isinstance(m,type(None)):
date.append(speechrecord.date.cdata)
speaker.append(speechrecord.speaker.cdata)
speech.append(m.group(2))
speakerGroup.append(speechrecord.speakerGroup.cdata)
speakerPosition.append(speechrecord.speakerPosition.cdata)
offset = int(start)-1
index = [ offset+n for n in list(range(len(date))) ]
adddf = pd.DataFrame({
"date":date,
"speaker":speaker,
"speech":speech,
"speakerGroup":speakerGroup,
"speakerPosition":speakerPosition,
}, index=index)
df = pd.concat([df, adddf ])
#Da jeweils nur 100 Artikel zurückgegeben werden, ändern Sie die Startposition und senden Sie die GET-Funktion wiederholt.
try:
start = obj.data.nextRecordPosition.cdata
print(f"finished: {start}")
except:
pass
break
df["date"] = pd.to_datetime(df["date"])
return df
if __name__ == '__main__':
df1 = getSpeech('Künstliche Intelligenz')
df2 = getSpeech('AI')
df3 = getSpeech('Große Daten')
df4 = getSpeech('Maschinelles Lernen')
df = pd.concat([df1,df2,df3,df4])
#Doppelte Bemerkungen löschen
df.drop_duplicates(subset=["date","speaker","speech"], inplace=True)
df.sort_values(by=["date","speaker"],inplace=True)
df.reset_index(drop=True, inplace=True)
pd.to_pickle(df, f"{pklDir}{spt}kokkailog.pkl")
df.to_csv(f"{pklDir}{spt}kokkailog.tsv", sep="\t")
In[4]: df.tail()
Out[4]:
# date speaker ... speakerGroup speakerPosition
#4288 2019-12-05 Taku Eto...Liberaldemokratische Partei, unabhängiger Minister für Land- und Forstwirtschaft und Fischerei
#4289 2019-12-05 Masayoshi Hamada...Komei Party
#4290 2019-12-05 Naeko Ishii...Japan Restaurierungsparty
#4291 2019-12-05 Takashi Midorikawa...Verfassungsdemokratisch / National / Sozialversicherung / Unabhängiges Forum
#4292 2019-12-05 Koichi Hagita...Liberaldemokratische Partei, unabhängiger Minister für Bildung, Kultur, Sport, Wissenschaft und Technologie
#
#[5 rows x 5 columns]
Recommended Posts