NKessler commited on
Commit
ce4e79f
·
verified ·
1 Parent(s): a35d2cb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -13
app.py CHANGED
@@ -137,12 +137,14 @@ def _create_sentiment_gauge(score: float, title: str) -> go.Figure:
137
  domain={"x": [0, 1], "y": [0, 1]},
138
  title={"text": title, "font": {"size": 16}},
139
  gauge={
140
- "axis": {"range": [-1, 1], "tickwidth": 1},
141
- "bar": {"color": "darkblue"},
 
 
142
  "steps": [
143
- {"range": [-1, -0.2], "color": "#ffb3b3"},
144
- {"range": [-0.2, 0.2], "color": "#f2f2f2"},
145
- {"range": [0.2, 1], "color": "#b3ffb3"},
146
  ],
147
  },
148
  )
@@ -158,25 +160,33 @@ def _create_comparison_radar_chart(results_a: dict, results_b: dict) -> go.Figur
158
  val_a = [results_a["tone_scores"].get(c, 0) for c in categories]
159
  val_b = [results_b["tone_scores"].get(c, 0) for c in categories]
160
 
161
- # Close the radar loop
162
  categories.append(categories[0])
163
  val_a.append(val_a[0])
164
  val_b.append(val_b[0])
165
 
166
  fig = go.Figure()
167
  fig.add_trace(go.Scatterpolar(
168
- r=val_a, theta=categories, fill='toself', name='Source A', line_color='#4f46e5'
 
 
169
  ))
170
  fig.add_trace(go.Scatterpolar(
171
- r=val_b, theta=categories, fill='toself', name='Source B', line_color='#10b981'
 
 
172
  ))
173
-
174
  fig.update_layout(
175
- polar=dict(radialaxis=dict(visible=True, range=[0, 1])),
 
 
 
176
  showlegend=True,
177
- title={"text": "Relative Emotion Profile", "font": {"size": 18}},
178
- height=450,
 
179
  margin=dict(l=40, r=40, t=60, b=40),
 
 
180
  )
181
  return fig
182
 
@@ -187,7 +197,7 @@ def _highlight_keywords(text: str, keywords: typing.List[str]) -> str:
187
  for kw in keywords:
188
  pattern = re.compile(rf"\b({re.escape(kw)})\b", re.IGNORECASE)
189
  highlighted_text = pattern.sub(
190
- r"<span style='background-color: #fef08a; font-weight: 600; padding: 0.1rem 0.2rem; border-radius: 4px;'>\1</span>",
191
  highlighted_text,
192
  )
193
  return highlighted_text
@@ -242,6 +252,27 @@ def check_contradiction(text_a: str, text_b: str) -> dict:
242
  # USER INTERFACE
243
  st.set_page_config(page_title="FrameVis | Media Framing", layout="wide")
244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  # STATE MANAGEMENT
246
  if "results_a" not in st.session_state:
247
  st.session_state.results_a = None
 
137
  domain={"x": [0, 1], "y": [0, 1]},
138
  title={"text": title, "font": {"size": 16}},
139
  gauge={
140
+ "axis": {"range": [-1, 1], "tickwidth": 1, "tickcolor": "darkgrey"},
141
+ "bar": {"color": "#475569", "thickness": 0.2},
142
+ "bgcolor": "white",
143
+ "borderwidth": 0,
144
  "steps": [
145
+ {"range": [-1, -0.1], "color": "#fee2e2"},
146
+ {"range": [-0.1, 0.1], "color": "#f1f5f9"},
147
+ {"range": [0.1, 1], "color": "#dcfce3"},
148
  ],
149
  },
150
  )
 
160
  val_a = [results_a["tone_scores"].get(c, 0) for c in categories]
161
  val_b = [results_b["tone_scores"].get(c, 0) for c in categories]
162
 
 
163
  categories.append(categories[0])
164
  val_a.append(val_a[0])
165
  val_b.append(val_b[0])
166
 
167
  fig = go.Figure()
168
  fig.add_trace(go.Scatterpolar(
169
+ r=val_a, theta=categories, fill='toself', name='Source A',
170
+ line=dict(color='#4f46e5', shape='spline', width=2),
171
+ fillcolor='rgba(79, 70, 229, 0.2)'
172
  ))
173
  fig.add_trace(go.Scatterpolar(
174
+ r=val_b, theta=categories, fill='toself', name='Source B',
175
+ line=dict(color='#10b981', shape='spline', width=2),
176
+ fillcolor='rgba(16, 185, 129, 0.2)'
177
  ))
 
178
  fig.update_layout(
179
+ polar=dict(
180
+ radialaxis=dict(visible=True, range=[0, 1], showticklabels=False, showline=False, gridcolor='rgba(0,0,0,0.1)'),
181
+ angularaxis=dict(gridcolor='rgba(0,0,0,0.1)', linecolor='rgba(0,0,0,0.1)')
182
+ ),
183
  showlegend=True,
184
+ legend=dict(orientation="h", yanchor="bottom", y=-0.2, xanchor="center", x=0.5),
185
+ title={"text": "Relative Emotion Profile", "font": {"size": 18, "family": "sans-serif"}},
186
+ height=400,
187
  margin=dict(l=40, r=40, t=60, b=40),
188
+ paper_bgcolor='rgba(0,0,0,0)', # Transparent
189
+ plot_bgcolor='rgba(0,0,0,0)'
190
  )
191
  return fig
192
 
 
197
  for kw in keywords:
198
  pattern = re.compile(rf"\b({re.escape(kw)})\b", re.IGNORECASE)
199
  highlighted_text = pattern.sub(
200
+ r"<span style='background-color: #e0e7ff; color: #3730a3; font-weight: 600; padding: 0.15rem 0.4rem; border-radius: 12px; font-size: 0.9em;'>\1</span>",
201
  highlighted_text,
202
  )
203
  return highlighted_text
 
252
  # USER INTERFACE
253
  st.set_page_config(page_title="FrameVis | Media Framing", layout="wide")
254
 
255
+ st.markdown("""
256
+ <style>
257
+ #MainMenu {visibility: hidden;}
258
+ footer {visibility: hidden;}
259
+ header {visibility: hidden;}
260
+
261
+ .block-container {
262
+ padding-top: 2rem;
263
+ padding-bottom: 2rem;
264
+ }
265
+
266
+ [data-testid="stMetric"] {
267
+ background-color: #f8fafc;
268
+ border: 1px solid #e2e8f0;
269
+ border-radius: 8px;
270
+ padding: 15px;
271
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
272
+ }
273
+ </style>
274
+ """, unsafe_allow_html=True)
275
+
276
  # STATE MANAGEMENT
277
  if "results_a" not in st.session_state:
278
  st.session_state.results_a = None