# filename: app.py import os import gradio as gr from dotenv import load_dotenv from text_analyzer import TextAnalyzer from log_config import get_logger os.environ['GRADIO_ANALYTICS_ENABLED'] = 'False' load_dotenv() logger = get_logger('TextAnalysisAppV10') def launch_gradio(): """ Initializes and launches a Gradio web interface for uploading documents and performing text analysis. This interface allows users to upload files and select types of text analysis to be performed on the uploaded document. """ text_analyzer = TextAnalyzer() available_analyses = ["Summary", "Characters", "Plot", "Themes", "Techniques", "Emotional Core", "Narrative Perspective"] def process_input(file_path, selected_analyses, progress=gr.Progress()): if not file_path: return "Please upload a document to proceed." if not selected_analyses: return "Please select at least one type of analysis." if any(analysis not in available_analyses for analysis in selected_analyses): return f"Please choose valid options from: {', '.join(available_analyses)}." try: progress(0.0, desc="Starting analysis...") results = text_analyzer.analyze_text(file_path, selected_analyses, progress) progress(1.0, desc="Analysis completed.") return results or "Analysis completed but no actionable results were found." except Exception as e: logger.error("Error processing document: %s", str(e), exc_info=True) return "Please ensure the file is not corrupted and is in a supported format." with gr.Blocks() as demo: file_input = gr.File(label="Upload Your Document", type="filepath", file_types=["txt", "pdf", "docx"]) analysis_options = gr.CheckboxGroup(choices=available_analyses, label="Select Text Analysis Types") output_text = gr.Textbox(label="Analysis Results", interactive=True) submit_button = gr.Button("Analyze") submit_button.click( fn=process_input, inputs=[file_input, analysis_options], outputs=output_text ) demo.launch(server_port=7880, share=True) if __name__ == "__main__": launch_gradio() # file: app v10.py (end)