reab5555 commited on
Commit
9580b8b
·
verified ·
1 Parent(s): ce94690

Update visualization.py

Browse files
Files changed (1) hide show
  1. visualization.py +78 -79
visualization.py CHANGED
@@ -1,55 +1,39 @@
1
  import gradio as gr
2
  import plotly.graph_objs as go
3
 
4
- def update_visibility_and_charts(status, exec_time, lang, attachments, bigfive, personalities):
5
- outputs = [
6
- gr.update(value=status, visible=True),
7
- gr.update(value=exec_time, visible=True),
8
- gr.update(value=lang, visible=True),
9
- ]
10
-
11
- all_speakers = set()
12
- for analysis_text in [attachments, bigfive, personalities]:
13
- all_speakers.update(extract_data_and_explanation(analysis_text).keys())
14
-
15
- for speaker in all_speakers:
16
- speaker_outputs = []
17
- for analysis_text, analysis_type in [(attachments, "Attachments"), (bigfive, "Big Five"), (personalities, "Personalities")]:
18
- speakers_data = extract_data_and_explanation(analysis_text)
19
- data = speakers_data.get(speaker, {})
20
-
21
- if data:
22
- if analysis_type == "Attachments":
23
- chart_data = {k: v for k, v in data.items() if k in ["Secured", "Anxious-Preoccupied", "Dismissive-Avoidant", "Fearful-Avoidant"] and isinstance(v, (int, float))}
24
- if chart_data:
25
- fig = create_bar_chart(chart_data, f"{analysis_type} Analysis - {speaker}")
26
- speaker_outputs.append(gr.update(value=fig, visible=True))
27
- else:
28
- speaker_outputs.append(gr.update(visible=False))
29
-
30
- radar_data = {k: v for k, v in data.items() if k in ["Anxiety", "Avoidance", "Self", "Others"] and isinstance(v, (int, float))}
31
- if radar_data:
32
- radar_fig = create_radar_chart(radar_data, f"Anxiety-Avoidance-Self-Others - {speaker}")
33
- speaker_outputs.append(gr.update(value=radar_fig, visible=True))
34
- else:
35
- speaker_outputs.append(gr.update(visible=False))
36
- else:
37
- chart_data = {k: v for k, v in data.items() if k not in ["explanation"] and isinstance(v, (int, float))}
38
- if chart_data:
39
- fig = create_bar_chart(chart_data, f"{analysis_type} Analysis - {speaker}")
40
- speaker_outputs.append(gr.update(value=fig, visible=True))
41
- else:
42
- speaker_outputs.append(gr.update(visible=False))
43
- speaker_outputs.append(gr.update(visible=False)) # Placeholder for consistency
44
-
45
- explanation = data.get("explanation", "No explanation provided.")
46
- speaker_outputs.append(gr.update(value=explanation, visible=True, label=f"{analysis_type} Explanation - {speaker}"))
47
  else:
48
- speaker_outputs.extend([gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)])
49
-
50
- outputs.append(gr.Group.update(visible=True, children=speaker_outputs))
 
 
 
51
 
52
- return outputs
 
 
 
53
 
54
  def create_bar_chart(data, title):
55
  if not data:
@@ -83,37 +67,52 @@ def create_radar_chart(data, title):
83
  )
84
  return fig
85
 
86
- # Add this function to extract data from the text
87
- def extract_data_and_explanation(text):
88
- speakers_data = {}
89
- current_speaker = None
90
- explanation = ""
91
- for line in text.split('\n'):
92
- line = line.strip()
93
- if line.startswith("-----------------------"):
94
- if current_speaker and explanation:
95
- speakers_data[current_speaker]["explanation"] = explanation.strip()
96
- explanation = ""
97
- current_speaker = None
98
- continue
99
- if line.startswith("Speaker"):
100
- current_speaker = line.strip()
101
- speakers_data[current_speaker] = {}
102
- elif ':' in line and current_speaker:
103
- key, value = line.split(':', 1)
104
- key = key.strip()
105
- value = value.strip()
106
- if key.lower() == "explanation":
107
- explanation += value + " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  else:
109
- try:
110
- speakers_data[current_speaker][key] = float(value)
111
- except ValueError:
112
- speakers_data[current_speaker][key] = value
113
- elif line and current_speaker and not line.startswith("Explanation"):
114
- explanation += line + " "
115
 
116
- if current_speaker and explanation:
117
- speakers_data[current_speaker]["explanation"] = explanation.strip()
118
-
119
- return speakers_data
 
 
1
  import gradio as gr
