File size: 6,195 Bytes
44c25e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
from random import randint
import streamlit as st

import streamlit as st
import json
import time
from config import Config
from pinecode_quieries import PinecodeProposalQueries
import logging
logging.basicConfig(format="%(levelname)s - %(name)s -  %(message)s", level=logging.WARNING)
logging.getLogger("haystack").setLevel(logging.INFO)

extractive_query = PinecodeProposalQueries (index_name= Config.index_name,
                                        api_key = Config.es_password,
                                        environment = Config.pinecone_environment,
                                        embedding_dim = Config.embedding_dim,
                                        reader_name_or_path = Config.reader_model_name_or_path,
                                        use_gpu = Config.use_gpu)

def hallazgos_comision_verdad_2022():
    title = """
    <h1 style='
    text-align: center;
    color: #39AA35'>
    Ask2Democracy 🇨🇴 - Hallazgos y recomendaciones de la comisión de la verdad
    </h1>
    <p>
    El 28 de junio del 2022, la Comisión de la Verdad en Colombia liberó su informe final. Fue el resultado de más de 3 años de investigación sobre el conflicto armado interno durante los últimos 60 años. Apoyándose en modelos de lenguaje (sentence transformers, bert, ver más aquí). Este espacio pretende ayudar a explorar las más de 6000 páginas que conforman más de 10 libros del Informe, comenzando por el de Hallazgos y recomendaciones.
  """
    st.markdown(title, unsafe_allow_html=True)
    st.markdown("""<div align="right">
    Creado por Jorge Henao 🇨🇴 <a href="https://twitter.com/jhenaotw" target='_blank'>Twitter</a> <a     href="https://www.linkedin.com/in/henaojorge" target='_blank'/>LinkedIn</a>    </div>
        """, unsafe_allow_html=True)
    
    question_samples_str = """¿cantidad de víctimas en la masacre de bojayá?
    ¿periodo con más detenciones arbitrarias registradas?
    ¿cantidad de víctimas en la masacre de bojayá?
    ¿cuantas víctimas de desplazamiento en antioquia?"""

    question_samples = question_samples_str.splitlines()
    
    def clear_submit():
        st.session_state["submit"] = False
        
    def fake_search(question, retriever_top_k, reader_top_k):
        #p1_result = query.search_by_query(query = question, retriever_top_k = retriever_top_k, reader_top_k = reader_top_k, es_index = "informecomisionverdad")
        result = []
        p = """
        La masacre de Bojayá fue perpetrada por el Frente José María Córdoba, de las FARC-EP, al lanzar un cilindro bomba que cayó en una iglesia en la que los pobladores se refugiaban del enfrentamiento de este grupo con el Bloque Élmer Cárdenas de las AUC. Las víctimas fueron 81 personas, 47 de ellas eran niñas, niños y adolescentes
            """
        for i in range(0, reader_top_k):
            result.append([[i+1],"81 personas", p[:250],"Las masacres","Comisión de la verdad - Informe de hallazgos y recomendaciones Junio 2022","5"])
        
        return result

    def search(question, retriever_top_k, reader_top_k):
        filters = {"source_title": "Hallazgos y recomendaciones - 28 de Junio 2022"}
        
        query_result = extractive_query.search_by_query(query = question, 
                                                        retriever_top_k = retriever_top_k, 
                                                        reader_top_k = reader_top_k,
                                                        filters = filters)
        result = []
        for i in range(0, len(query_result)):
            item = query_result[i]
            result.append([[i+1], item.answer, item.context[:200], 
                        item.meta['title'], item.meta['source_title'], int(item.meta['page'])])
            #result.append([[i+1], item.answer, item.context[:200], item.meta['title']])
        return result

    def search_and_show_results():
        # set start time
        stt = time.time()
        # retrieve top 5 documents
        results = search(query, retriever_top_k=5, reader_top_k=3)
        # set endtime
        ent = time.time()
        # measure resulting time
        elapsed_time = round(ent - stt, 2)

        # show which query was entered, and what was searching time
        st.write(f"**Resultados relacionados con:** \"{query}\" ({elapsed_time} sec.)")
        # then we use loop to show results
        for i, answer in enumerate(results):
            # answer starts with header
            st.subheader(f"{answer[1]}")
            # cropped answer
            doc = answer[2][:250] + "..."
            # and url to the full answer
            #url = f"https://www.comisiondelaverdad.co/sites/default/files/descargables/2022-06/Informe%20Final%20capi%CC%81tulo%20Hallazgos%20y%20recomendaciones.pdf#page={answer[5]+1}"
            url = f"https://petro.presidencia.gov.co/Documents/230213-Reforma-salud.pdf"
            # then we display it
            #st.markdown(f'{doc}\n<br>Fuente: {answer[4]}\n<br>Capítulo: {answer[3]}\n<br>Página: {answer[5]}\n[**Lee más aquí**]({url})\n', unsafe_allow_html=True)
            st.markdown(f"{doc}[**Lee más aquí**]({url})")
            st.caption(f"Fuente: {answer[4]} - Capítulo: {answer[3]} - Página: {answer[5]}")
            
        st.markdown("---")

    #results = search("que es el adres", retriever_top_k=5, reader_top_k=3)
    
    st.markdown(f"""<br><p>Cuanto más contexto le des a la pregunta mejor funciona el sistema. 
             No es un sistema basado en palabras claves, puedes escribir preguntas elaboradas. 
             Una serie de modelos de lenguaje transformers intervienen en cada consulta para ayudar a entenderlas.""", 
             unsafe_allow_html=True)
    selected_question = st.selectbox("Aquí algunos ejemplos:", question_samples)
    query = st.text_area("Escribe tu pregunta", value = selected_question, on_change=clear_submit)
    button = st.button("Buscar")
    if button or st.session_state.get("submit"):
        if not query:
            st.error("¡escribe una pregunta!")
        else:
            st.session_state["submit"] = True
            search_and_show_results()