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() | |