reab5555 commited on
Commit
2017ddc
·
verified ·
1 Parent(s): 78f6fde

Update visualization.py

Browse files
Files changed (1) hide show
  1. 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
- return speakers
 
 
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
- charts = []
 
 
 
 
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
- attachment_data = {k: v for k, v in data.items() if k in ["Secured", "Anxious-Preoccupied", "Dismissive-Avoidant", "Fearful-Avoidant"]}
47
- if attachment_data:
48
- charts.append(create_bar_chart(attachment_data, "Attachment Styles", speaker))
49
-
50
- bigfive_data = {k: v for k, v in data.items() if k in ["Extraversion", "Agreeableness", "Conscientiousness", "Neuroticism", "Openness"]}
51
- if bigfive_data:
52
- charts.append(create_bar_chart(bigfive_data, "Big Five Traits", speaker))
 
 
 
 
 
53
 
54
- personality_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"]}
55
- if personality_data:
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