820nam commited on
Commit
a8c6507
ยท
verified ยท
1 Parent(s): 02d5bf8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +5 -13
app.py CHANGED
@@ -23,6 +23,7 @@ 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
  return news_data
27
  else:
28
  st.error(f"Error: {response.status_code}, {response.text}")
@@ -31,16 +32,17 @@ def fetch_naver_news(query, display=10, start=1, sort="date"):
31
  # Step 2: Hugging Face ๋ฒˆ์—ญ ๋ชจ๋ธ ๋กœ๋“œ (ํ•œ๊ตญ์–ด -> ์˜์–ด)
32
  def load_translation_model():
33
  translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ko-en")
 
34
  return translator
35
 
36
  # Step 3: Hugging Face ์ •์น˜ ์„ฑํ–ฅ ๋ถ„์„ ๋ชจ๋ธ ๋กœ๋“œ
37
  def load_huggingface_model():
38
  classifier = pipeline("text-classification", model="bucketresearch/politicalBiasBERT")
 
39
  return classifier
40
 
41
  # Step 4: ์ •์น˜ ์„ฑํ–ฅ ๋ถ„๋ฅ˜ ํ•จ์ˆ˜
42
  def classify_political_sentiment(text, classifier):
43
- # ๊ฐ์„ฑ ๋ถ„์„ ์‹คํ–‰
44
  result = classifier(text[:512]) # ์ž…๋ ฅ์ด ๋„ˆ๋ฌด ๊ธธ๋ฉด ์ž˜๋ผ์„œ ๋ถ„์„
45
  sentiment = result[0]
46
  label = sentiment["label"]
@@ -49,7 +51,6 @@ def classify_political_sentiment(text, classifier):
49
  # ์ ์ˆ˜ํ™”
50
  sentiment_score = score if label == "POSITIVE" else -score
51
 
52
- # ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ๋ถ„๋ฅ˜ (์ง„๋ณด/๋ณด์ˆ˜)
53
  progressive_keywords = ["๋ณต์ง€", "ํ‰๋“ฑ", "๋ฏผ์ฃผ", "ํ™˜๊ฒฝ", "์‚ฌํšŒ์  ์ฑ…์ž„"]
54
  conservative_keywords = ["์•ˆ๋ณด", "์ „ํ†ต", "๊ฒฝ์ œ", "์„ฑ์žฅ", "์งˆ์„œ", "๊ตญ๋ฐฉ"]
55
 
@@ -59,7 +60,7 @@ def classify_political_sentiment(text, classifier):
59
  return "๋ณด์ˆ˜", sentiment_score
60
  else:
61
  return "์ค‘๋ฆฝ", sentiment_score
62
-
63
  # Step 5: ๋‰ด์Šค ๋ถ„์„ ๋ฐ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
64
  def analyze_news_political_orientation(news_items, classifier, translator):
65
  results = {"์ง„๋ณด": 0, "๋ณด์ˆ˜": 0, "์ค‘๋ฆฝ": 0}
@@ -70,10 +71,9 @@ def analyze_news_political_orientation(news_items, classifier, translator):
70
  description = item["description"]
71
  combined_text = f"{title}. {description}"
72
 
73
- # ๋ฒˆ์—ญ: ํ•œ๊ตญ์–ด -> ์˜์–ด
74
  translated_text = translator(combined_text)[0]['translation_text']
 
75
 
76
- # ์ •์น˜ ์„ฑํ–ฅ ๋ถ„๋ฅ˜
77
  orientation, score = classify_political_sentiment(translated_text, classifier)
78
  results[orientation] += 1
