File size: 5,519 Bytes
a8138ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6bea7d
 
 
a8138ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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.model = T5ForZeroShotClassification.from_pretrained('knowledgator/comprehend_it-multilingual-t5-base')
        self.tokenizer = T5Tokenizer.from_pretrained('knowledgator/comprehend_it-multilingual-t5-base')
        self.classifier = ZeroShotClassificationPipeline(model=self.model, tokenizer=self.tokenizer,ypothesis_template = '{}', encoder_decoder = True)
        nltk.download('punkt')
    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]
        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])

        return {'title': title.strip(), 'content': content.strip()}
    def streamlit_run(self):
        st.markdown("<h2 style='text-align: center; color: black;'>Indonesian News Analytic </h2>", unsafe_allow_html=True)
        st.markdown("<p style='text-align: center; color: black;'>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__":
    pipeline=NewsAnalytic()
    pipeline.streamlit_run()