Update app.py
Browse files
app.py
CHANGED
@@ -23,7 +23,6 @@ def fetch_naver_news(query, display=10, start=1, sort="date"):
|
|
23 |
response = requests.get(url, headers=headers, params=params)
|
24 |
if response.status_code == 200:
|
25 |
news_data = response.json()
|
26 |
-
st.write("Fetched News Data:", news_data) # ๋ค์ด๋ฒ ๋ด์ค ๋ฐ์ดํฐ ํ์ธ
|
27 |
return news_data
|
28 |
else:
|
29 |
st.error(f"Error: {response.status_code}, {response.text}")
|
@@ -31,14 +30,17 @@ def fetch_naver_news(query, display=10, start=1, sort="date"):
|
|
31 |
|
32 |
# Step 2: Hugging Face ๋ฒ์ญ ๋ชจ๋ธ ๋ก๋ (ํ๊ตญ์ด -> ์์ด)
|
33 |
def load_translation_model():
|
34 |
-
|
35 |
-
|
36 |
-
|
|
|
|
|
|
|
|
|
37 |
|
38 |
# Step 3: Hugging Face ์ ์น ์ฑํฅ ๋ถ์ ๋ชจ๋ธ ๋ก๋
|
39 |
def load_huggingface_model():
|
40 |
classifier = pipeline("text-classification", model="bucketresearch/politicalBiasBERT")
|
41 |
-
st.write("Political Bias model loaded.") # ์ ์น ์ฑํฅ ๋ถ์ ๋ชจ๋ธ ๋ก๋ ํ์ธ
|
42 |
return classifier
|
43 |
|
44 |
# Step 4: ์ ์น ์ฑํฅ ๋ถ๋ฅ ํจ์
|
@@ -48,7 +50,6 @@ def classify_political_sentiment(text, classifier):
|
|
48 |
label = sentiment["label"]
|
49 |
score = sentiment["score"]
|
50 |
|
51 |
-
# ์ ์ํ
|
52 |
sentiment_score = score if label == "POSITIVE" else -score
|
53 |
|
54 |
progressive_keywords = ["๋ณต์ง", "ํ๋ฑ", "๋ฏผ์ฃผ", "ํ๊ฒฝ", "์ฌํ์ ์ฑ
์"]
|
@@ -73,16 +74,10 @@ def analyze_news_political_orientation(news_items, classifier, translator):
|
|
73 |
|
74 |
# ๋ฒ์ญ: ํ๊ตญ์ด -> ์์ด
|
75 |
translated_text = translator(combined_text)[0]['translation_text']
|
76 |
-
st.write("Translated Text:", translated_text) # ๋ฒ์ญ๋ ํ
์คํธ
|
77 |
|
78 |
# ์ ์น ์ฑํฅ ๋ถ๋ฅ
|
79 |
-
|
80 |
-
orientation, score = classify_political_sentiment(translated_text, classifier)
|
81 |
-
st.write(f"Orientation: {orientation}, Score: {score}") # ์์ธก๋ ์ฑํฅ ๋ฐ ์ ์ ์ถ๋ ฅ
|
82 |
-
except Exception as e:
|
83 |
-
st.write(f"Error in sentiment analysis: {e}") # ์์ธก ์คํจ ์ ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ
|
84 |
-
continue # ์์ธ ๋ฐ์ ์ ํด๋น ๋ด์ค ๊ฑด ๋์ด๊ฐ๊ธฐ
|
85 |
-
|
86 |
results[orientation] += 1
|
87 |
detailed_results.append({
|
88 |
"์ ๋ชฉ": title,
|
@@ -99,11 +94,13 @@ def analyze_news_political_orientation(news_items, classifier, translator):
|
|
99 |
st.title("์ ์น ์ฑํฅ ๋ถ์ ๋์๋ณด๋")
|
100 |
st.markdown("### ๋ค์ด๋ฒ ๋ด์ค ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๊ณ ์ ์น ์ฑํฅ์ ๋ถ์ํฉ๋๋ค.")
|
101 |
|
|
|
102 |
query = st.text_input("๊ฒ์ ํค์๋๋ฅผ ์
๋ ฅํ์ธ์", value="์ ์น")
|
103 |
|
104 |
if st.button("๋ถ์ ์์"):
|
105 |
with st.spinner("๋ฐ์ดํฐ๋ฅผ ๋ถ์ ์ค์
๋๋ค..."):
|
106 |
try:
|
|
|
107 |
news_data = fetch_naver_news(query, display=10)
|
108 |
|
109 |
if news_data is None:
|
@@ -111,23 +108,29 @@ if st.button("๋ถ์ ์์"):
|
|
111 |
else:
|
112 |
news_items = news_data["items"]
|
113 |
|
|
|
114 |
classifier = load_huggingface_model()
|
115 |
translator = load_translation_model()
|
116 |
|
|
|
117 |
results, detailed_results = analyze_news_political_orientation(news_items, classifier, translator)
|
118 |
|
|
|
119 |
st.subheader("๋ถ์ ๊ฒฐ๊ณผ ์์ฝ")
|
120 |
st.write(f"์ง๋ณด: {results['์ง๋ณด']}๊ฑด")
|
121 |
st.write(f"๋ณด์: {results['๋ณด์']}๊ฑด")
|
122 |
st.write(f"์ค๋ฆฝ: {results['์ค๋ฆฝ']}๊ฑด")
|
123 |
|
|
|
124 |
st.subheader("์ฑํฅ ๋ถํฌ ์ฐจํธ")
|
125 |
st.bar_chart(pd.DataFrame.from_dict(results, orient='index', columns=["๊ฑด์"]))
|
126 |
|
|
|
127 |
st.subheader("์ธ๋ถ ๊ฒฐ๊ณผ")
|
128 |
df = pd.DataFrame(detailed_results)
|
129 |
st.dataframe(df)
|
130 |
|
|
|
131 |
st.subheader("๋ด์ค ๋งํฌ")
|
132 |
for index, row in df.iterrows():
|
133 |
st.write(f"- [{row['์ ๋ชฉ']}]({row['๋งํฌ']}) (์ฑํฅ: {row['์ฑํฅ']}, ์ ์: {row['์ ์']:.2f})")
|
|
|
23 |
response = requests.get(url, headers=headers, params=params)
|
24 |
if response.status_code == 200:
|
25 |
news_data = response.json()
|
|
|
26 |
return news_data
|
27 |
else:
|
28 |
st.error(f"Error: {response.status_code}, {response.text}")
|
|
|
30 |
|
31 |
# Step 2: Hugging Face ๋ฒ์ญ ๋ชจ๋ธ ๋ก๋ (ํ๊ตญ์ด -> ์์ด)
|
32 |
def load_translation_model():
|
33 |
+
try:
|
34 |
+
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ko-en")
|
35 |
+
st.write("Translation model loaded successfully.")
|
36 |
+
return translator
|
37 |
+
except Exception as e:
|
38 |
+
st.error(f"Error loading translation model: {e}")
|
39 |
+
return None
|
40 |
|
41 |
# Step 3: Hugging Face ์ ์น ์ฑํฅ ๋ถ์ ๋ชจ๋ธ ๋ก๋
|
42 |
def load_huggingface_model():
|
43 |
classifier = pipeline("text-classification", model="bucketresearch/politicalBiasBERT")
|
|
|
44 |
return classifier
|
45 |
|
46 |
# Step 4: ์ ์น ์ฑํฅ ๋ถ๋ฅ ํจ์
|
|
|
50 |
label = sentiment["label"]
|
51 |
score = sentiment["score"]
|
52 |
|
|
|
53 |
sentiment_score = score if label == "POSITIVE" else -score
|
54 |
|
55 |
progressive_keywords = ["๋ณต์ง", "ํ๋ฑ", "๋ฏผ์ฃผ", "ํ๊ฒฝ", "์ฌํ์ ์ฑ
์"]
|
|
|
74 |
|
75 |
# ๋ฒ์ญ: ํ๊ตญ์ด -> ์์ด
|
76 |
translated_text = translator(combined_text)[0]['translation_text']
|
77 |
+
st.write("Translated Text:", translated_text) # ๋ฒ์ญ๋ ํ
์คํธ ํ์ธ
|
78 |
|
79 |
# ์ ์น ์ฑํฅ ๋ถ๋ฅ
|
80 |
+
orientation, score = classify_political_sentiment(translated_text, classifier)
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
results[orientation] += 1
|
82 |
detailed_results.append({
|
83 |
"์ ๋ชฉ": title,
|
|
|
94 |
st.title("์ ์น ์ฑํฅ ๋ถ์ ๋์๋ณด๋")
|
95 |
st.markdown("### ๋ค์ด๋ฒ ๋ด์ค ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๊ณ ์ ์น ์ฑํฅ์ ๋ถ์ํฉ๋๋ค.")
|
96 |
|
97 |
+
# ๊ฒ์ ํค์๋ ์
๋ ฅ
|
98 |
query = st.text_input("๊ฒ์ ํค์๋๋ฅผ ์
๋ ฅํ์ธ์", value="์ ์น")
|
99 |
|
100 |
if st.button("๋ถ์ ์์"):
|
101 |
with st.spinner("๋ฐ์ดํฐ๋ฅผ ๋ถ์ ์ค์
๋๋ค..."):
|
102 |
try:
|
103 |
+
# ๋ค์ด๋ฒ ๋ด์ค ๋ฐ์ดํฐ ์์ง
|
104 |
news_data = fetch_naver_news(query, display=10)
|
105 |
|
106 |
if news_data is None:
|
|
|
108 |
else:
|
109 |
news_items = news_data["items"]
|
110 |
|
111 |
+
# Hugging Face ๋ชจ๋ธ ๋ก๋
|
112 |
classifier = load_huggingface_model()
|
113 |
translator = load_translation_model()
|
114 |
|
115 |
+
# ๋ด์ค ๋ฐ์ดํฐ ๋ถ์
|
116 |
results, detailed_results = analyze_news_political_orientation(news_items, classifier, translator)
|
117 |
|
118 |
+
# ๋ถ์ ๊ฒฐ๊ณผ ์๊ฐํ
|
119 |
st.subheader("๋ถ์ ๊ฒฐ๊ณผ ์์ฝ")
|
120 |
st.write(f"์ง๋ณด: {results['์ง๋ณด']}๊ฑด")
|
121 |
st.write(f"๋ณด์: {results['๋ณด์']}๊ฑด")
|
122 |
st.write(f"์ค๋ฆฝ: {results['์ค๋ฆฝ']}๊ฑด")
|
123 |
|
124 |
+
# ์ฑํฅ ๋ถํฌ ์ฐจํธ
|
125 |
st.subheader("์ฑํฅ ๋ถํฌ ์ฐจํธ")
|
126 |
st.bar_chart(pd.DataFrame.from_dict(results, orient='index', columns=["๊ฑด์"]))
|
127 |
|
128 |
+
# ์ธ๋ถ ๊ฒฐ๊ณผ ์ถ๋ ฅ
|
129 |
st.subheader("์ธ๋ถ ๊ฒฐ๊ณผ")
|
130 |
df = pd.DataFrame(detailed_results)
|
131 |
st.dataframe(df)
|
132 |
|
133 |
+
# ๋งํฌ ํฌํจํ ๋ด์ค ์ถ๋ ฅ
|
134 |
st.subheader("๋ด์ค ๋งํฌ")
|
135 |
for index, row in df.iterrows():
|
136 |
st.write(f"- [{row['์ ๋ชฉ']}]({row['๋งํฌ']}) (์ฑํฅ: {row['์ฑํฅ']}, ์ ์: {row['์ ์']:.2f})")
|