TL; DR
Frappez l'API de python pour collecter les minutes parlementaires.
Vous pouvez également effectuer une recherche par interface graphique à partir du Système de recherche des enregistrements des réunions parlementaires, mais [Il existe un manuel API approprié](https: //kokkai.ndl.go) .jp / api.html).
Ici, nous allons collecter des minutes contenant les mots-clés suivants pour les déclarations faites au cours des 10 années de 2010 à 2019.
# -*- 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" #'#Numéro de série de la remarque
apipath = 'http://kokkai.ndl.go.jp/api/1.0/speech?'
#Expression régulière pour supprimer la partie locuteur du contenu de l'instruction
p = re.compile(r'^○([^ ]+)Tu?\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}'
)
#Obtenir les résultats de la recherche de demande de signal (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 ])
#Étant donné que seuls 100 éléments sont renvoyés à la fois, modifiez la position de départ et envoyez à plusieurs reprises la fonction GET.
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('Intelligence artificielle')
df2 = getSpeech('AI')
df3 = getSpeech('Big Data')
df4 = getSpeech('Apprentissage automatique')
df = pd.concat([df1,df2,df3,df4])
#Supprimer les remarques en double
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...Parti libéral démocrate, Association indépendante Ministre de l'agriculture, des forêts et des pêches
#4289 2019-12-05 Masayoshi Hamada...Fête Komei
#4290 2019-12-05 Naeko Ishii...Fête de la restauration au Japon
#4291 2019-12-05 Takashi Midorikawa...Démocrate constitutionnel / National / Assurance sociale / Forum indépendant
#4292 2019-12-05 Koichi Hagita...Parti libéral démocrate, ministre indépendant de l'Éducation, de la Culture, des Sports, des Sciences et de la Technologie
#
#[5 rows x 5 columns]
Recommended Posts