import gradio as gr import re from transformers import pipeline # Load summarization pipeline safely summarizer = None try: summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6") except Exception: try: summarizer = pipeline("text2text-generation", model="sshleifer/distilbart-cnn-12-6") except Exception as e: print(f"Pipeline error: {e}") def extract_key_points(text, num_points=3): sentences = [s.strip() for s in re.split(r'(?<=[.!?]) +', text) if len(s.strip()) > 10] if not sentences: return "• No key sentences identified." key_sentences = sorted(sentences, key=lambda s: len(s), reverse=True)[:num_points] return "\n".join([f"• {s}" for s in key_sentences]) def analyze_and_summarize(text, max_len, min_len): if not text or len(text.strip()) < 20: return ( "⚠️ Please enter a longer text (at least 20 characters) to summarize.", "N/A", "### 📊 Summary Analytics\n- Please provide input text." ) words_input = len(text.split()) try: if summarizer: summary_res = summarizer( text, max_length=int(max_len), min_length=int(min_len), do_sample=False ) if isinstance(summary_res, list) and len(summary_res) > 0: summary_text = summary_res[0].get('summary_text') or summary_res[0].get('generated_text') or str(summary_res[0]) else: summary_text = str(summary_res) else: sentences = [s.strip() for s in re.split(r'(?<=[.!?]) +', text) if len(s.strip()) > 5] summary_text = " ".join(sentences[:max(1, len(sentences)//2)]) except Exception: sentences = [s.strip() for s in re.split(r'(?<=[.!?]) +', text) if len(s.strip()) > 5] summary_text = " ".join(sentences[:2]) if len(sentences) >= 2 else text words_summary = len(summary_text.split()) reduction = max(0, round((1 - (words_summary / words_input)) * 100, 1)) if words_input > 0 else 0 read_time_saved = max(0, round((words_input - words_summary) / 200, 1)) key_bullets = extract_key_points(text) stats_md = f""" ### 📊 Summary Analytics - **Original Word Count**: `{words_input}` words - **Summary Word Count**: `{words_summary}` words - **Text Reduction**: `{reduction}%` smaller - **Est. Reading Time Saved**: `{read_time_saved} minutes` """ return summary_text, key_bullets, stats_md example_1 = """Artificial intelligence (AI) is transforming industries worldwide, from healthcare and finance to education and transport. Deep learning models, powered by neural networks with millions or billions of parameters, have achieved unprecedented capabilities in natural language understanding, computer vision, and autonomous decision making. As these technologies evolve, researchers emphasize the importance of AI safety, ethics, and transparency to ensure AI systems remain aligned with human values and societal benefit.""" example_2 = """Machine learning algorithms build a mathematical model based on sample data, known as training data, to make predictions or decisions without being explicitly programmed to do so. Supervised learning algorithms build a mathematical model of a set of data that contains both the inputs and the desired outputs. Unsupervised learning algorithms take a set of data that contains only inputs, and find structure in the data, like grouping or clustering of data points.""" demo = gr.Blocks() with demo: gr.Markdown( """ # 📝 Smart AI Text Summarizer & Insight Extractor *Transform lengthy articles, essays, and documents into concise, highly readable summaries powered by Deep Learning.* """ ) with gr.Row(): with gr.Column(scale=1): input_text = gr.Textbox( label="Input Document / Article Text", placeholder="Paste your paragraph or article here...", lines=10 ) with gr.Row(): max_slider = gr.Slider(minimum=30, maximum=300, value=130, step=10, label="Max Summary Length") min_slider = gr.Slider(minimum=10, maximum=100, value=30, step=5, label="Min Summary Length") submit_btn = gr.Button("⚡ Summarize & Extract Insights", variant="primary") gr.Examples( examples=[[example_1, 130, 30], [example_2, 100, 25]], inputs=[input_text, max_slider, min_slider] ) with gr.Column(scale=1): output_summary = gr.Textbox(label="✨ AI Abstractive Summary", lines=5) output_bullets = gr.Textbox(label="📌 Key Highlight Points", lines=4) output_stats = gr.Markdown(label="Analytics") submit_btn.click( fn=analyze_and_summarize, inputs=[input_text, max_slider, min_slider], outputs=[output_summary, output_bullets, output_stats] ) if __name__ == "__main__": demo.launch()