GitHub Action
Sync from GitHub
ef78361
Raw
History Blame Contribute Delete
2.46 kB
"""ν‚€μ›Œλ“œ 감성뢄석 νƒ­.
ν‚€μ›Œλ“œλ³„ 감성 μš”μ•½, λΈŒλžœλ“œxν‚€μ›Œλ“œ ꡐ차 뢄석, LLM 이유 νƒœκ·Έ.
νŒ¨ν‚€μ§€λ‘œ 뢄리 (overview, drilldown, detail, cross_analysis, export_kw).
"""
import streamlit as st
from .overview import render_keyword_overview, render_summary_table, render_sentiment_chart
from .drilldown import render_keyword_drilldown, render_competitor_summary, render_competitor_drilldown
from .cross_analysis import render_brand_keyword_cross
def render(data: dict):
"""ν‚€μ›Œλ“œ 뢄석 νƒ­ λ Œλ”λ§."""
st.markdown("##### πŸ” ν‚€μ›Œλ“œ 감성 뢄석")
st.caption("ν‚€μ›Œλ“œλ³„ AI λ‹΅λ³€ 감성 뢄포와 λΈŒλžœλ“œ μ–ΈκΈ‰ 뢄석")
keyword_data = data.get("keyword_data", {})
keywords_list = keyword_data.get("keywords", [])
if not keywords_list:
st.info("ν‚€μ›Œλ“œ 뢄석 데이터가 μ—†μŠ΅λ‹ˆλ‹€. μ‹€ν–‰μš”μ²­ νƒ­μ—μ„œ ν‚€μ›Œλ“œ 뢄석을 μ‹€ν–‰ν•΄μ£Όμ„Έμš”.")
return
# Brand type toggle
brand_mode = st.radio(
"뢄석 λŒ€μƒ",
options=["🏠 μžμ‚¬ λΈŒλžœλ“œ", "🏒 κ²½μŸμ‚¬ λΈŒλžœλ“œ"],
horizontal=True,
key="sentiment:kw_brand_mode",
)
is_competitor = brand_mode == "🏒 κ²½μŸμ‚¬ λΈŒλžœλ“œ"
if is_competitor:
_render_competitor_view(data)
else:
_render_inhouse_view(data, keywords_list)
def _render_inhouse_view(data: dict, keywords_list: list[dict]):
"""μžμ‚¬ λΈŒλžœλ“œ ν‚€μ›Œλ“œ 뢄석."""
# --- Overview Card ---
render_keyword_overview(keywords_list)
# --- Section 1: Summary Table ---
render_summary_table(keywords_list)
# --- Section 2: Sentiment Comparison Chart ---
st.markdown("---")
render_sentiment_chart(keywords_list)
# --- Section 3: Keyword Drill-down (includes export) ---
st.markdown("---")
render_keyword_drilldown(data, keywords_list)
# --- Section 4: Brand x Keyword Cross Analysis ---
st.markdown("---")
render_brand_keyword_cross(data)
def _render_competitor_view(data: dict):
"""κ²½μŸμ‚¬ ν‚€μ›Œλ“œ LLM 뢄석 κ²°κ³Ό."""
st.markdown("##### 🏒 κ²½μŸμ‚¬ ν‚€μ›Œλ“œ LLM 뢄석")
st.caption("κ²½μŸμ‚¬λ§Œ μ–ΈκΈ‰λœ λ¬Έμž₯에 λŒ€ν•œ LLM 감성 뢄석 κ²°κ³Ό")
# Competitor summary card
render_competitor_summary(data)
# Cross analysis
st.markdown("---")
render_brand_keyword_cross(data, competitor=True)
# Drill-down
st.markdown("---")
render_competitor_drilldown(data)