Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import streamlit as st | |
| emotions = ['joy', 'optimism', 'anger', 'sadness'] | |
| df = pd.read_csv("dialogs/data/dialogs_marked_33992.csv") | |
| df["emotion"] = pd.Categorical(df["emotion"], categories=emotions) | |
| dialogs_count = len(df["dialog_id"].unique()) | |
| movie_titles = list(df["movie_title"].unique()) | |
| st.title("Интерфейс для аннотации реплик из диалогов") | |
| st.markdown(""" | |
| Для того, чтобы начать размечать реплики, необходимо выбрать фильм, | |
| с диалогами из которого вам хотелось бы поработать. | |
| После этого появятся две реплики из диалога: предыдущая и текущая. | |
| На основе информации из этих двух реплик необходимо выбрать эмоциональный окрас текущей рекплики на основе одного или нескольких предварительно определнных классов. | |
| """) | |
| st.markdown(""" | |
| Текущие классы для разметки: **joy**, **optimism**, **anger**, **sadness** | |
| """) | |
| st.write(f"Количество фильмов в базе данных: :red[{len(movie_titles)}], количество реплик: :green[{len(df)}], количество диалогов: :blue[{dialogs_count}]") | |
| selected_movie = st.selectbox( | |
| 'Какой фильм вас интересует?', [''] + movie_titles, | |
| ) | |
| if selected_movie: | |
| if selected_movie not in st.session_state: | |
| st.session_state[selected_movie] = 1 | |
| df_subset = df[df["movie_title"] == selected_movie] | |
| df_subset = df_subset.reset_index(drop=True) | |
| current_index = st.session_state[selected_movie] | |
| prev_row = df_subset.iloc[current_index-1] | |
| prev_speaker, prev_replica = prev_row["speakers"], prev_row["dialog"] | |
| curr_row = df_subset.iloc[current_index] | |
| curr_speaker, curr_replica = curr_row["speakers"], curr_row["dialog"] | |
| with st.form("My form", clear_on_submit=True): | |
| st.markdown(f""" | |
| Предыдущая реплика: | |
| ``` | |
| {prev_speaker}: {prev_replica} | |
| ``` | |
| """, unsafe_allow_html=True) | |
| st.markdown(f""" | |
| Текущая реплика: | |
| ``` | |
| {curr_speaker}: {curr_replica} | |
| ``` | |
| """) | |
| choices = st.multiselect( | |
| "Выберите подходящие эмоции к текущей реплике:", | |
| ['joy', 'optimism', 'anger', 'sadness'], | |
| key="multiselect" | |
| ) | |
| if st.form_submit_button("Подтвердите ваш выбор") and choices: | |
| next_index = current_index + 1 | |
| curr_dialog_id = df_subset.iloc[current_index]["dialog_id"] | |
| next_dialog_id = df_subset.iloc[next_index]["dialog_id"] | |
| if curr_dialog_id != next_dialog_id: | |
| next_index += 1 | |
| st.session_state[selected_movie] = next_index | |
| st.experimental_rerun() | |