Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
import random | |
from tweet_analyzer import TweetDatasetProcessor | |
from dotenv import load_dotenv | |
load_dotenv() | |
class TwitterCloneApp: | |
def __init__(self): | |
self.processor = None | |
def process_upload(self, file): | |
"""Process uploaded PDF file and analyze personality""" | |
try: | |
self.processor = TweetDatasetProcessor() | |
text = self.processor.extract_text_from_pdf(file.name) | |
df = self.processor.process_pdf_content(text) | |
mentions = df['mentions'].explode().dropna().unique().tolist() | |
hashtags = df['hashtags'].explode().dropna().unique().tolist() | |
personality_analysis = self.processor.analyze_personality() | |
return f"Processed {len(df)} tweets\n\nMentions: {mentions}\n\nHashtags: {hashtags}\n\nPersonality Analysis:\n{personality_analysis}" | |
except Exception as e: | |
return f"Error processing file: {str(e)}" | |
def generate_tweet(self, context): | |
"""Generate a new tweet based on the analyzed personality""" | |
if not self.processor: | |
return "Please upload and analyze a dataset first." | |
try: | |
# Predefined contexts | |
additional_contexts = [ | |
"Comment on a recent technological advancement.", | |
"Share a motivational thought.", | |
"Discuss a current trending topic.", | |
"Reflect on a past experience.", | |
"Provide advice to followers." | |
] | |
# Extract historical topics | |
historical_topics = self.processor.analyze_topics(n_topics=5) | |
# Combine predefined contexts with historical topics | |
combined_contexts = additional_contexts + historical_topics | |
selected_contexts = random.sample(combined_contexts, min(3, len(combined_contexts))) | |
# If user provided context, add it to the mix | |
if context: | |
selected_contexts.append(context) | |
# Generate the tweet with diverse contexts | |
tweet = self.processor.generate_tweet(context=" | ".join(selected_contexts)) | |
return tweet | |
except Exception as e: | |
return f"Error generating tweet: {str(e)}" | |
def create_interface(self): | |
"""Create the Gradio interface""" | |
with gr.Blocks(title="Twitter Personality Cloner") as interface: | |
gr.Markdown("# Twitter Personality Cloner") | |
gr.Markdown("Upload a PDF file containing tweets to analyze the author's personality and generate new tweets in their style.") | |
with gr.Tab("Analyze Personality"): | |
file_input = gr.File(label="Upload PDF Dataset", file_types=[".pdf"]) | |
analyze_button = gr.Button("Analyze Dataset") | |
analysis_output = gr.Textbox(label="Analysis Results", lines=10) | |
analyze_button.click( | |
fn=self.process_upload, | |
inputs=file_input, | |
outputs=analysis_output | |
) | |
with gr.Tab("Generate Tweets"): | |
context_input = gr.Textbox(label="Context (optional)", placeholder="Enter topic or context for the tweet") | |
generate_button = gr.Button("Generate Tweet") | |
tweet_output = gr.Textbox(label="Generated Tweet") | |
generate_button.click( | |
fn=self.generate_tweet, | |
inputs=context_input, | |
outputs=tweet_output | |
) | |
return interface | |
def main(): | |
app = TwitterCloneApp() | |
interface = app.create_interface() | |
interface.launch(share=True) | |
if __name__ == "__main__": | |
main() | |