# set path
import glob, os, sys;
sys.path.append('../utils')
import streamlit as st
import ast
import logging
from utils.ndc_explorer import countrySpecificCCA, countrySpecificCCM
from utils.checkconfig import getconfig
from utils.semantic_search import runSemanticPreprocessingPipeline
# Reading data and Declaring necessary variables
with open('docStore/ndcs/countryList.txt') as dfile:
countryList = dfile.read()
countryList = ast.literal_eval(countryList)
countrynames = list(countryList.keys())
with open('docStore/ndcs/cca.txt', encoding='utf-8', errors='ignore') as dfile:
cca_sent = dfile.read()
cca_sent = ast.literal_eval(cca_sent)
with open('docStore/ndcs/ccm.txt', encoding='utf-8', errors='ignore') as dfile:
ccm_sent = dfile.read()
ccm_sent = ast.literal_eval(ccm_sent)
config = getconfig('paramconfig.cfg')
split_by = config.get('coherence','SPLIT_BY')
split_length = int(config.get('coherence','SPLIT_LENGTH'))
split_overlap = int(config.get('coherence','SPLIT_OVERLAP'))
split_respect_sentence_boundary = bool(int(config.get('coherence',
'RESPECT_SENTENCE_BOUNDARY')))
remove_punc = bool(int(config.get('coherence','REMOVE_PUNC')))
embedding_model = config.get('coherence','RETRIEVER')
embedding_model_format = config.get('coherence','RETRIEVER_FORMAT')
embedding_layer = int(config.get('coherence','RETRIEVER_EMB_LAYER'))
embedding_dim = int(config.get('coherence','EMBEDDING_DIM'))
retriever_top_k = int(config.get('coherence','RETRIEVER_TOP_K'))
reader_model = config.get('coherence','READER')
reader_top_k = int(config.get('coherence','RETRIEVER_TOP_K'))
def app():
#### APP INFO #####
with st.container():
st.markdown("
Check NDC Coherence
",
unsafe_allow_html=True)
st.write(' ')
st.write(' ')
with st.expander("ℹ️ - About this app", expanded=False):
st.write(
"""
The *Check NDC Coherence* application provides easy evaluation of
coherence between a given policy document and a country’s (Intended)\
Nationally Determined Contribution (INDCs/NDCs) using open-source \
data from the German Institute of Development and Sustainability’s \
(IDOS) [NDC Explorer](https://klimalog.idos-research.de/ndc/#NDCExplorer/worldMap?NewAndUpdatedNDC??income???catIncome).\
""")
st.write("")
st.write(""" User can select a country context via the drop-down menu \
on the left-hand side of the application. Subsequently, the user is \
given the opportunity to manually upload another policy document \
from the same national context or to select a pre-loaded example \
document. Thereafter, the user can choose between two categories \
to compare coherence between the documents: climate change adaptation \
and climate change mitigation. Based on the selected information, \
the application identifies relevant paragraphs in the uploaded \
document and assigns them to the respective indicator from the NDC \
Explorer. Currently, the NDC Explorer has 20 indicators under \
climate change mitigation (e.g., fossil fuel production, REDD+) and \
22 indicators under climate change adaptation (e.g., sea level rise,\
investment needs). The assignment of the paragraph to a corresponding\
indicator is based on vector similarities in which only paragraphs \
with similarity above 0.55 to the indicators are considered. """)
with st.sidebar:
option = st.selectbox('Select Country', (countrynames))
countryCode = countryList[option]
st.markdown("---")
with st.container():
if st.button("Check Coherence"):
sent_cca = countrySpecificCCA(cca_sent,1,countryCode)
sent_ccm = countrySpecificCCM(ccm_sent,1,countryCode)
if 'filepath' in st.session_state:
allDocuments = runSemanticPreprocessingPipeline(
file_path= st.session_state['filepath'],
file_name = st.session_state['filename'],
split_by=split_by,
split_length= split_length,
split_overlap=split_overlap,
removePunc= remove_punc,
split_respect_sentence_boundary=split_respect_sentence_boundary)
genre = st.radio( "Select Category",('Climate Change Adaptation', 'Climate Change Mitigation'))
if genre == 'Climate Change Adaptation':
sent_dict = sent_cca
else:
sent_dict = sent_ccm
sent_labels = []
for key,sent in sent_dict.items():
sent_labels.append(sent)
if len(allDocuments['documents']) > 100:
warning_msg = ": This might take sometime, please sit back and relax."
else:
warning_msg = ""
logging.info("starting Coherence analysis, country selected {}".format(option))
with st.spinner("Performing Similar/Contextual search{}".format(warning_msg)):
pass
else:
st.info("🤔 No document found, please try to upload it at the sidebar!")
logging.warning("Terminated as no document provided")