Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
""" | |
José Carlos Machicao | |
GestioDinámica | |
Fecha de producción: 2022_01_31 | |
Fecha de actualización 2022_01_31 | |
""" | |
import streamlit as st | |
import altair as alt | |
from transformers import pipeline | |
import pandas as pd | |
import spacy | |
import os | |
os.system('python -m spacy download es_core_news_sm') | |
import es_core_news_sm | |
nlp = es_core_news_sm.load() | |
from transformers import AutoTokenizer, AutoModelForQuestionAnswering | |
tokenizer = AutoTokenizer.from_pretrained("mrm8488/bert-base-spanish-wwm-cased-finetuned-spa-squad2-es") | |
modelo_qa_2 = AutoModelForQuestionAnswering.from_pretrained("mrm8488/bert-base-spanish-wwm-cased-finetuned-spa-squad2-es") | |
st.image('images/gdmk.png', width=150) | |
st.title('Interacción con el Texto de Estudio') | |
st.write('Esta interacción utiliza un texto base de definiciones vinculadas a datos e inteligencia artificial. Muestra una estadística de frecuencias de los conceptos más presentes en el texto como orientación para elaborar preguntas. Permite hacer preguntas al texto con complejidad semántica, es decir que no requiere un mecanismo de búsqueda o coincidencia de palabras o frases sino que encuentra las definiciones semánticamente afines a la pregunta formulada. También tiene un límite de confiabilidad del hallazgo que garantiza cierto grado de confiabiilidad.') | |
df = pd.read_excel("textos_temas_data_science.xlsx") | |
texto = ' '.join(list(df.iloc[:,1])).lower() | |
st.write(len(texto)) | |
if len(texto) > 15000: | |
st.write('Su texto es muy largo y será recortado a 10 mil caracteres.') | |
doc = nlp(texto) | |
# Rastreo de Verbos | |
extractos = [] | |
if len(doc) > 0: | |
for tk in doc: | |
tk_r = tk.lemma_ | |
if tk.pos_ == 'VERB': | |
extractos.append([tk_r, 'verbo']) | |
if tk.pos_ == 'NOUN': | |
extractos.append([tk_r, 'sujeto']) | |
extrac_df = pd.DataFrame(extractos) | |
st.write(extrac_df.shape) | |
extrac_df.columns = ['pal', 'tipo'] | |
dat = pd.DataFrame(extrac_df['pal'].value_counts()) | |
dat['paln']=dat.index | |
dat2 = dat.sort_values('pal', ascending=False).head(20).reset_index() | |
st.write(alt.Chart(dat2).mark_bar().encode(x=alt.X('index', sort=None), y='pal')) | |
pregs = st.text_input('Pregunta', ' ') | |
if len(pregs) > 4: | |
preguntas = pipeline('question-answering', model=modelo_qa_2, tokenizer=tokenizer) | |
st.write('Algoritmo listo.') | |
boton_preg2 = st.button('Enviar pregunta') | |
if boton_preg2: | |
j = 0 | |
st.write('... buscando ...') | |
for k, row in df.iterrows(): | |
respuesta = preguntas({'question': pregs, 'context': row[1]}) | |
#st.write(respuesta) | |
if respuesta['score'] > 0.05: | |
atx, btx = respuesta['start'], respuesta['end'] | |
tx = texto[atx-100:btx+100] | |
st.write(row[0], row[1]) | |
st.write(respuesta['score']) | |
j += 1 | |
else: | |
pass | |
if j == 0: | |
st.write('No se encontraron coincidencias.') | |
else: | |
pass | |