-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathretrieveXML_uitspraak.py
105 lines (77 loc) · 2.5 KB
/
retrieveXML_uitspraak.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# coding: utf-8
# In[1]:
from __future__ import absolute_import
from lxml import etree
import re
import os
import sqlite3
import zipfile
# In[11]:
conn = sqlite3.connect(u'rechtspraak.db')
c = conn.cursor()
# In[3]:
# Create table
c.execute(u''' DROP TABLE IF EXISTS heldout_uitspraken''')
c.execute(u''' CREATE TABLE heldout_uitspraken
(id text PRIMARY KEY,
xml text,
text text
)
''')
# In[4]:
def retrieve_from_web(ecli):
link = u'http://data.rechtspraak.nl/uitspraken/content?id=' + ecli
try:
return etree.ElementTree().parse(link)
except Exception, e:
print u'online retrieval fails' + link
print e
return None
# unzip uitspraken:
# for dir in 20*; do $(cd $dir && unzip "*.zip"); done
def retrieve_from_filesystem(ecli, rootpath):
#zf = zipfile.ZipFile(rootpath)
year = ecli[11:15]
fn = unicode(year) + u'/' + re.sub(u':', u'_', ecli) + u'.xml'
#file = (zf.open(fn))
path = os.path.join(rootpath, fn).encode()
try:
return etree.ElementTree().parse(path)
except Exception, e:
#print('Exception: ', path)
#print e
return retrieve_from_web(ecli)
#return None
# In[5]:
rootpath = u'/media/ylja/DATA/scriptie/open-data'
# In[ ]:
def insert_into_uitspraken(id0, element, curs):
uitspraken = list(element.iterchildren(u'{*}uitspraak'))
if len(uitspraken) > 0:
uitspraak = uitspraken[0]
uitspraak_xml = etree.tostring(uitspraak)
# print uitspraak_xml
uitspraak_text = u' '.join([e.text for e in uitspraak.iterdescendants() if e.text is not None])
#print u'Dit is de uitspraak aan elkaar \n {0}' .format(uitspraak_text)
# remove consecutive spaces
uitspraak_text = re.sub(u' +', u' ', uitspraak_text)
# print u'Dit is de uiteindelijke uitspraak text \n {0}' .format(uitspraak_text)
query = ''' INSERT OR REPLACE INTO heldout_uitspraken
VALUES (?, ?, ?)
'''
curs.execute(query, (id0, uitspraak_xml, uitspraak_text))
# In[ ]:
ids = c.execute(u'SELECT id from heldout_uitspraken_meta')
c2 = conn.cursor()
for row in ids:
ecli = row[0]
# el = retrieve_from_filesystem(ecli, rootpath)
el = retrieve_from_web(ecli)
if el is not None:
insert_into_uitspraken(ecli, el, c2)
else:
print "nothing retrieved from web: " + unicode(ecli)
conn.commit()
c.execute(u'SELECT count(*) from heldout_uitspraken').fetchall()
conn.commit()
conn.close()