import streamlit as st import pandas as pd st.markdown("Provide your own 🤗 sentences") # recuperate the already saved sentences (for the moment french/wolof) sentences_ = pd.read_csv('wolof_translate/data/sentences/wolof_french.csv') sentences = sentences_.copy() # get french and wolof sentences french_examples = pd.read_csv('wolof_translate/data/sentences/french.csv') wolof_examples = pd.read_csv('wolof_translate/data/sentences/wolof_2.csv') # add special characters from Wolof sp_wolof_chars = pd.read_csv('wolof_translate/data/wolof_writing/wolof_special_chars.csv') # add definitions sp_wolof_words = pd.read_csv('wolof_translate/data/wolof_writing/definitions.csv') sp_wolof_words.sort_values(by = ['french', 'wolof'], inplace = True) # initialize the input texts st.title("Provide sentences below ⤵️") st.markdown("""---""") # create three columns left, right = st.columns(2) # let us add a callback functions to change the input text def add_symbol_to_french(): st.session_state.left_sentence += st.session_state.fr_symbol def add_symbol_to_wolof(): st.session_state.right_sentence += st.session_state.wf_symbol def add_special_token_french(): st.session_state.left_sentence += '' def add_special_token_wolof(): st.session_state.right_sentence += '' def add_word_to_text(): word = st.session_state.word.split('/')[0].strip() st.session_state.right_sentence += word def add_french_sentence_to_text(): sentence = st.session_state.french_sentence.strip() st.session_state.left_sentence = sentence def add_wolof_sentence_to_text(): sentence = st.session_state.wolof_sentence.strip() st.session_state.right_sentence = sentence # let us create a callback which permit us to add sentences inside a DataFrame def add_new_sentences(): global sentences sentence_1 = st.session_state.left_sentence.strip() sentence_2 = st.session_state.right_sentence.strip() if sentence_1 == '' or sentence_2 == '': st.warning("You didn't provide a sentence ! Please provide before submitting.", icon= "🚨") else: if not sentences.empty > 0: sentences = pd.concat((sentences, pd.DataFrame({sentences.columns.tolist()[0]: [sentence_1], sentences.columns.tolist()[1]: [sentence_2]}))) else: sentences = pd.DataFrame({sentences.columns.tolist()[0]: [sentence_1], sentences.columns.tolist()[1]: [sentence_2]}) ## save the result sentences.to_csv('wolof_translate/data/sentences/wolof_french.csv', index=False) # recuperate the already saved sentences (for the moment french/wolof) sentences = pd.read_csv('wolof_translate/data/sentences/wolof_french.csv') # add the last position to delete and modify st.session_state.line1 = len(sentences) - 1 st.session_state.line2 = len(sentences) - 1 # let us create a callback which permit us to add sentences inside a DataFrame def add_new_sentences2(): global sentences sentence_1 = st.session_state.left_sentence.strip() sentence_2 = st.session_state.right_sentence.strip() if sentence_1 == '' or sentence_2 == '': st.warning("You didn't provide a sentence ! Please provide before submitting.", icon= "🚨") else: if not sentences.empty > 0: sentences = pd.concat((sentences, pd.DataFrame({sentences.columns.tolist()[0]: [sentence_1], sentences.columns.tolist()[1]: [sentence_2]}))) else: sentences = pd.DataFrame({sentences.columns.tolist()[0]: [sentence_1], sentences.columns.tolist()[1]: [sentence_2]}) ## save the result sentences.to_csv('wolof_translate/data/sentences/wolof_french.csv', index=False) # recuperate the already saved sentences (for the moment french/wolof) sentences = pd.read_csv('wolof_translate/data/sentences/wolof_french.csv') # clean the inputs' contents st.session_state.left_sentence = '' st.session_state.right_sentence = '' # add the last position to delete and modify st.session_state.line1 = len(sentences) - 1 st.session_state.line2 = len(sentences) - 1 def delete_line(): number = st.session_state.line1 if number > len(sentences) - 1: st.warning("The line that you provided does not exist !") else: deleted = pd.read_csv('wolof_translate/data/sentences/deleted_lines.csv') if not deleted.empty: deleted = pd.concat((deleted, pd.DataFrame({sentences.columns.tolist()[0]: [sentences.loc[number, sentences.columns.tolist()[0]]], sentences.columns.tolist()[1]: sentences.loc[number, sentences.columns.tolist()[1]]}))) else: deleted = pd.DataFrame({sentences.columns.tolist()[0]: [sentences.loc[number, sentences.columns.tolist()[0]]], sentences.columns.tolist()[1]: sentences.loc[number, sentences.columns.tolist()[1]]}) sentences.drop(index = number, inplace=True) ## save the result sentences.to_csv('wolof_translate/data/sentences/wolof_french.csv', index=False) deleted.to_csv('wolof_translate/data/sentences/deleted_lines.csv', index=False) def modify_line(): number = st.session_state.line2 if number > len(sentences) - 1: st.warning("The line that you provided does not exist !") else: modified = pd.read_csv('wolof_translate/data/sentences/modified_lines.csv') if not modified.empty: modified = pd.concat((modified, pd.DataFrame({sentences.columns.tolist()[0]: [sentences.loc[number, sentences.columns.tolist()[0]]], sentences.columns.tolist()[1]: sentences.loc[number, sentences.columns.tolist()[1]]}))) else: modified = pd.DataFrame({sentences.columns.tolist()[0]: [sentences.loc[number, sentences.columns.tolist()[0]]], sentences.columns.tolist()[1]: sentences.loc[number, sentences.columns.tolist()[1]]}) st.session_state.left_sentence = sentences.loc[number, sentences.columns.tolist()[0]] st.session_state.right_sentence = sentences.loc[number, sentences.columns.tolist()[1]] sentences.drop(index = number, inplace=True) ## save the result sentences.to_csv('wolof_translate/data/sentences/wolof_french.csv', index=False) modified.to_csv('wolof_translate/data/sentences/deleted_lines.csv', index=False) left.header("French") left.text_area(sentences.columns.tolist()[0], key = "left_sentence") right.header("Wolof") right.text_area(sentences.columns.tolist()[1], key = "right_sentence") fr_symbol = left.selectbox("French characters", key="fr_symbol", options = sp_wolof_chars['wolof_special_chars']) wf_symbol = right.selectbox("Wolof characters", key="wf_symbol", options = sp_wolof_chars['wolof_special_chars']) word = right.selectbox("Wolof words/Definitions", key="word", options = [sp_wolof_words.loc[i, 'wolof']+" / "+sp_wolof_words.loc[i, 'french'] for i in range(sp_wolof_words.shape[0])], on_change=add_word_to_text) left.button("Add symbol", "add fr symbol", on_click=add_symbol_to_french) left.button("Add mask", "french mask", on_click=add_special_token_french) right.button("Add symbol", "add wf symbol", on_click=add_symbol_to_wolof) right.button("Add mask", "wolof mask", on_click=add_special_token_wolof) # add sentences at sidebar st.sidebar.selectbox("French sentences", key="french_sentence", options = french_examples['sentences'], on_change=add_french_sentence_to_text) st.sidebar.selectbox("Wolof sentences", key="wolof_sentence", options = wolof_examples['sentences'], on_change=add_wolof_sentence_to_text) # add a submit button to add new sentences st.button('Submit', 'submit_button', on_click=add_new_sentences) st.button('Place', 'submit_button2', on_click=add_new_sentences2) st.markdown("""---""") # add delete button number = st.number_input("Provide line to delete", key="line1", min_value=0) st.button("Delete", 'delete_button', on_click=delete_line) # add modify button number = st.number_input("Provide line to modify", key="line2", min_value=0) st.button("Modify", 'modify_button', on_click=modify_line) # add data frame st.dataframe(sentences, width=900)