예제 #1
0
    def __generate_verb_rules(self, categories, max_dist, base_path):
        """
        Genera todas las reglas necesarias para generar un nuevo modelo con el
        tokenizer modificado a partir de las categorias indicadas. Para cada
        una de dichas categorias genera un directorio temporal del modelo (el
        mismo se será eliminado al finalizar el proceso de creación del modelo).

        Solo toma aquellas categorias que sean de tipo 'verb'

        :categories: [Dict] - Diccionario conteniendo las categorias y los token por cada una de ellas.

        :max_dist: [int] - Distancia de demerau levenshtein máxima

        :base_path: [String] - Ruta raíz del modelo.
        """
        for key in categories.keys():
            Logger.log('L-0006', [{'text': categories[key]['name'], 'color': HIGHLIGHT_COLOR}])
            category_path = build_path(base_path, categories[key]['default_dir'])
            create_dir_if_not_exist(category_path)
            for verb in categories[key]['dictionary']:
                Logger.log('L-0008', [{'text': verb, 'color': HIGHLIGHT_COLOR}])
                verb_path = build_path(category_path, verb)
                create_dir_if_not_exist(verb_path)
                exceptions = self.__token_generator.generate_verb_rules_set(verb, max_dist)
                dictionary_to_disk(build_path(verb_path, verb + TOKEN_RULES_GEN_RULES_EXT), exceptions)
            Logger.log('L-0007')
예제 #2
0
    def generate_model_data(self, model_seed, path, max_dist):
        """
        A partir de una model_seed, crea los archivos de configuración para modificar el tokenizer
        de un modelo de spacy. 

        :model_seed: [Dict] - Semilla para la creación del modelo.

        :base_path: [String] - Directorio base del modelo.

        :max_dist: [int] - Distancia de demerau levenshtein máxima para las deformaciones a los token.
        """
        base_path = build_path(TOKEN_RULES_GEN_TMP_ROOT_PATH, path)
        if check_dir_existence(base_path):
            ErrorHandler.raise_error('E-0027')
        Logger.log('L-0003')
        create_dir_if_not_exist(base_path)
        self.__save_model_seed(model_seed, base_path)
        nouns_path = build_path(base_path, TOKEN_RULES_GEN_TYPE_NOUN)
        create_dir_if_not_exist(nouns_path)
        verbs_path = build_path(base_path, TOKEN_RULES_GEN_TYPE_VERB)
        create_dir_if_not_exist(verbs_path)
        self.__generate_noun_rules(model_seed['nouns'], max_dist, nouns_path)
        self.__generate_verb_rules(model_seed['verbs'], max_dist, verbs_path)
        Logger.log('L-0004')
        return get_absoulute_path(base_path)
예제 #3
0
    def __generate_noun_rules(self, categories, max_dist, base_path):
        """
        Genera todas las reglas necesarias para generar un nuevo modelo con el
        tokenizer modificado a partir de las categorias guardadas en el atributo
        categories de la clase. Para cada una de dichas categorias genera un
        directorio separado dentro del directorio maestro del nuevo modelo.

        Solo toma aquellas categorias que sean de tipo 'noun'

        :categories: [Dict] - Diccionario conteniendo las categorias y los tokens de cada una de ellas.

        :max_dist: [int] - Distancia de demerau levenshtein máxima

        :base_path: [String] - Ruta raíz del modelo.
        """

        for key in categories.keys():
            Logger.log('L-0009', [{'text': categories[key]['name'], 'color': HIGHLIGHT_COLOR}])
            category_path = build_path(base_path, categories[key]['default_dir'])
            create_dir_if_not_exist(category_path)
            for noun in categories[key]['dictionary']:
                Logger.log('L-0011', [{'text': noun, 'color': HIGHLIGHT_COLOR}])
                noun_path = build_path(category_path, noun)
                create_dir_if_not_exist(noun_path)
                exceptions = self.__token_generator.generate_noun_rules_set(noun, max_dist)
                dictionary_to_disk(build_path(noun_path, noun + TOKEN_RULES_GEN_RULES_EXT), exceptions)    
            Logger.log('L-0010')
예제 #4
0
    def save_model(model, path, tmp_files_path, new_model):
        """
        Guarda el modelo en el path solicitado.

        :model: [SpacyModelRef] - Referencia a un modelo de spacy.

        :path: [String] - Ruta en la cual guardar el modelo.

        :tmp_files_path: [String] - Ruta donde se encuentran los archivos temporales del modelo.

        :new_model: [Model] - Objeto que representa el nuevo modelo.
        """
        Logger.log('L-0030')
        base_path = build_path(MODEL_MANAGER_ROOT_DIR, path)
        if check_dir_existence(base_path):
            ErrorHandler.raise_error('E-0030')
        model_storage_path = get_absoulute_path(base_path)
        model.to_disk(model_storage_path)
        custom_model_files_path = build_path(base_path, MODEL_MANAGER_CUSTOM_FILES_DIR)
        create_dir_if_not_exist(custom_model_files_path)
        model_seed_path = build_path(tmp_files_path, TOKEN_RULES_GEN_MODEL_SEED_FILENAME)
        model_seed_copy_path = build_path(custom_model_files_path, TOKEN_RULES_GEN_MODEL_SEED_FILENAME, add_absolute_root=True)
        copy_file(model_seed_path, model_seed_copy_path, is_absolute_path=True)
        cfg_file_path = build_path(model_storage_path, MODEL_CONFIG_FILE_NAME)
        dictionary_to_disk(cfg_file_path, {
            'model_name': new_model.get_model_name(),
            'description': new_model.get_description(),
            'author': new_model.get_author(),
            'analyzer_rule_set': new_model.get_analyser_rules_set()
        }, True)
        Logger.log('L-0032')
