Spaces:
Sleeping
Sleeping
from liqfit.pipeline import ZeroShotClassificationPipeline | |
from liqfit.models import T5ForZeroShotClassification | |
from transformers import T5Tokenizer | |
from annotated_text import annotated_text | |
import streamlit as st | |
from collections import Counter | |
import nltk | |
import requests | |
from bs4 import BeautifulSoup | |
class NewsAnalytic(): | |
def __init__(self): | |
self.classifier=self.load_model() | |
def load_model(self): | |
model = T5ForZeroShotClassification.from_pretrained('knowledgator/comprehend_it-multilingual-t5-base') | |
tokenizer = T5Tokenizer.from_pretrained('knowledgator/comprehend_it-multilingual-t5-base') | |
classifier = ZeroShotClassificationPipeline(model=model, tokenizer=tokenizer,ypothesis_template = '{}', encoder_decoder = True) | |
nltk.download("punkt") | |
print("load model berhasil!") | |
return classifier | |
def anoted_sentence(self,content,candidate_labels): | |
sentences = nltk.sent_tokenize(content) | |
sentences = [sent for sent in sentences if "simak" not in sent.lower()] | |
result=self.classifier(sentences, candidate_labels) | |
summary_result=Counter([res['labels'][0] for res in result if res['labels'][0]!="neutral"]) | |
if len(summary_result)!=0: | |
summary_result=summary_result.most_common(1)[0][0] | |
else: | |
summary_result="neutral" | |
pair_result=[(res['sequence'],res['labels'][0]) if res['labels'][0]!="neutral" else res['sequence'] for res in result] | |
print("sentiment per sentence berhasil!") | |
return pair_result, summary_result | |
def get_news_content(self,url): | |
response = requests.get(url) | |
if response.status_code != 200: | |
return f"Error: Unable to fetch the page. Status code: {response.status_code}" | |
page_content = response.content | |
soup = BeautifulSoup(page_content, 'html.parser') | |
title = soup.find('h1').get_text() | |
paragraphs = soup.find_all('p') | |
content = ' '.join([p.get_text() for p in paragraphs]) | |
content = ' '.join([text for text in content.split("\n") if len(text)>100]) | |
print("mendapatkan konten berita berhasil!") | |
return {'title': title.strip(), 'content': content.strip()} | |
def streamlit_run(self): | |
st.markdown("<h2 style='text-align: center;'>Indonesian News Analytic </h2>", unsafe_allow_html=True) | |
st.markdown("<p style='text-align: center;'>Hafizh Zaki Prasetyo Adi|[email protected]|https://www.linkedin.com/in/hafizhzpa/ </p>", unsafe_allow_html=True) | |
part=st.sidebar.radio("input_type",["content", "link"],captions = ["input news content", "input news link"]) | |
if part=="content": | |
text = st.text_area('text', """Polisi telah menangkap Meita Irianty alias Tata Irianty, pemilik daycare Wensen School sekaligus influencer parenting, atas dugaan penganiayaan terhadap anak balita berusia 2 tahun. Tata telah ditetapkan sebagai tersangka dan ditahan meski saat ini dalam kondisi hamil. "Betul (hamil)," kata Kasat Reskrim Polres Metro Depok Komisaris Polisi (Kompol) Suardi Jumaing kepada wartawan di Mapolres Metro Depok, Kamis (1/8/2024). Sementara itu, Kapolres Depok Komisaris Besar Arya Perdana memastikan polisi akan tetap menyidik tersangka meski dalam kondisi hamil. Namun polisi tetap akan mengedepankan kondisi kesehatan tersangka. "Kita dalam melakukan penyidikan, itu normatif saya. Orang yang mempunyai penyakit khusus atau mungkin dalam kondisi khusus, seperti mengandung dan sebagainya, tetap kita lakukan pemeriksaan, tidak ada masalah," ujarnya. "Tapi, kalau ada masalah, kita akan larikan ke rumah sakit. Tentu Rumah Sakit Kramat Jati Polri, yang memang berwenang melakukan itu," ucapnya. Polisi pun memastikan tersangka akan tetap ditahan. "Kalaupun harus dibantarkan, ya kita bantarkan. Tetapi penahanan tetap kita lakukan," ujarnya. Sebelumnya, Tata ditangkap atas dugaan penganiayaan terhadap balita M (2) di tempat penitipan anak (daycare) di Harjamukti, Kota Depok. Tata, yang juga pemilik daycare, mengakui perbuatannya tersebut. "Iya (pelaku) pemilik daycare dan yang terpenting adalah bahwa yang bersangkutan mengakui bahwa dalam CCTV itu adalah dirinya, jadi tidak menyangkal melakukan kekerasan terhadap balita ini," kata Arya Perdana kepada wartawan Rabu (31/7). Tata ditangkap di rumahnya di kawasan Depok pada Rabu (31/7) pukul 22.00 WIB. Dia ditangkap tanpa perlawanan. Simak Video 'Viral Balita Diduga Dianiaya di Daycare Depok, Polisi Turun Tangan': [Gambas:Video 20detik]""") | |
if part=="link": | |
link = st.text_area('link', "") | |
if st.button('run'): | |
if part=="link": | |
content=self.get_news_content(link) | |
text=content["content"] | |
candidate_labels = ['positive','negative','neutral'] | |
pair_result, summary_result=self.anoted_sentence(text,candidate_labels) | |
annotated_text(pair_result) | |
st.text(f"sentiment: {summary_result}") | |
result_emo=self.classifier(text, ["bahagia", "sedih", "takut", "marah", "antisipasi", "terkejut", "jijik","percaya"]) | |
st.text(f"emotion: {result_emo['labels'][0]}") | |
result_category=self.classifier(text, ["Politik","Ekonomi","Hukum dan Kriminal","Teknologi","Pendidikan","Kesehatan","Olahraga","Hiburan","Gaya Hidup","Lingkungan","Transportasi","Pariwisata"]) | |
st.text(f"category: {result_category['labels'][0]}") | |
result_region=self.classifier(text, ["regional","nasional","internasional"]) | |
st.text(f"region: {result_region['labels'][0]}") | |
if __name__=="__main__": | |
stream=NewsAnalytic() | |
stream.streamlit_run() |