iLabUtk's picture
Update app.py
90fde92 verified
raw
history blame
4.33 kB
# 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()