-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathparse.py
More file actions
99 lines (82 loc) · 3.13 KB
/
Copy pathparse.py
File metadata and controls
99 lines (82 loc) · 3.13 KB
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
#!/usr/bin/env python
# Copyright 2011-2014, University of Amsterdam. This program is free software:
# you can redistribute it and/or modify it under the terms of the GNU Lesser
# General Public License as published by the Free Software Foundation, either
# version 3 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
# for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import xml.etree.cElementTree as ElementTree
import gzip
DC_NS = "{http://purl.org/dc/elements/1.1/}"
DCX_NS = "{http://krait.kb.nl/coop/tel/handbook/telterms.html}"
OAI_NS = "{http://www.openarchives.org/OAI/2.0/}"
SRW_NS = "{info:srw/schema/1/dc-v1.1}"
DIDL_NS = "{urn:mpeg:mpeg21:2002:02-DIDL-NS}"
DDD_NS = "{http://www.kb.nl/namespaces/ddd}"
file_size = 0
file_count = 0
paper_count = 0
article_count = 0
import os
from os.path import getsize
for filename in os.listdir('.'):
if not filename.startswith("DDD"): continue
if not filename.endswith(".xml.gz"): continue
file_size += getsize(filename)
file_count += 1
try:
file = gzip.GzipFile(filename)
for event, elem in ElementTree.iterparse(file):
if elem.tag == OAI_NS + "record":
paper_dcx = elem.findall( "./" + OAI_NS + "metadata" +
"/" + DIDL_NS + "DIDL" +
"/" + DIDL_NS + "Item"
"/" + DIDL_NS + "Component" +
"/" + DIDL_NS + "Resource" +
"/" + SRW_NS + "dcx")
assert len(paper_dcx) == 1
#print paper_dcx[0].find(DCX_NS + "recordIdentifier").text
#print ElementTree.dump(paper_dcx[0])
items = elem.findall("./" + OAI_NS + "metadata" +
"/" + DIDL_NS + "DIDL" +
"/" + DIDL_NS + "Item" +
"/" + DIDL_NS + "Item")
for item in items:
dcx = item.findall("./" + DIDL_NS + "Component" +
"/" + DIDL_NS + "Resource" +
"/" + SRW_NS + "dcx")
for e in dcx:
if e.find(DDD_NS + "OCRConfidencelevel") != None:
# print "Paper"
paper_count += 1
continue
assert len(dcx) == 1
identifier = e.find(DCX_NS + "recordIdentifier").text
last_part = identifier.split(':')[-1]
assert last_part[0] == "a"
#print last_part,
article_parts = item.findall("./" + DIDL_NS + "Component" +
"/" + DIDL_NS + "Resource" +
"/" + DCX_NS + "zoning" +
"/" + DCX_NS + "article-part")
article_count += 1
# if last_part == "a0001":
# print ElementTree.dump(e)
# print [article_part.attrib["pageid"] for article_part in article_parts]
# print
elem.clear()
# break
except:
print "Error in", filename
raise
print "Total size (Gb):\t%.3f" % (float(file_size)/(1024**3))
print "Number of files:\t%d" % file_count
print "Number of papers:\t%d" % paper_count
print "Number of articles:\t%d" % article_count
print