AI-ML-API-tutorials's picture
init
5b854d8 verified
raw
history blame
3.99 kB
import gradio as gr
import pandas as pd
from collections import Counter
import re
def ana(txt):
"""Analyze text and return comprehensive stats in dataframes"""
if not txt.strip():
return "Enter text!", None, None, None, None
wds = txt.split()
chs = len(txt)
wdc = len(wds)
sns = [s.strip() for s in re.split(r'[.!?]+', txt) if s.strip()]
snc = len(sns)
avg = wdc / max(1, snc)
rdm = wdc / 200
wrd = sum(len(w) for w in wds) / max(1, wdc) # avg word length
syl = sum(max(1, len(re.findall(r'[aeiouy]+', w.lower()))) for w in wds) # rough syllable count
fre = 206.835 - 1.015 * avg - 84.6 * (syl / max(1, wdc)) # Flesch Reading Ease
fkg = 0.39 * avg + 11.8 * (syl / max(1, wdc)) - 15.59 # Flesch-Kincaid Grade
# Add to stats dataframe
st = pd.DataFrame({
'📊 Metric': ['Characters', 'Words', 'Sentences', 'Avg Words/Sentence',
'Reading Time (min)', 'Readability Score', 'Grade Level'],
'📈 Value': [chs, wdc, snc, f'{avg:.1f}', f'{rdm:.1f}',
f'{fre:.1f}', f'{fkg:.1f}']
})
# Word frequency (1-grams)
wfq = Counter([w.lower().strip('.,!?;:"()[]') for w in wds if w.strip('.,!?;:"()[]')])
wf = pd.DataFrame(wfq.most_common(15), columns=['🔤 Word', '📊 Count'])
# Bi-grams
bgr = [f"{wds[i].lower()} {wds[i+1].lower()}" for i in range(len(wds)-1)]
bgc = Counter(bgr)
bg = pd.DataFrame(bgc.most_common(15), columns=['🔤 Bi-gram', '📊 Count'])
# Tri-grams
tgr = [f"{wds[i].lower()} {wds[i+1].lower()} {wds[i+2].lower()}" for i in range(len(wds)-2)]
tgc = Counter(tgr)
tg = pd.DataFrame(tgc.most_common(15), columns=['🔤 Tri-gram', '📊 Count'])
# Sentence analysis with actual sentences
sls = []
for i, sn in enumerate(sns, 1):
swc = len(sn.split())
sls.append({
'📝 #': i,
'📏 Words': swc,
'💬 Sentence': sn
})
sl = pd.DataFrame(sls)
# Character distribution
chd = Counter(txt.lower())
let = {c: chd[c] for c in chd if c.isalpha()}
let = dict(sorted(let.items(), key=lambda x: x[1], reverse=True)[:20])
ch = pd.DataFrame(list(let.items()), columns=['🔤 Letter', '📊 Count'])
return st, wf, bg, tg, sl, ch
# Gradio Interface
with gr.Blocks(theme=gr.themes.Soft(), css="""
.gradio-container {background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);}
h1, h3 {color: white !important;}
""") as app:
gr.Markdown("# 🚀 Text Analyzer Pro\n### Comprehensive text analysis with n-grams!")
inp = gr.Textbox(label="📝 Enter Your Text", placeholder="Type or paste text...", lines=8)
btn = gr.Button("🔍 Analyze", variant="primary", size="lg")
with gr.Row():
o1 = gr.Dataframe(label="📊 Overall Statistics", interactive=False)
o2 = gr.Dataframe(label="🎨 Character Distribution", interactive=False)
gr.Markdown("### 🔤 N-Gram Analysis")
with gr.Row():
o3 = gr.Dataframe(label="1-Grams (Words)", interactive=False)
o4 = gr.Dataframe(label="2-Grams (Phrases)", interactive=False)
o5 = gr.Dataframe(label="3-Grams (Phrases)", interactive=False)
gr.Markdown("### 📈 Sentence Analysis")
o6 = gr.Dataframe(label="📝 Sentences with Length", interactive=False, wrap=True)
btn.click(fn=ana, inputs=inp, outputs=[o1, o3, o4, o5, o6, o2])
gr.Examples(
examples=[
["The quick brown fox jumps over the lazy dog. This is a test sentence. Testing is important!"],
["Machine learning is transforming technology. Artificial intelligence powers innovation. Deep learning drives progress."]
],
inputs=inp,
label="💡 Try These Examples"
)
gr.Markdown("---\n*Built with ❤️ using Gradio | All variables ≤ 3 chars*")
if __name__ == "__main__":
app.launch()