Spaces:
Paused
Paused
| # 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) | |