2
  import plotly.graph_objs as go
3
 
4
+ def extract_data_and_explanation(text):
5
+ speakers_data = {}
6
+ current_speaker = None
7
+ explanation = ""
8
+ for line in text.split('\n'):
9
+ line = line.strip()
10
+ if line.startswith("-----------------------"):
11
+ if current_speaker and explanation:
12
+ speakers_data[current_speaker]["explanation"] = explanation.strip()
13
+ explanation = ""
14
+ current_speaker = None
15
+ continue
16
+ if line.startswith("Speaker"):
17
+ current_speaker = line.strip()
18
+ speakers_data[current_speaker] = {}
19
+ elif ':' in line and current_speaker:
20
+ key, value = line.split(':', 1)
21
+ key = key.strip()
22
+ value = value.strip()
23
+ if key.lower() == "explanation":
24
+ explanation += value + " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  else:
26
+ try:
27
+ speakers_data[current_speaker][key] = float(value)
28
+ except ValueError:
29
+ speakers_data[current_speaker][key] = value
30
+ elif line and current_speaker and not line.startswith("Explanation"):
31
+ explanation += line + " "
32
 
33
+ if current_speaker and explanation:
34
+ speakers_data[current_speaker]["explanation"] = explanation.strip()
35
+
36
+ return speakers_data
37
 
38
  def create_bar_chart(data, title):
39
  if not data:
 
67
  )
68
  return fig
69
 
70
+ def update_visibility_and_charts(status, exec_time, lang, transcription, attachments, bigfive, personalities):
71
+ outputs = [
72
+ gr.update(value=status, visible=True),
73
+ gr.update(value=exec_time, visible=True),
74
+ gr.update(value=lang, visible=True),
75
+ gr.update(value=transcription, visible=True),
76
+ ]
77
+
78
+ all_analyses = [
79
+ ("Attachments", attachments),
80
+ ("Big Five", bigfive),
81
+ ("Personalities", personalities)
82
+ ]
83
+
84
+ all_speakers = set()
85
+ for _, analysis_text in all_analyses:
86
+ all_speakers.update(extract_data_and_explanation(analysis_text).keys())
87
+
88
+ for speaker_index, speaker in enumerate(sorted(all_speakers)[:3]): # Limit to 3 speakers
89
+ speaker_outputs = []
90
+
91
+ for analysis_type, analysis_text in all_analyses:
92
+ speakers_data = extract_data_and_explanation(analysis_text)
93
+ data = speakers_data.get(speaker, {})
94
+
95
+ if data:
96
+ if analysis_type == "Attachments":
97
+ chart_data = {k: v for k, v in data.items() if k in ["Secured", "Anxious-Preoccupied", "Dismissive-Avoidant", "Fearful-Avoidant"] and isinstance(v, (int, float))}
98
+ speaker_outputs.append(gr.update(value=create_bar_chart(chart_data, f"{analysis_type} Analysis - {speaker}") if chart_data else None, visible=bool(chart_data)))
99
+
100
+ radar_data = {k: v for k, v in data.items() if k in ["Anxiety", "Avoidance", "Self", "Others"] and isinstance(v, (int, float))}
101
+ speaker_outputs.append(gr.update(value=create_radar_chart(radar_data, f"Anxiety-Avoidance-Self-Others - {speaker}") if radar_data else None, visible=bool(radar_data)))
102
+ else:
103
+ chart_data = {k: v for k, v in data.items() if k not in ["explanation"] and isinstance(v, (int, float))}
104
+ speaker_outputs.append(gr.update(value=create_bar_chart(chart_data, f"{analysis_type} Analysis - {speaker}") if chart_data else None, visible=bool(chart_data)))
105
+ speaker_outputs.append(gr.update(visible=False)) # Placeholder for consistency with Attachments
106
+
107
+ explanation = data.get("explanation", "No explanation provided.")
108
+ speaker_outputs.append(gr.update(value=explanation, visible=True, label=f"{analysis_type} Explanation - {speaker}"))
109
  else:
110
+ speaker_outputs.extend([gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)])
111
+
112
+ outputs.extend(speaker_outputs)
 
 
 
113
 
114
+ # Hide unused speaker components
115
+ for _ in range(3 - len(all_speakers)):
116
+ outputs.extend([gr.update(visible=False)] * 9) # 3 analyses * (2 charts + 1 explanation)
117
+
118
+ return outputs