Spaces:
Runtime error
Runtime error
Update visualization.py
Browse files- visualization.py +27 -19
visualization.py
CHANGED
@@ -6,6 +6,7 @@ from collections import Counter
|
|
6 |
def extract_speaker_data(text):
|
7 |
speakers = {}
|
8 |
current_speaker = None
|
|
|
9 |
for line in text.split('\n'):
|
10 |
if line.lower().startswith("speaker"):
|
11 |
current_speaker = line.split(":")[1].strip() if ":" in line else line.split()[1]
|
@@ -18,7 +19,9 @@ def extract_speaker_data(text):
|
|
18 |
match = re.search(r"[-+]?\d*\.\d+|\d+", value)
|
19 |
if match:
|
20 |
speakers[current_speaker][key.strip()] = float(match.group())
|
21 |
-
|
|
|
|
|
22 |
|
23 |
def create_bar_chart(data, title, speaker):
|
24 |
fig = go.Figure(data=[go.Bar(
|
@@ -30,12 +33,17 @@ def create_bar_chart(data, title, speaker):
|
|
30 |
return fig
|
31 |
|
32 |
def update_visibility_and_charts(status, exec_time, lang, attachments, bigfive, personalities):
|
33 |
-
|
|
|
|
|
|
|
|
|
34 |
|
35 |
-
for analysis_text in [attachments, bigfive, personalities]:
|
36 |
-
speakers_data = extract_speaker_data(analysis_text)
|
37 |
if not speakers_data:
|
38 |
print(f"No speaker data extracted from: {analysis_text}")
|
|
|
39 |
|
40 |
# Determine the two main speakers
|
41 |
speaker_counts = Counter(speakers_data.keys())
|
@@ -43,20 +51,20 @@ def update_visibility_and_charts(status, exec_time, lang, attachments, bigfive,
|
|
43 |
|
44 |
for speaker in main_speakers:
|
45 |
data = speakers_data.get(speaker, {})
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
charts.append(create_bar_chart(personality_data, "Personality Traits", speaker))
|
57 |
|
58 |
-
return
|
59 |
-
gr.update(value=status, visible=True),
|
60 |
-
gr.update(value=exec_time, visible=True),
|
61 |
-
gr.update(value=lang, visible=True),
|
62 |
-
] + charts
|
|
|
6 |
def extract_speaker_data(text):
|
7 |
speakers = {}
|
8 |
current_speaker = None
|
9 |
+
explanation = ""
|
10 |
for line in text.split('\n'):
|
11 |
if line.lower().startswith("speaker"):
|
12 |
current_speaker = line.split(":")[1].strip() if ":" in line else line.split()[1]
|
|
|
19 |
match = re.search(r"[-+]?\d*\.\d+|\d+", value)
|
20 |
if match:
|
21 |
speakers[current_speaker][key.strip()] = float(match.group())
|
22 |
+
elif line.lower().startswith("explanation:"):
|
23 |
+
explanation = line.split("Explanation:", 1)[1].strip()
|
24 |
+
return speakers, explanation
|
25 |
|
26 |
def create_bar_chart(data, title, speaker):
|
27 |
fig = go.Figure(data=[go.Bar(
|
|
|
33 |
return fig
|
34 |
|
35 |
def update_visibility_and_charts(status, exec_time, lang, attachments, bigfive, personalities):
|
36 |
+
outputs = [
|
37 |
+
gr.update(value=status, visible=True),
|
38 |
+
gr.update(value=exec_time, visible=True),
|
39 |
+
gr.update(value=lang, visible=True),
|
40 |
+
]
|
41 |
|
42 |
+
for analysis_text, analysis_type in [(attachments, "Attachments"), (bigfive, "Big Five"), (personalities, "Personalities")]:
|
43 |
+
speakers_data, explanation = extract_speaker_data(analysis_text)
|
44 |
if not speakers_data:
|
45 |
print(f"No speaker data extracted from: {analysis_text}")
|
46 |
+
continue
|
47 |
|
48 |
# Determine the two main speakers
|
49 |
speaker_counts = Counter(speakers_data.keys())
|
|
|
51 |
|
52 |
for speaker in main_speakers:
|
53 |
data = speakers_data.get(speaker, {})
|
54 |
+
if analysis_type == "Attachments":
|
55 |
+
chart_data = {k: v for k, v in data.items() if k in ["Secured", "Anxious-Preoccupied", "Dismissive-Avoidant", "Fearful-Avoidant"]}
|
56 |
+
if chart_data:
|
57 |
+
outputs.append(gr.Plot(create_bar_chart(chart_data, "Attachment Styles", speaker)))
|
58 |
+
elif analysis_type == "Big Five":
|
59 |
+
chart_data = {k: v for k, v in data.items() if k in ["Extraversion", "Agreeableness", "Conscientiousness", "Neuroticism", "Openness"]}
|
60 |
+
if chart_data:
|
61 |
+
outputs.append(gr.Plot(create_bar_chart(chart_data, "Big Five Traits", speaker)))
|
62 |
+
elif analysis_type == "Personalities":
|
63 |
+
chart_data = {k: v for k, v in data.items() if k in ["Depressed", "Paranoid", "Schizoid-Schizotypal", "Antisocial-Psychopathic", "Borderline-Dysregulated", "Hysteric-Histrionic", "Narcissistic", "Anxious-Avoidant", "Dependent-Victimized", "Obsessional"]}
|
64 |
+
if chart_data:
|
65 |
+
outputs.append(gr.Plot(create_bar_chart(chart_data, "Personality Traits", speaker)))
|
66 |
|
67 |
+
# Add explanation box after each graph
|
68 |
+
outputs.append(gr.Textbox(value=explanation, label=f"{analysis_type} Explanation - Speaker {speaker}"))
|
|
|
69 |
|
70 |
+
return outputs
|
|
|
|
|
|
|
|