ViralContent / app.py
kailouis's picture
Create app.py
b8c8b55 verified
import torch
from transformers import pipeline, set_seed, AutoTokenizer, AutoModelForSequenceClassification
from datasets import load_dataset
import gradio as gr
import requests
from bs4 import BeautifulSoup
from nltk.sentiment import SentimentIntensityAnalyzer
from flair.models import TextClassifier
from flair.data import Sentence
import newspaper3k
# Konfigurasi Model
set_seed(42)
nltk.download('vader_lexicon')
# Model Text Generation
generator = pipeline('text-generation', model='gpt2-xl') # Model lebih canggih
# Model Sentiment Analysis
sentiment_analyzer = SentimentIntensityAnalyzer()
classifier = TextClassifier.load('en-sentiment')
# Model Klasifikasi Topik
tokenizer_topic = AutoTokenizer.from_pretrained("facebook/bart-large-mnli")
model_topic = AutoModelForSequenceClassification.from_pretrained("facebook/bart-large-mnli")
# Fungsi Helper
def get_trending_topics(platform):
if platform == "Twitter":
# Scraping trending topics dari Twitter
url = "https://twitter.com/i/trends"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
trends = [trend.text.strip() for trend in soup.find_all("div", class_="css-901oao r-1awozwy r-18jsvk2 r-6koalj r-370sk r-a023e6 r-b88u0q r-rjixqe r-bcqeeo r-1udh08x r-3s2u2q r-qvutc0")]
return trends
elif platform == "TikTok":
# Scraping trending topics dari TikTok (perlu metode khusus)
# ...
return ["Trending TikTok 1", "Trending TikTok 2"]
else: # Instagram
# Scraping trending topics dari Instagram (perlu metode khusus)
# ...
return ["Trending Instagram 1", "Trending Instagram 2"]
def find_related_trend(topic, trends):
# Menggunakan model klasifikasi topik untuk mencari tren yang relevan
topic_sentence = Sentence(topic)
classifier.predict(topic_sentence)
topic_sentiment = topic_sentence.labels[0]
related_trends = []
for trend in trends:
trend_sentence = Sentence(trend)
classifier.predict(trend_sentence)
trend_sentiment = trend_sentence.labels[0]
if topic_sentiment.value == trend_sentiment.value:
related_trends.append(trend)
return related_trends
def make_clickbait_title(title):
# Menggunakan pola clickbait dan analisis sentimen
title = title.strip()
sentiment = sentiment_analyzer.polarity_scores(title)
if sentiment['compound'] > 0.5:
# Positif -> "Rahasia...", "Terungkap...", dll.
clickbait_phrases = ["Rahasia ", "Terungkap ", "Hebat! ", "Menakjubkan! "]
elif sentiment['compound'] < -0.5:
# Negatif -> "Mengerikan...", "Kontroversial...", dll.
clickbait_phrases = ["Mengerikan! ", "Kontroversial! ", "Awas! ", "Bahaya! "]
else:
# Netral -> "Kamu Tidak Akan Percaya...", "Heboh...", dll.
clickbait_phrases = ["Kamu Tidak Akan Percaya...", "Heboh! ", "Viral! ", "Trending! "]
return clickbait_phrases[0] + title
def analyze_content(content):
# Analisis sentimen dan topik
sentence = Sentence(content)
classifier.predict(sentence)
sentiment = sentence.labels[0]
# Klasifikasi topik (perlu pengembangan lebih lanjut)
inputs = tokenizer_topic(content, return_tensors="pt")
outputs = model_topic(**inputs)
topic_probs = torch.softmax(outputs.logits, dim=1)
# ... (Interpretasi hasil klasifikasi topik) ...
return sentiment, "Topik yang Diprediksi"
def generate_content(topic, format, tone, platform):
trending_topics = get_trending_topics(platform)
related_trends = find_related_trend(topic, trending_topics)
prompt = f"Buat konten {format} tentang {topic} dengan gaya {tone} yang "
if related_trends:
prompt += f"berkaitan dengan tren {', '.join(related_trends)}."
else:
prompt += f"berpotensi menjadi viral."
output = generator(prompt, max_length=500, num_return_sequences=1)
content = output[0]['generated_text']
if format == "Judul":
content = make_clickbait_title(content)
sentiment, predicted_topic = analyze_content(content)
return content, sentiment.value, predicted_topic
# Antarmuka Gradio
iface = gr.Interface(
fn=generate_content,
inputs=[
gr.Textbox(lines=2, placeholder="Masukkan topik..."),
gr.Dropdown(["Teks", "Judul", "Tweet", "Artikel"], label="Format Konten"),
gr.Dropdown(["Netral", "Provokatif", "Humor", "Marah", "Sedih"], label="Tone"),
gr.Dropdown(["Twitter", "TikTok", "Instagram"], label="Platform")
],
outputs=[
"text",
"text",
"text"
],
title="Pembuat Konten Viral (At Any Cost)",
description="Hasilkan konten yang dirancang untuk menjadi viral (Eksperimental)."
)
iface.launch(share=True) # share=True untuk mendapatkan link publik