File size: 5,678 Bytes
a8138ea
 
 
 
 
 
 
 
 
 
 
1a7e6e2
 
40be699
 
 
 
7512535
aecb12d
40be699
a8138ea
 
 
 
 
 
 
 
 
 
aecb12d
a8138ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aecb12d
a8138ea
 
6bab979
 
a8138ea
 
 
 
 
 
c6bea7d
 
 
a8138ea
 
 
 
 
 
 
 
 
3b154ce
 
4b53f10
3b154ce
 
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
73
74
75
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()