コード例 #1
0
    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
コード例 #2
0
 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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
 def save_index(self):
     try:
         dump_yaml(json.loads(self.index.json()), self.index_fn)
     except FileNotFoundError:
         pass
コード例 #6
0
 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)
コード例 #7
0
 def save_meta(self):
     dump_yaml(json.loads(self.meta.json()), self.meta_fn)