예제 #5
0
    def delete_model_files(path):
        """
        Elimina los archivos de un modelo del disco.

        :path: [String] - Ruta a eliminar.
        """
        Logger.log('L-0070')
        full_path = build_path(MODEL_MANAGER_ROOT_DIR, path)
        remove_dir(full_path)
예제 #6
0
    def __save_model_seed(self, model_seed, base_path):
        """
        Guarda la semilla del modelo en el disco.

        :model_seed: [Dict] - Semilla para la creación del modelo.

        :base_path: [String] - Directorio base del modelo.
        """
        path = build_path(base_path, TOKEN_RULES_GEN_MODEL_SEED_FILENAME)
        dictionary_to_disk(path, model_seed)
예제 #7
0
    def export_model(model, output_path, split):
        """
        Genera los archivos de configuración, comprime los archivos de modelo y los
        copia al directorio solicitado.

        :model: [Model] - Modelo a exportar.

        :output_path: [String] - Ruta absouluta en donde se quiere guardar el
        modelo.

        :split: [boolean] - Indica si se debe particionar el paquete del modelo
        """
        Logger.log('L-0221')
        cfg = model.to_dict()
        cfg['analyzer_exceptions_set'] = [exception.to_dict() for exception in model.get_analyzer_exceptions_set()]
        base_path = build_path(MODEL_MANAGER_ROOT_DIR, model.get_model_id(), add_absolute_root=True)
        relative_base_path = build_path(MODEL_MANAGER_ROOT_DIR, model.get_model_id() + DIR_PATH_SEPARATOR + MODEL_CONFIG_FILE_NAME)
        dictionary_to_disk(relative_base_path, cfg)
        Logger.log('L-0224')
        Logger.log('L-0246')
        zip_model(base_path, output_path, model.get_model_id(), split)
        Logger.log('L-0265')
예제 #8
0
    def load_model(path):
        """
        Carga el modelo a partir del path.

        :path: [String] - Ruta para acceder al modelo.

        :return: [SpacyModelRef] - Referencia al modelo de spacy, None si no se pdo cargar el modelo.
        """
        try:
            full_path = build_path(MODEL_MANAGER_ROOT_DIR, path, add_absolute_root=True)
            nlp_model = spacy.load(full_path)
            return nlp_model
        except:
            ErrorHandler.raise_error('E-0092')
예제 #9
0
    def update_model_info(model_ref, model_path):
        """
        Actualiza la información en dico para el modelo que se encuentra en el path
        especificado.

        :model_ref: [SpacyModelRef] - Referencia del modelo de spacy

        :model_path: [String] - Directorio base del modelo (nombre del mismo).
        """
        Logger.log('L-0352')
        relative_base_path = build_path(MODEL_MANAGER_ROOT_DIR, model_path)
        relative_seed_path = build_path(MODEL_MANAGER_ROOT_DIR, model_path +  DIR_PATH_SEPARATOR + MODEL_MANAGER_CUSTOM_FILES_DIR)
        base_path = build_path(MODEL_MANAGER_ROOT_DIR, model_path, add_absolute_root=True)
        seed_dir_path = build_path(MODEL_MANAGER_ROOT_DIR, model_path +  DIR_PATH_SEPARATOR + MODEL_MANAGER_CUSTOM_FILES_DIR, add_absolute_root=True)
        cfg_file_path = build_path(MODEL_MANAGER_ROOT_DIR, model_path + DIR_PATH_SEPARATOR + MODEL_CONFIG_FILE_NAME, add_absolute_root=True)
        model_seed = load_json_file(build_path(seed_dir_path, TOKEN_RULES_GEN_MODEL_SEED_FILENAME))
        cfg = load_json_file(cfg_file_path)
        remove_dir(relative_base_path)
        create_dir_if_not_exist(relative_base_path)
        create_dir_if_not_exist(relative_seed_path)
        model_ref.to_disk(base_path)
        dictionary_to_disk(relative_seed_path + DIR_PATH_SEPARATOR + TOKEN_RULES_GEN_MODEL_SEED_FILENAME, model_seed)
        dictionary_to_disk(relative_base_path + DIR_PATH_SEPARATOR + MODEL_CONFIG_FILE_NAME, cfg)
        Logger.log('L-0353')