Spaces:
Sleeping
Sleeping
| 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 += '<mask>' | |
| def add_special_token_wolof(): | |
| st.session_state.right_sentence += '<mask>' | |
| 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) | |