import os import gradio as gr import google.generativeai as genai import spacy import yake import subprocess # Ensure spaCy model is downloaded dynamically MODEL_NAME = "en_core_web_sm" try: nlp = spacy.load(MODEL_NAME) except OSError: subprocess.run(["python", "-m", "spacy", "download", MODEL_NAME]) nlp = spacy.load(MODEL_NAME) # Configure Google Gemini AI genai.configure(api_key=os.getenv("AIzaSyDnx_qUjGTFG1pv1otPUhNt_bGGv14aMDI")) # Use environment variable for security def analyze_text(text): """Perform AI-driven text analysis.""" if not text: return "Please enter some text." # Summarization using Google Gemini AI try: prompt = f"Summarize this text:\n{text}" model = genai.GenerativeModel("gemini-pro") response = model.generate_content(prompt) summary = response.text.strip() if response and hasattr(response, "text") else "Error in summarization." except Exception as e: summary = f"Summarization failed: {str(e)}" # Basic Sentiment Analysis (Improve with ML if needed) sentiment = "Positive" if "good" in text.lower() else "Negative" # Keyword Extraction kw_extractor = yake.KeywordExtractor() keywords = [kw[0] for kw in kw_extractor.extract_keywords(text)[:5]] # Named Entity Recognition (NER) doc = nlp(text) entities = {ent.text: ent.label_ for ent in doc.ents} # AI-Generated Report report = f""" **Summary:** {summary} **Sentiment:** {sentiment} **Keywords:** {', '.join(keywords)} **Entities:** {entities if entities else 'None'} """ return report # Gradio Interface with gr.Blocks() as demo: gr.Markdown("# AI-Powered Text & File Analyzer 🚀") input_text = gr.Textbox(label="Enter Text") file_input = gr.File(label="Upload .txt File", file_types=[".txt"]) analyze_button = gr.Button("Analyze") output = gr.Markdown() def process_input(text, file): """Process text from input or file.""" if file: with open(file.name, "r", encoding="utf-8") as f: text = f.read() return analyze_text(text) analyze_button.click(process_input, inputs=[input_text, file_input], outputs=output) demo.launch()