import gradio as gr from newspaper import Article from newspaper import Config from transformers import pipeline import requests from bs4 import BeautifulSoup import re from bs4 import BeautifulSoup as bs import requests from transformers import PreTrainedTokenizerFast, BartForConditionalGeneration # Load Model and Tokenize def get_summary(input_text): tokenizer = PreTrainedTokenizerFast.from_pretrained("ainize/kobart-news") summary_model = BartForConditionalGeneration.from_pretrained("ainize/kobart-news") input_ids = tokenizer.encode(input_text, return_tensors="pt") summary_text_ids = summary_model.generate( input_ids=input_ids, bos_token_id=summary_model.config.bos_token_id, eos_token_id=summary_model.config.eos_token_id, length_penalty=2.0, max_length=142, min_length=56, num_beams=4, ) return tokenizer.decode(summary_text_ids[0], skip_special_tokens=True) USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0' config = Config() config.browser_user_agent = USER_AGENT config.request_timeout = 10 class news_collector: def __init__(self): self.examples = [] def get_new_parser(self, url): article = Article(url, language='ko') article.download() article.parse() return article def get_news_links(self, page=''): url = "https://news.daum.net/breakingnews/economic" response = requests.get(url) html_text = response.text soup = bs(response.text, 'html.parser') news_titles = soup.select("a.link_txt") links = [item.attrs['href'] for item in news_titles ] https_links = [item for item in links if item.startswith('https') == True] https_links return https_links[:2] def update_news_examples(self): news_links = self.get_news_links() for news_url in news_links: article = self.get_new_parser(news_url) self.examples.append(get_summary(article.text)) title = "균형잡힌 뉴스 읽기 (Balanced News Reading)" with gr.Blocks() as demo: news = news_collector() gr.Markdown( """ # 균형잡힌 뉴스 읽기 (Balanced News Reading) 긍정적인 기사와 부정적인 기사의 균형을 보며 뉴스를 읽을 수 있습니다. 데모를 실행하면 데모 실행 날짜의 Daum뉴스를 `Example`에 가져옵니다. 모델에서 사용할 수 있는 길이보다 긴 기사가 있기 때문에 기사내용을 요약한 후 요역된 내용을 `Example`에 추가합니다. 뉴스기사를 선택하고 `Submit`버튼을 누르면 기사의 감정평가를 확인할 수 있습니다. """) news.update_news_examples() gr.load("models/gabrielyang/finance_news_classifier-KR_v7", inputs = gr.Textbox( placeholder="뉴스 기사 내용을 입력하세요." ), examples=news.examples) # gr.Examples( # examples=[ # ["images/demo1.jpg"], # ["images/demo2.jpg"], # ["images/demo4.jpg"], # ], if __name__ == "__main__": demo.launch()