File size: 3,130 Bytes
4c3d8ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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()