Source code for emop.lib.emop_job

import os
from emop.lib.emop_base import EmopBase
from emop.lib.models.emop_batch_job import EmopBatchJob
from emop.lib.models.emop_font import EmopFont
from emop.lib.models.emop_page import EmopPage
from emop.lib.models.emop_work import EmopWork
from emop.lib.models.emop_page_result import EmopPageResult
from emop.lib.models.emop_postproc_result import EmopPostprocResult
from emop.lib.utilities import get_temp_dir


[docs]class EmopJob(object): def __init__(self, job_data, settings, scheduler): self.settings = settings self.scheduler = scheduler self.parse_data(data=job_data) self.output_root_dir = EmopBase.add_prefix(self.settings.output_path_prefix, self.settings.ocr_root) self.temp_dir = get_temp_dir() self.image_path = self.page.image_path # The values below rely on values set above self.output_dir = self.get_output_dir() self.txt_file = self.output_file("txt") self.xml_file = self.output_file("xml") self.hocr_file = self.output_file("hocr") self.idhmc_txt_file = self.add_filename_suffix(self.txt_file, "IDHMC") self.idhmc_xml_file = self.add_filename_suffix(self.xml_file, "IDHMC") self.alto_txt_file = self.add_filename_suffix(self.txt_file, "ALTO") self.alto_xml_file = self.add_filename_suffix(self.xml_file, "ALTO")
[docs] def parse_data(self, data): self.id = data["id"] self.batch_job = EmopBatchJob(self.settings) self.font = EmopFont(self.settings) self.page = EmopPage(self.settings) self.work = EmopWork(self.settings) self.page_result = EmopPageResult(self.settings) self.postproc_result = EmopPostprocResult(self.settings) self.batch_job.setattrs(data["batch_job"]) self.font.setattrs(data["batch_job"]["font"]) self.page.setattrs(data["page"]) self.work.setattrs(data["work"]) self.page_result.set_existing_attrs(data.get("page_result")) self.postproc_result.set_existing_attrs(data.get("postproc_result")) self.page_result.page_id = self.page.id self.page_result.batch_id = self.batch_job.id self.postproc_result.page_id = self.page.id self.postproc_result.batch_job_id = self.batch_job.id
[docs] def get_output_dir(self): """ Provide the job output directory Format is the following: /<config.ini output_path_prefix><config.ini ocr_root>/<batch ID>/<work ID> Example: /dh/data/shared/text-xml/IDHMC-OCR/<batch.id>/<work.id> Returns: str: Output directory path """ path = os.path.join(self.output_root_dir, str(self.batch_job.id), str(self.work.id)) return path
[docs] def output_file(self, fmt): """ Provide the job output file name Format is the following: <output_dir>/<page.number>.<fmt> Example: <output_dir>/<page.number>.<fmt> Args: fmt (str): File format (extension) for file path Returns: str: Output file path """ filename = "%s.%s" % (self.page.number, str(fmt).lower()) path = os.path.join(self.output_dir, filename) return path
[docs] def add_filename_suffix(self, file, suffix): """ Add filename suffix This function adds a suffix to a filename before the extension Example: add_filename_suffix('5.xml', 'IDHMC') 5.xml -> 5_IDHMC.xml Args: file (str): File name to add suffix suffix (str): The suffix to add Returns: str: The filename with suffix added before extension """ filename, ext = os.path.splitext(file) return "%s_%s%s" % (filename, suffix, ext)