Update app.py
Browse files
app.py
CHANGED
|
@@ -134,54 +134,68 @@ def create_gradio_interface(recommendation_system: RecommendationSystem) -> gr.I
|
|
| 134 |
with gr.Blocks(theme=gr.themes.Soft()) as interface:
|
| 135 |
gr.Markdown("""
|
| 136 |
# 推文推荐系统
|
| 137 |
-
|
| 138 |
""")
|
| 139 |
|
| 140 |
with gr.Row():
|
| 141 |
with gr.Column(scale=1):
|
| 142 |
-
visibility_weight = gr.Slider(
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
info="调整对内容可信度的重视程度"
|
| 146 |
-
)
|
| 147 |
-
sentiment_weight = gr.Slider(
|
| 148 |
-
0, 1, 0.3,
|
| 149 |
-
label="情感倾向权重",
|
| 150 |
-
info="调整对情感倾向的重视程度"
|
| 151 |
-
)
|
| 152 |
-
popularity_weight = gr.Slider(
|
| 153 |
-
0, 1, 0.2,
|
| 154 |
-
label="热度权重",
|
| 155 |
-
info="调整对内容热度的重视程度"
|
| 156 |
-
)
|
| 157 |
submit_btn = gr.Button("获取推荐", variant="primary")
|
| 158 |
|
| 159 |
with gr.Column(scale=2):
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
scores = rec["scores"]
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
|
| 179 |
submit_btn.click(
|
| 180 |
-
fn=lambda v, s, p:
|
| 181 |
recommendation_system.get_recommendations(RecommendationWeights(v, s, p))
|
| 182 |
),
|
| 183 |
inputs=[visibility_weight, sentiment_weight, popularity_weight],
|
| 184 |
-
outputs=
|
| 185 |
)
|
| 186 |
|
| 187 |
return interface
|
|
|
|
| 134 |
with gr.Blocks(theme=gr.themes.Soft()) as interface:
|
| 135 |
gr.Markdown("""
|
| 136 |
# 推文推荐系统
|
| 137 |
+
调整权重以获取个性化推荐
|
| 138 |
""")
|
| 139 |
|
| 140 |
with gr.Row():
|
| 141 |
with gr.Column(scale=1):
|
| 142 |
+
visibility_weight = gr.Slider(0, 1, 0.5, label="可信度权重", info="调整对内容可信度的重视程度")
|
| 143 |
+
sentiment_weight = gr.Slider(0, 1, 0.3, label="情感倾向权重", info="调整对情感倾向的重视程度")
|
| 144 |
+
popularity_weight = gr.Slider(0, 1, 0.2, label="热度权重", info="调整对内容热度的重视程度")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
submit_btn = gr.Button("获取推荐", variant="primary")
|
| 146 |
|
| 147 |
with gr.Column(scale=2):
|
| 148 |
+
output_html = gr.HTML()
|
| 149 |
+
|
| 150 |
+
def format_recommendations(raw_recommendations):
|
| 151 |
+
html = '<div style="font-family: sans-serif;">'
|
| 152 |
+
|
| 153 |
+
# 添加评分说明
|
| 154 |
+
html += '''
|
| 155 |
+
<div style="margin-bottom: 20px; padding: 15px; background-color: #f5f5f5; border-radius: 8px;">
|
| 156 |
+
<h3 style="margin-top: 0;">评分说明</h3>
|
| 157 |
+
<ul style="margin: 0;">
|
| 158 |
+
<li><strong>可信度</strong>:内容的可信程度评估</li>
|
| 159 |
+
<li><strong>情感倾向</strong>:文本的情感分析(积极/消极/中性)</li>
|
| 160 |
+
<li><strong>热度</strong>:基于点赞和转发的归一化分数</li>
|
| 161 |
+
</ul>
|
| 162 |
+
</div>
|
| 163 |
+
'''
|
| 164 |
+
|
| 165 |
+
# 显示推荐的tweets
|
| 166 |
+
for i, rec in enumerate(raw_recommendations["recommendations"], 1):
|
| 167 |
scores = rec["scores"]
|
| 168 |
+
html += f'''
|
| 169 |
+
<div style="margin-bottom: 15px; padding: 15px; border: 1px solid #ddd; border-radius: 8px;">
|
| 170 |
+
<div style="margin-bottom: 10px; font-size: 1.1em;">{rec["text"]}</div>
|
| 171 |
+
<div style="display: flex; flex-wrap: wrap; gap: 10px; font-size: 0.9em; color: #666;">
|
| 172 |
+
<span style="padding: 3px 8px; background-color: #e3f2fd; border-radius: 4px;">
|
| 173 |
+
总分: {scores["总分"]}
|
| 174 |
+
</span>
|
| 175 |
+
<span style="padding: 3px 8px; background-color: #e8f5e9; border-radius: 4px;">
|
| 176 |
+
可信度: {scores["可信度"]}
|
| 177 |
+
</span>
|
| 178 |
+
<span style="padding: 3px 8px; background-color: #fff3e0; border-radius: 4px;">
|
| 179 |
+
情感: {scores["情感倾向"]}
|
| 180 |
+
</span>
|
| 181 |
+
<span style="padding: 3px 8px; background-color: #fce4ec; border-radius: 4px;">
|
| 182 |
+
热度: {scores["热度"]}
|
| 183 |
+
</span>
|
| 184 |
+
<span style="padding: 3px 8px; background-color: #f3e5f5; border-radius: 4px;">
|
| 185 |
+
{scores["互动数"]}
|
| 186 |
+
</span>
|
| 187 |
+
</div>
|
| 188 |
+
</div>
|
| 189 |
+
'''
|
| 190 |
+
html += '</div>'
|
| 191 |
+
return html
|
| 192 |
|
| 193 |
submit_btn.click(
|
| 194 |
+
fn=lambda v, s, p: format_recommendations(
|
| 195 |
recommendation_system.get_recommendations(RecommendationWeights(v, s, p))
|
| 196 |
),
|
| 197 |
inputs=[visibility_weight, sentiment_weight, popularity_weight],
|
| 198 |
+
outputs=output_html
|
| 199 |
)
|
| 200 |
|
| 201 |
return interface
|