820nam commited on
Commit
74f08a5
ยท
verified ยท
1 Parent(s): 8cadfb7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -14
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
- 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: ์ •์น˜ ์„ฑํ–ฅ ๋ถ„๋ฅ˜ ํ•จ์ˆ˜
@@ -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
- try:
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})")