Spaces:
Runtime error
Runtime error
#https://www.analyticsvidhya.com/blog/2021/04/create-interface-for-your-machine-learning-models-using-gradio-python-library/ | |
import re | |
import string | |
import numpy as np | |
import gradio as gr | |
import pandas as pd | |
from gensim import models | |
import gensim.corpora as corpora | |
from gensim.models import LdaModel | |
from gensim.models import Word2Vec | |
from gensim.corpora import Dictionary | |
from gensim.test.utils import common_texts | |
from gensim.matutils import jensen_shannon | |
lista_exclusiones = [] | |
with open(r'datos/lista_exclusiones.txt', 'r') as lta: | |
for linea in lta: | |
x = linea[:-1] | |
lista_exclusiones.append(x) | |
df = pd.read_csv('datos/df_general_entrenamiento_v2.csv', index_col= 0) | |
lista_estados = [e for e in df.groupby(by= 'Entidad').groups] | |
corpus = corpora.MmCorpus('modelo/corpus_gensim.mm') | |
diccionario = Dictionary.load_from_text('modelo/diccionario') | |
lda_gensim = LdaModel.load('modelo/modelo_gensim_v2.model') | |
def remover_palabras_breves(texto): | |
nuevo_texto = re.sub(r'\b[a-zA-Z]{1}\b', '', texto) | |
nuevo_texto = re.sub(r'\b[a-zA-Z]{2}\b', '', nuevo_texto) | |
nuevo_texto = re.sub(r'\b[a-zA-Z]{3}\b', '', nuevo_texto) | |
nuevo_texto = re.sub(r'\s+', ' ', nuevo_texto) | |
return nuevo_texto | |
def remover_exclusiones(texto): | |
return " ".join([palabra for palabra in str(texto).split() if palabra not in lista_exclusiones]) | |
def remover_emojis(cadena): | |
patron_emoji = re.compile("[" | |
u"\U0001F600-\U0001F64F" # emoticones | |
u"\U0001F300-\U0001F5FF" # símbolos y pictogramas | |
u"\U0001F680-\U0001F6FF" # transporte símbolos de mapas | |
u"\U0001F1E0-\U0001F1FF" # banderas (iOS) | |
u"\U00002500-\U00002BEF" # caracteres chinos | |
u"\U00002702-\U000027B0" | |
u"\U00002702-\U000027B0" | |
u"\U000024C2-\U0001F251" | |
u"\U0001f926-\U0001f937" | |
u"\U00010000-\U0010ffff" | |
u"\u2640-\u2642" | |
u"\u2600-\u2B55" | |
u"\u200d" | |
u"\u23cf" | |
u"\u23e9" | |
u"\u231a" | |
u"\ufe0f" # dingbats (¿?) | |
u"\u3030" | |
"]+", flags= re.UNICODE) | |
return patron_emoji.sub(r'', cadena) | |
def procesamiento(texto): | |
texto = re.sub(r'http\S+', '', texto) | |
texto = texto.replace('\d+', '') | |
texto = remover_exclusiones(texto) | |
texto = remover_emojis(texto) | |
texto = texto.lower() | |
texto = remover_palabras_breves(texto) | |
texto = re.sub('[%s]' % re.escape(string.punctuation), '' , texto) | |
texto = texto.strip() | |
texto = re.sub(r'\s+', ' ', texto) | |
lista = list(texto.split()) | |
bow = diccionario.doc2bow(lista) | |
distribucion = lda_gensim.get_document_topics(bow= bow, minimum_probability= 0) | |
return distribucion | |
def calcular_similitudes_docs(doc_uno, doc_dos): | |
return jensen_shannon(doc_uno, doc_dos) | |
def recomendacion(texto: str, entidad: str, numero_resultados: int = 1000) -> dict: | |
distribucion = procesamiento(texto= texto) | |
distancias = [calcular_similitudes_docs(distribucion, lda_gensim[texto]) for texto in corpus] | |
similares = np.argsort(distancias) | |
lista_nombres = [] | |
lista_espacios = [] | |
lista_municipios = [] | |
lista_enlaces_sic = [] | |
diccionario = {} | |
for i in range(0, numero_resultados): | |
if df.iloc[int(similares[i])]['Entidad'] == entidad: | |
nombre = df.iloc[int(similares[i])]["Nombre"] | |
tipo = df.iloc[int(similares[i])]["Tipo de espacio/patrimonio"] | |
municipio = df.iloc[int(similares[i])]["Municipio"] | |
enlace_sic = df.iloc[int(similares[i])]["Enlace SIC"] | |
lista_nombres.append(nombre) | |
lista_espacios.append(tipo) | |
lista_municipios.append(municipio) | |
lista_enlaces_sic.append(enlace_sic) | |
diccionario["Nombre"] = lista_nombres | |
diccionario["Tipo"] = lista_espacios | |
diccionario["Municipio"] = lista_municipios | |
diccionario["Enlace SIC"] = lista_enlaces_sic | |
return diccionario | |
#gr.Dropdown(choices= lista_estados) | |
#interface = gr.Interface(fn= recomendacion, inputs= ["text", "text"], outputs= "json") | |
interface = gr.Interface(fn= recomendacion, inputs= ["text", gr.Dropdown(choices= lista_estados)], outputs= "json") | |
interface.launch() |