import gradio as gr
from transformers import AutoModelForTokenClassification,AutoModelForSequenceClassification, AutoTokenizer, pipeline
title = "Modelo Jurídico Mexicano"
description = """
Este demo permite utilizar los modelos:
- hackathon-pln-es/jurisbert-finetuning-ner
- hackathon-pln-es/jurisbert-class-tratados-internacionales-sistema-universal
- hackathon-pln-es/jurisbert-clas-art-convencion-americana-dh
- hackathon-pln-es/jurisbert-tsdae-sentence-transformer
entrenados para el hackathon por el equipo compuesto por: gpalomeque, aureliopvs, ceciliamacias, giomadariaga y cattsytabla
"""
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."]]
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 process(example):
entidades = get_entities(example)
#class_sistema_universal = clasifica_sistema_universal(example)
a,b = clasifica_sistema_universal(example)
class_conv_americana = clasifica_conv_americana(example)
return entidades,a,b, class_conv_americana
#return entidades,class_sistema_universal, class_conv_americana
input_sen = gr.inputs.Textbox(lines=10, label="Proporcione el texto a analizar:")
output_txt1= gr.outputs.Textbox(label("clasificación acorde al modelo de la convención americana:"))
output_txt2= gr.outputs.Textbox(label("clasificación score:"))
#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, outputs=["highlight",output_txt1, output_txt2,"label"], examples=examples, title=title, description = description)
iface.launch(debug=True)