<jupyter_start><jupyter_text>1. Creamos los modelos de lenguaje<jupyter_code>import os
import pickle
from collections import Counter, defaultdict
def deserialize_object(path):
    pickle_in = open(path,"rb")
    obj = pickle.load(pickle_in)
    pickle_in.close()
    print("Cargado el objeto", path.split("/")[- 1])
    return obj
path_dic = 'dic_specialties.pkl'
dic_spe = deserialize_object(path_dic)
path_save_model_lang = './models_languages/'
def read_diccionary_specialties(dic_spe, path_save_model_lang):

    for specialty, dic in dic_spe.items():
        
        print("Especialidad:", specialty)
        list_doc_specialty = dic['docs']
        dic_terms = dic['terms']

        # fichero donde guardaremos el modelo de lenguaje
        fout = open(path_save_model_lang + specialty + '.ml', 'w')

        # creamos el modelo de lenguaje
        model = defaultdict(lambda: defaultdict(lambda: 0))

        for term, list_doc_term in dic_terms.items():

            if type(term) is tuple:

                # bigramas
                if len(term) == 2:
                    w1 = term[0]
                    w2 = term[1]
                    model[(w1)][w2] += len(list_doc_term)

                # trigramas
                elif len(term) == 3:
                    w1 = term[0]
                    w2 = term[1]
                    w3 = term[2]
                    model[(w1, w2)][w3] += len(list_doc_term)

        # some examples
        #print (model["enfermedad", "de"]["alzheimer"])

        print(">>Escribiendo modelo")
        # transformamos en probabilidades
        for tuple_1 in model:

            total_count = float(sum(model[tuple_1].values()))
            #print("Total count:" , tuple_1, '->', total_count)

            for tuple_2 in model[tuple_1]:
                model[tuple_1][tuple_2] /= total_count

                fout.write(str(tuple_1) + ' ' + str(tuple_2) + ' ' + str(model[tuple_1][tuple_2]) + "\n")

        print(">>Escribiendo unigramas")
        # unigramas
        for term, list_doc_term in dic_terms.items():
            if not type(term) is tuple:

                fout.write(str(term) + ' ' + str(len(list_doc_term)) + "\n")


        fout.close()
        print("Fichero escrito")
read_diccionary_specialties(dic_spe, path_save_model_lang)<jupyter_output>Especialidad: H02.403.645_palliative_medicine
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.810.526_otolaryngology
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.429.675_pulmonary_medicine
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.810.425_neurosurgery
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.429.323_endocrinology
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.740_radiology
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.810.803_thoracic_surgery
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.763.750_gynecology
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.810.450_obstetrics
>>Escribiendo modelo
>>Escribiendo unigramas
Fichero escrito
Especialidad: H02.403.429.405_gastroenterology
>>Escribiend[...]
{'fraction_non_alphanumeric': 0.10792019347037485, 'fraction_numerical': 0.040810157194679564, 'mean_word_length': 2.9915560916767188, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 47, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '496725', 'license': 'MIT', 'n_tokens_mistral': 1243, 'n_tokens_neox': 1124, 'n_words': 226, 'path': '04_language_model/01_create_model_language.ipynb', 'repo_name': 'plopezgarcia/specialist-lexicon', 'size': '3308'}