62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
import gradio as gr
|
|
from transformers import pipeline
|
|
|
|
# 요약
|
|
summarizer = pipeline("summarization")
|
|
# 감성분석
|
|
classifier = pipeline("sentiment-analysis")
|
|
# 개체명인식(NER)
|
|
ner = pipeline("ner", grouped_entities=True)
|
|
# 변역
|
|
translator = pipeline("translation_en_to_ko", model="facebook/m2m100_418M")
|
|
|
|
def analyze_news(article):
|
|
|
|
if not article:
|
|
return "", "", "", ""
|
|
|
|
# 1. 뉴스 요약
|
|
summary_result = summarizer(article)
|
|
summary = summary_result[0]['summary_text']
|
|
# 2. 감성분석(뉴스원문)
|
|
sentiment_result = classifier(article)
|
|
sentiment = (
|
|
f"감성 : {sentiment_result[0]['label']}"
|
|
f"score : {sentiment_result[0]['score']:.4f}"
|
|
|
|
)
|
|
# 3. 키워드 추철
|
|
ner_result = ner(article)
|
|
|
|
keywords = []
|
|
|
|
for item in ner_result:
|
|
word = item['word']
|
|
|
|
if word not in keywords:
|
|
keywords.append(word)
|
|
# 리스트 -> 문자열
|
|
keyword_text = ", ".join(keywords)
|
|
# 4. 번역
|
|
translation_result = translator(summary)
|
|
translator_summary = translation_result[0]['translation_text']
|
|
|
|
return summary, sentiment, keyword_text, translator_summary
|
|
|
|
|
|
with gr.Blocks(title="AI 뉴스 분석기") as demo:
|
|
gr.Markdown("## AI 뉴스 분석기")
|
|
with gr.Row():
|
|
with gr.Column(scale=2):
|
|
article_input = gr.Textbox(label = "영문 뉴스 기사 입력", lines=15, placeholder="영문 뉴스 기사를 입력하세요..",)
|
|
analyze_btn = gr.Button("뉴스 분석 시작")
|
|
|
|
with gr.Column(scale=2):
|
|
summary_output = gr.Textbox(label = "뉴스 요약", lines = 5)
|
|
sentiment_output = gr.Textbox(label = "감성 분석")
|
|
keyword_output = gr.Textbox(label = "키워드 추출")
|
|
translation_output = gr.Textbox(label = "한국어 번역 ", lines= 5)
|
|
|
|
analyze_btn.click(fn = analyze_news, inputs=article_input, outputs=[summary_output, sentiment_output, keyword_output, translation_output])
|
|
|
|
demo.launch() |