ocr/hocrtotei

58 lines
1.8 KiB
Plaintext
Raw Normal View History

2018-10-29 09:38:50 +00:00
#!/usr/bin/env python3.5
2018-10-09 12:43:23 +00:00
# coding=utf-8
import xml.etree.ElementTree as ET
from xml.sax.saxutils import escape
import os
2019-04-14 12:33:40 +00:00
import re
2018-10-09 12:43:23 +00:00
import sys
2019-05-13 13:03:43 +00:00
input_files = sorted(
filter(
lambda x: x.endswith(".hocr"),
os.listdir(sys.argv[1])
),
key=lambda x: int(re.search(r'\d+', x).group(0))
)
# "page-1.hocr" -> "1"
2018-10-09 12:43:23 +00:00
output_file = open(sys.argv[2], "w")
2019-05-13 13:03:43 +00:00
output_file.write(
'<?xml version="1.0" encoding="UTF-8"?>\n'
+ '<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:id="dtabf">\n'
+ ' <teiHeader>\n'
+ ' <fileDesc>\n'
+ ' <titleStmt/>\n'
+ ' <publicationStmt/>\n'
+ ' <sourceDesc/>\n'
+ ' </fileDesc>\n'
+ ' <encodingDesc/>\n'
+ ' <profileDesc/>\n'
+ ' </teiHeader>\n'
+ ' <text>\n'
+ ' <body>\n'
)
2018-10-09 12:43:23 +00:00
for input_file in input_files:
tree = ET.parse(os.path.join(sys.argv[1], input_file))
2019-04-14 12:33:40 +00:00
page_number = int(re.search(r'\d+', input_file.split(".")[0]).group(0))
output_file.write(' <pb n="%i"/>\n' % (page_number))
2018-10-09 12:43:23 +00:00
for para in tree.findall(".//*[@class='ocr_par']"):
output_file.write(' <p>\n')
for line in para.findall(".//*[@class='ocr_line']"):
first_word_in_line = True
for word in line.findall(".//*[@class='ocrx_word']"):
if word.text is not None:
output_file.write((" " if first_word_in_line else " ") + escape(word.text.strip()))
first_word_in_line = False
if not first_word_in_line:
output_file.write('<lb/>\n')
output_file.write(' </p>\n')
2018-10-29 09:38:50 +00:00
2019-05-13 13:03:43 +00:00
output_file.write(
' </body>\n'
+ ' </text>\n'
+ '</TEI>')
2019-04-14 12:33:40 +00:00
output_file.close()