Vsevolod's picture
init
4c3d8ea
raw
history blame
3.13 kB
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()