jcmachicao's picture
Update app.py
8f97f64
# -*- 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