Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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": "
|
|
|
|
|
|
|
| 142 |
"steps": [
|
| 143 |
-
{"range": [-1, -0.
|
| 144 |
-
{"range": [-0.
|
| 145 |
-
{"range": [0.
|
| 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',
|
|
|
|
|
|
|
| 169 |
))
|
| 170 |
fig.add_trace(go.Scatterpolar(
|
| 171 |
-
r=val_b, theta=categories, fill='toself', name='Source B',
|
|
|
|
|
|
|
| 172 |
))
|
| 173 |
-
|
| 174 |
fig.update_layout(
|
| 175 |
-
polar=dict(
|
|
|
|
|
|
|
|
|
|
| 176 |
showlegend=True,
|
| 177 |
-
|
| 178 |
-
|
|
|
|
| 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: #
|
| 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
|