ocr/hocrtotei
2019-05-16 14:59:22 +02:00

59 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3.5
# coding=utf-8
from xml.sax.saxutils import escape
import argparse
import xml.etree.ElementTree as ET
parser = argparse.ArgumentParser(description='hocrtotei merges several hOCR files in order of their occurrence on command line to one TEI result file.')
parser.add_argument(
'i',
metavar='hOCR-sourcefile',
help='Input file in hOCR file format.',
nargs='+'
)
parser.add_argument(
'o',
metavar='TEI-destfile',
help='Output file.'
)
args = parser.parse_args()
output_file = open(args.o, "w")
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'
)
for index, input_file in enumerate(args.i):
tree = ET.parse(input_file)
output_file.write(' <pb n="%i"/>\n' % (index + 1))
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')
output_file.write(
' </body>\n'
+ ' </text>\n'
+ '</TEI>')
output_file.close()