Spaces:
Sleeping
Sleeping
| # main | |
| import gradio as gr | |
| import textstat | |
| import matplotlib.pyplot as plt | |
| def evaluate_text_details(text): | |
| details = { | |
| "Number of Sentences": textstat.sentence_count(text), | |
| "Number of Words": textstat.lexicon_count(text, removepunct=True), | |
| "Number of Syllables": textstat.syllable_count(text), | |
| "Number of Characters": sum(len(word) for word in text.split()), | |
| "Number of Complex Words": textstat.difficult_words(text), | |
| "Percentage of Complex Words": round((textstat.difficult_words(text) / max(textstat.lexicon_count(text, removepunct=True), 1)) * 100, 3), | |
| "Average Syllables per Word": round(textstat.syllable_count(text) / max(textstat.lexicon_count(text, removepunct=True), 1), 3), | |
| "Average Words per Sentence": round(textstat.lexicon_count(text, removepunct=True) / max(textstat.sentence_count(text), 1),3), | |
| } | |
| readability_scores = { | |
| "Flesch Reading Ease": textstat.flesch_reading_ease(text), | |
| "Flesch-Kincaid Grade Level": textstat.flesch_kincaid_grade(text), | |
| "Gunning Fog Index": textstat.gunning_fog(text), | |
| "Automated Readability Index (ARI)": textstat.automated_readability_index(text), | |
| "SMOG Index": textstat.smog_index(text), | |
| "Coleman-Liau Index": textstat.coleman_liau_index(text), | |
| "Dale-Chall Readability Score": textstat.dale_chall_readability_score(text) | |
| } | |
| return details, readability_scores | |
| def plot_bar_chart(data, title, ylabel): | |
| plt.figure(figsize=(6, 4)) | |
| plt.barh(list(data.keys()), list(data.values()), color='skyblue') | |
| plt.xlabel(ylabel) | |
| plt.title(title) | |
| plt.grid(axis='x', linestyle='--', alpha=0.6) | |
| plt.tight_layout() | |
| plot_filename = f"{title.replace(' ', '_')}.png" | |
| plt.savefig(plot_filename) | |
| plt.close() | |
| return plot_filename | |
| def analyze_text(text): | |
| details, readability_scores = evaluate_text_details(text) | |
| stats_chart = plot_bar_chart(details, "Text Statistics", "Count") | |
| readability_chart = plot_bar_chart(readability_scores, "Readability Scores", "Score") | |
| return details, readability_scores, stats_chart, readability_chart | |
| # Explanation text to be displayed above the input box | |
| explanation_text = """ | |
| ### Readability Score Descriptions: | |
| - **Flesch Reading Ease**: A higher score means the text is easier to read. | |
| - **Flesch-Kincaid Grade Level**: Indicates the US school grade required to understand the text. | |
| - **Gunning Fog Index**: Estimates the number of years of formal education needed. | |
| - **Automated Readability Index (ARI)**: Similar to Flesch-Kincaid but uses a different formula. | |
| - **SMOG Index**: Designed for healthcare and scientific texts. | |
| - **Coleman-Liau Index**: Uses character count instead of syllables. | |
| - **Dale-Chall Readability Score**: Considers familiar words to determine readability. | |
| """ | |
| # Sample text | |
| sample_text = """This is an example text. It is used to demonstrate how readability scores work. | |
| The quick brown fox jumps over the lazy dog. Readability metrics help in understanding | |
| how easy or difficult a text is to read.""" | |
| # Create Gradio Blocks Interface | |
| with gr.Blocks(title="Text Readability Analyzer") as app: | |
| gr.Markdown("## Text Readability Analyzer") | |
| with gr.Row(): | |
| with gr.Column(scale=1): # Left Panel (Input & Explanation) | |
| gr.Markdown(explanation_text) | |
| text_input = gr.Textbox(lines=5, placeholder="Enter your text here...") | |
| gr.Markdown("### Example Text") | |
| example_btn = gr.Button("Use Example Text") | |
| with gr.Column(scale=1): # Right Panel (Output Results) | |
| text_details_output = gr.JSON(label="Text Details") | |
| readability_scores_output = gr.JSON(label="Readability Scores") | |
| stats_chart_output = gr.Image(label="Text Statistics Chart") | |
| readability_chart_output = gr.Image(label="Readability Scores Chart") | |
| # Function to handle button click | |
| def load_example(): | |
| return sample_text | |
| example_btn.click(load_example, outputs=text_input) | |
| # Link input to function outputs | |
| text_input.change( | |
| analyze_text, | |
| inputs=text_input, | |
| outputs=[text_details_output, readability_scores_output, stats_chart_output, readability_chart_output] | |
| ) | |
| # Launch the app | |
| app.launch() | |