import gradio as gr from transformers import AutoModelForTokenClassification,AutoModelForSequenceClassification, AutoTokenizer, pipeline from sentence_transformers import SentenceTransformer, util title = "Modelo Jurídico Mexicano" description = """
""" examples =[ ["El articulo 55, ultimo párrafo , de la ley de Navegación y Comercio Marítimo no vulnera el principio de igualdad y no discriminación, pues la norma no contempla una autorización a los pilotos de puerto para prestar el servicio de lanchaje sin un permiso para ello."], ["Una persona promovió juicio de amparo indirecto contra el auto por el cual el presidente de la Junta fijó fecha lejana para llevar a cabo su reinstalación, ordenada en el laudo que le fue favorable, pues en su opinión, ello constituía una tardanza excesiva de proveer adecuadamente. Por su parte, el Juez Federal negó la suspensión provisional, al considerar que de concederse, los efectos dejarían sin materia una eventual sentencia protectora, dado que la restitución que aquél solicita coincidiría exactamente, en su caso, con los del fallo protector"], ["En un juicio ordinario civil, una persona moral ejerció acción reivindicatoria respecto de una fracción de un bien inmueble que refiere es de su propiedad, mientras que su contraparte aduce que es un bien del dominio público, al tratarse de un anexo que forma parte de un monumento histórico"], ["El artículo 47 DE LA LEY DEL REGISTRO CIVIL del menor a que se le registre inmediatamente después de su nacimiento, se le asigne un nombre y apellidos, se le respete su derecho a la identidad y filiación en un sentido de pertenencia con sus progenitores biológicos y se protejan su desarrollo y bienestar integral, al garantizársele y reconocérsele sus lazos familiares, prerrogativas que salvaguardan los artículos de la Carta Magna y de los tratados internacionales invocados."], ["Diversas personas, físicas y morales, promovieron juicio de amparo indirecto en contra de la imposición de un mecanismo de votación por cédula secreta sobre un dictamen de reforma constitucional local, atribuible a diversas autoridades adscritas al Poder Legislativo de una entidad federativa, al considerarlo violatorio de, entre otros, el derecho a la libertad de expresión, el acceso a la información pública y la transparencia parlamentaria."] ] examples2 =[ ["El articulo 55, ultimo párrafo , de la ley de Navegación y Comercio Marítimo no vulnera el principio de igualdad y no discriminación, pues la norma no contempla una autorización a los pilotos de puerto para prestar el servicio de lanchaje sin un permiso para ello."] ] def get_entities(example): model_name = "hackathon-pln-es/jurisbert-finetuning-ner" tokenizer = AutoTokenizer.from_pretrained(model_name, add_prefix_space=True) model = AutoModelForTokenClassification.from_pretrained(model_name) token_classifier = pipeline("token-classification", aggregation_strategy="simple", model=model, tokenizer=tokenizer) results = token_classifier(example.lower()) output = [] i=0 item = None prev_item = None next_item = None while i < (len(results)): item = results[i] p=i-1 n=i+1 if p > 0: prev_item = results[p] if n<(len(results)): next_item = results[n] if (i==0): if item["start"]>0: output.extend([(example[0:item["start"]], None)]) output.extend([(example[item["start"]:item["end"]], item["entity_group"])]) if (next_item!=None): ##verificar el tramo entre actual y siguiente if(item["end"]!=next_item["start"]): output.extend([(example[item["end"]:next_item["start"]], None)]) i=i+1 if (item!=None): if (item["end"] < len(example)): output.extend([(example[item["end"]:len(example)], None)]) return output def clasifica_sistema_universal(example): tokenizer = AutoTokenizer.from_pretrained("hackathon-pln-es/jurisbert-class-tratados-internacionales-sistema-universal") model = AutoModelForSequenceClassification.from_pretrained("hackathon-pln-es/jurisbert-class-tratados-internacionales-sistema-universal") text_classifier = pipeline("text-classification", model=model, tokenizer=tokenizer) results= text_classifier (example) salida=[] for i in results: salida.append({i["label"]:i["score"]}) #return results[0]["label"], round(results[0]["score"], 5) return {i["label"]: float(i["score"]) for i in results} def clasifica_conv_americana(example): tokenizer = AutoTokenizer.from_pretrained("hackathon-pln-es/jurisbert-clas-art-convencion-americana-dh") model = AutoModelForSequenceClassification.from_pretrained("hackathon-pln-es/jurisbert-clas-art-convencion-americana-dh") text_classifier = pipeline("text-classification", model=model, tokenizer=tokenizer) results= text_classifier (example) return {i["label"]: float(i["score"]) for i in results} def similitud(example,example2): model = SentenceTransformer("hackathon-pln-es/jurisbert-tsdae-sentence-transformer") #Compute embedding for both lists embeddings1 = model.encode(sentences1, convert_to_tensor=True) embeddings2 = model.encode(sentences2, convert_to_tensor=True) #Compute cosine-similarits cosine_scores = util.cos_sim(embeddings1, embeddings2) return float(cosine_scores[0])*100 def process(example,example2): entidades = get_entities(example) class_sistema_universal = clasifica_sistema_universal(example) class_conv_americana = clasifica_conv_americana(example) score_similitud = similitud(example,example2) return entidades,class_sistema_universal, class_conv_americana, score_similitud input_sen = gr.inputs.Textbox(lines=10, label="Proporcione el texto a analizar:") input_sen2 = gr.inputs.Textbox(lines=10, label="Proporcione el texto a comparar:") output_lbl1= gr.outputs.Label(label="Clasificación modelo convención americana:") output_lbl2= gr.outputs.Label(label="Clasificación modelo sistema universal:") output_txt= gr.outputs.Textbox(label="Porcentaje de similitud:") #iface = gr.Interface(fn=process, inputs=input_sen, outputs=["highlight","label","label"], examples=examples, title=title, description = description) iface = gr.Interface(fn=process, inputs=[input_sen, input_sen2], outputs=["highlight",output_lbl2,output_lbl2,output_txt], examples=examples, title=title, description = description) iface.launch()