import gradio as gr
# Modellarni import qilish
from uzmorph_nn.uzmorph_nn import uzmorph_nn
from uzmorph_bigru.uzmorph_bigru import uzmorph_bigru
from uzmorph_transformer.uzmorph_transformer import uzmorph_transformer
# Modellarni ishga tushirish
models = {
"uzmorph-nn (BiLSTM)": uzmorph_nn(),
"uzmorph-bigru (BiGRU)": uzmorph_bigru(),
"uzmorph-transformer (Transformer)": uzmorph_transformer(),
}
def analyze(word, selected_models):
if not word or not word.strip():
return "Iltimos, so'z kiriting."
if not selected_models:
return "Kamida bitta model tanlang."
word = word.strip().lower()
rows = []
for name in selected_models:
analyzer = models[name]
try:
result = analyzer.analyze(word)
rows.append(
f"### {name}\n"
f"| Xususiyat | Qiymat |\n"
f"|:---|:---|\n"
f"| **Stem (O'zak)** | `{result.stem}` |\n"
f"| **POS (So'z turkumi)** | `{result.pos}` |\n"
f"| **Features (Xususiyatlar)** | `{result.features}` |\n"
)
except Exception as e:
rows.append(f"### {name}\nXatolik: {e}\n")
header = f"## Natijalar: `{word}`\n---\n"
return header + "\n---\n".join(rows)
custom_theme = gr.themes.Soft(
primary_hue="blue",
secondary_hue="slate",
neutral_hue="slate",
font=gr.themes.GoogleFont("Inter"),
font_mono=gr.themes.GoogleFont("JetBrains Mono"),
)
with gr.Blocks(
title="UzMorph_NN — Uzbek Neural Morphological Analyzers",
theme=custom_theme,
css="""
.gradio-container { max-width: 960px; margin: auto; }
footer { display: none !important; }
"""
) as demo:
gr.Markdown(
"# UzMorph_NN — Uzbek Neural Morphological Analyzers \n"
"O'zbek tilidagi so'zlarni morfologik tahlil qilish uchun neyron tarmoq asosidagi modellar. \n"
"Web: morph.uz | "
"Rule-based Model Version: UzMorph \n"
)
with gr.Row():
with gr.Column(scale=1):
word_input = gr.Textbox(
label="So'zni kiriting",
placeholder="maktabimizda",
lines=1
)
model_selector = gr.CheckboxGroup(
choices=list(models.keys()),
value=["uzmorph-nn (BiLSTM)"],
label="Modellarni tanlang"
)
analyze_btn = gr.Button("Tahlil qilish", variant="primary")
gr.Markdown("### Misollar")
gr.Examples(
examples=[["ishladik"], ["kitoblarim"], ["borgan"], ["yozdi"]],
inputs=[word_input]
)
with gr.Column(scale=2):
output = gr.Markdown(label="Natijalar", value="Tahlil natijalari bu yerda ko'rinadi...")
analyze_btn.click(
fn=analyze,
inputs=[word_input, model_selector],
outputs=output
)
word_input.submit(
fn=analyze,
inputs=[word_input, model_selector],
outputs=output
)
gr.Markdown(
"---\n"
"### PyPI orqali o'rnatish\n"
"```bash\n"
"pip install uzmorph-nn # BiLSTM\n"
"pip install uzmorph-bigru # BiGRU\n"
"pip install uzmorph-transformer # Transformer\n"
"```\n"
"---\n"
"**Muallif**: Ulugbek Salaev \n"
'Website: morph.uz\n'
)
if __name__ == "__main__":
demo.launch(ssr_mode=False)