79
  detailed_results.append({
@@ -91,13 +91,11 @@ def analyze_news_political_orientation(news_items, classifier, translator):
91
  st.title("์ •์น˜ ์„ฑํ–ฅ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ")
92
  st.markdown("### ๋„ค์ด๋ฒ„ ๋‰ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ์ •์น˜ ์„ฑํ–ฅ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.")
93
 
94
- # ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ ์ž…๋ ฅ
95
  query = st.text_input("๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", value="์ •์น˜")
96
 
97
  if st.button("๋ถ„์„ ์‹œ์ž‘"):
98
  with st.spinner("๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ ์ค‘์ž…๋‹ˆ๋‹ค..."):
99
  try:
100
- # ๋„ค์ด๋ฒ„ ๋‰ด์Šค ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
101
  news_data = fetch_naver_news(query, display=10)
102
 
103
  if news_data is None:
@@ -105,29 +103,23 @@ if st.button("๋ถ„์„ ์‹œ์ž‘"):
105
  else:
106
  news_items = news_data["items"]
107
 
108
- # Hugging Face ๋ชจ๋ธ ๋กœ๋“œ
109
  classifier = load_huggingface_model()
110
  translator = load_translation_model()
111
 
112
- # ๋‰ด์Šค ๋ฐ์ดํ„ฐ ๋ถ„์„
113
  results, detailed_results = analyze_news_political_orientation(news_items, classifier, translator)
114
 
115
- # ๋ถ„์„ ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”
116
  st.subheader("๋ถ„์„ ๊ฒฐ๊ณผ ์š”์•ฝ")
117
  st.write(f"์ง„๋ณด: {results['์ง„๋ณด']}๊ฑด")
118
  st.write(f"๋ณด์ˆ˜: {results['๋ณด์ˆ˜']}๊ฑด")
119
  st.write(f"์ค‘๋ฆฝ: {results['์ค‘๋ฆฝ']}๊ฑด")
120
 
121
- # ์„ฑํ–ฅ ๋ถ„ํฌ ์ฐจํŠธ
122
  st.subheader("์„ฑํ–ฅ ๋ถ„ํฌ ์ฐจํŠธ")
123
  st.bar_chart(pd.DataFrame.from_dict(results, orient='index', columns=["๊ฑด์ˆ˜"]))
124
 
125
- # ์„ธ๋ถ€ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
126
  st.subheader("์„ธ๋ถ€ ๊ฒฐ๊ณผ")
127
  df = pd.DataFrame(detailed_results)
128
  st.dataframe(df)
129
 
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
+ st.write("Fetched News Data:", news_data) # ๋„ค์ด๋ฒ„ ๋‰ด์Šค ๋ฐ์ดํ„ฐ ํ™•์ธ
27
  return news_data
28
  else:
29
  st.error(f"Error: {response.status_code}, {response.text}")
 
32
  # Step 2: Hugging Face ๋ฒˆ์—ญ ๋ชจ๋ธ ๋กœ๋“œ (ํ•œ๊ตญ์–ด -> ์˜์–ด)
33
  def load_translation_model():
34
  translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ko-en")
35
+ st.write("Translation model loaded.") # ๋ฒˆ์—ญ ๋ชจ๋ธ ๋กœ๋“œ ํ™•์ธ
36
  return translator
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: ์ •์น˜ ์„ฑํ–ฅ ๋ถ„๋ฅ˜ ํ•จ์ˆ˜
45
  def classify_political_sentiment(text, classifier):
 
46
  result = classifier(text[:512]) # ์ž…๋ ฅ์ด ๋„ˆ๋ฌด ๊ธธ๋ฉด ์ž˜๋ผ์„œ ๋ถ„์„
47
  sentiment = result[0]
48
  label = sentiment["label"]
 
51
  # ์ ์ˆ˜ํ™”
52
  sentiment_score = score if label == "POSITIVE" else -score
53
 
 
54
  progressive_keywords = ["๋ณต์ง€", "ํ‰๋“ฑ", "๋ฏผ์ฃผ", "ํ™˜๊ฒฝ", "์‚ฌํšŒ์  ์ฑ…์ž„"]
55
  conservative_keywords = ["์•ˆ๋ณด", "์ „ํ†ต", "๊ฒฝ์ œ", "์„ฑ์žฅ", "์งˆ์„œ", "๊ตญ๋ฐฉ"]
56
 
 
60
  return "๋ณด์ˆ˜", sentiment_score
61
  else:
62
  return "์ค‘๋ฆฝ", sentiment_score
63
+
64
  # Step 5: ๋‰ด์Šค ๋ถ„์„ ๋ฐ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
65
  def analyze_news_political_orientation(news_items, classifier, translator):
66
  results = {"์ง„๋ณด": 0, "๋ณด์ˆ˜": 0, "์ค‘๋ฆฝ": 0}
 
71
  description = item["description"]
72
  combined_text = f"{title}. {description}"
73
 
 
74
  translated_text = translator(combined_text)[0]['translation_text']
75
+ st.write("Translated Text:", translated_text) # ๋ฒˆ์—ญ๋œ ํ…์ŠคํŠธ ํ™•์ธ
76
 
 
77
  orientation, score = classify_political_sentiment(translated_text, classifier)
78
  results[orientation] += 1
79
  detailed_results.append({
 
91
  st.title("์ •์น˜ ์„ฑํ–ฅ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ")
92
  st.markdown("### ๋„ค์ด๋ฒ„ ๋‰ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ์ •์น˜ ์„ฑํ–ฅ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.")
93
 
 
94
  query = st.text_input("๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", value="์ •์น˜")
95
 
96
  if st.button("๋ถ„์„ ์‹œ์ž‘"):
97
  with st.spinner("๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ ์ค‘์ž…๋‹ˆ๋‹ค..."):
98
  try:
 
99
  news_data = fetch_naver_news(query, display=10)
100
 
101
  if news_data is None:
 
103
  else:
104
  news_items = news_data["items"]
105
 
 
106
  classifier = load_huggingface_model()
107
  translator = load_translation_model()
108
 
 
109
  results, detailed_results = analyze_news_political_orientation(news_items, classifier, translator)
110
 
 
111
  st.subheader("๋ถ„์„ ๊ฒฐ๊ณผ ์š”์•ฝ")
112
  st.write(f"์ง„๋ณด: {results['์ง„๋ณด']}๊ฑด")
113
  st.write(f"๋ณด์ˆ˜: {results['๋ณด์ˆ˜']}๊ฑด")
114
  st.write(f"์ค‘๋ฆฝ: {results['์ค‘๋ฆฝ']}๊ฑด")
115
 
 
116
  st.subheader("์„ฑํ–ฅ ๋ถ„ํฌ ์ฐจํŠธ")
117
  st.bar_chart(pd.DataFrame.from_dict(results, orient='index', columns=["๊ฑด์ˆ˜"]))
118
 
 
119
  st.subheader("์„ธ๋ถ€ ๊ฒฐ๊ณผ")
120
  df = pd.DataFrame(detailed_results)
121
  st.dataframe(df)
122
 
 
123
  st.subheader("๋‰ด์Šค ๋งํฌ")
124
  for index, row in df.iterrows():
125
  st.write(f"- [{row['์ œ๋ชฉ']}]({row['๋งํฌ']}) (์„ฑํ–ฅ: {row['์„ฑํ–ฅ']}, ์ ์ˆ˜: {row['์ ์ˆ˜']:.2f})")