def create_opf(self, input_path, pecha_id): input_path = Path(input_path) self._build_dirs(input_path, id_=pecha_id) self.dirs["release_path"] = self.dirs["opf_path"].parent / "releases" self.dirs["release_path"].mkdir(exist_ok=True, parents=True) for i, vol_path in enumerate(sorted(input_path.iterdir())): print(f"[INFO] Processing {input_path.name}-{vol_path.name} ...") base_id = f"v{i+1:03}" if (self.dirs["opf_path"] / "base" / f"{base_id}.txt").is_file(): continue responses = self.get_input(vol_path) layers = self.build_layers(responses, vol_path.name, base_id) formatted_layers = self.format_layer(layers, base_id) base_text = self.get_base_text() # save base_text (self.dirs["opf_path"] / "base" / f"{base_id}.txt").write_text(base_text) # save layers vol_layer_path = self.dirs["layers_path"] / base_id vol_layer_path.mkdir(exist_ok=True) for layer, ann in formatted_layers.items(): layer_fn = vol_layer_path / f"{layer}.yml" dump_yaml(ann, layer_fn) self.set_vols_meta(vol_path.name, f"{base_id}.txt") # create meta.yml meta_fn = self.dirs["opf_path"] / "meta.yml" dump_yaml(self.get_metadata(input_path.name), meta_fn) return self.dirs["opf_path"].parent
def update_layers(self, vol_id, updater): """ Update all the layer annotations """ for layer_fn in (self.layer_path / vol_id).iterdir(): layer = load_yaml(layer_fn) update_ann_layer(layer, updater) dump_yaml(layer, layer_fn)
def update_index_layer(self): layer = load_yaml(self.index_path) for ann in layer["annotations"]: # update text span self.update_text_span(ann["span"]) # update sub-text span for sub_text in ann["parts"]: self.update_text_span(sub_text["span"]) dump_yaml(layer, self.index_path)
def create_opf(self, input_path): input_path = Path(input_path) self._build_dirs(input_path) m_text = self.get_input(input_path) layers = self.build_layers(m_text) base_text = self.get_base_text(m_text) # save layers for layer, ann in layers.items(): layer_fn = self.dirs["layers_path"] / f"{layer}.yml" dump_yaml(ann, layer_fn) # save base_text (self.dirs["opf_path"] / "base.txt").write_text(base_text)
def save_index(self): try: dump_yaml(json.loads(self.index.json()), self.index_fn) except FileNotFoundError: pass
def save_layer(self, base_name: str, layer_name: LayerEnum, layer: Layer): layer_fn = self._mkdir( self.layers_path / base_name) / f"{layer_name.value}.yml" dump_yaml(json.loads(layer.json()), layer_fn)
def save_meta(self): dump_yaml(json.loads(self.meta.json()), self.meta_fn)