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() | |