punctuation-uk / app.py
Yehor's picture
A fix
321218f verified
raw
history blame
5.36 kB
import sys
import time
import gradio as gr
from nemo import __version__ as nemo_version
from nemo.collections.nlp.models import PunctuationCapitalizationModel
# Config
model_name = "dchaplinsky/punctuation_uk_bert"
concurrency_limit = 5
# Load the model
model = PunctuationCapitalizationModel.from_pretrained(model_name)
examples = [
"тема про яку не люблять говорити офіційні джерела у генштабі і міноборони це хімічна зброя окупанти вже тривалий час використовують хімічну зброю заборонену",
"всіма конвенціями якщо спочатку це були гранати з дронів то тепер фіксують випадки застосування",
"хімічних снарядів причому склад отруйної речовони різний а отже й наслідки для наших військових теж різні",
"використовує на фронті все що має і хімічна зброя не вийняток тож з чим маємо справу розбиралася марія моганисян",
"двох тисяч випадків застосування росіянами боєприпасів споряджених небезпечними хімічними речовинами",
"на всі писані норми марія моганисян олександр моторний спецкор марафон єдині новини",
]
title = "Restore Punctuation and Capitalization for Ukrainian"
# https://www.tablesgenerator.com/markdown_tables
authors_table = """
## Authors
Follow them on social networks and **contact** if you need any help or have any questions:
| <img src="https://avatars.githubusercontent.com/u/7875085?v=4" width="100"> **Yehor Smoliakov** |
|-------------------------------------------------------------------------------------------------|
| https://t.me/smlkw in Telegram |
| https://x.com/yehor_smoliakov at X |
| https://github.com/egorsmkv at GitHub |
| https://huggingface.co/Yehor at Hugging Face |
| or use [email protected] |
""".strip()
description_head = f"""
# {title}
## Overview
This space uses https://huggingface.co/dchaplinsky/punctuation_uk_bert model.
Paste the text you want to enhance.
""".strip()
description_foot = f"""
{authors_table}
""".strip()
enhanced_text_value = """
Enhanced text will appear here.
Choose **an example** below the Enhance button or paste **your text**.
""".strip()
tech_env = f"""
#### Environment
- Python: {sys.version}
""".strip()
tech_libraries = f"""
#### Libraries
- nemo: {nemo_version}
- gradio: {gr.__version__}
""".strip()
def inference(text, progress=gr.Progress()):
if not text:
raise gr.Error("Please paste your text.")
gr.Info("Starting enhancing", duration=2)
progress(0, desc="Enhancing...")
results = []
sentences = [
text,
]
for sentence in progress.tqdm(sentences, desc="Enhancing...", unit="sentence"):
sentence = sentence.strip()
if len(sentence) == 0:
continue
t0 = time.time()
predictions = model.add_punctuation_capitalization([sentence])
if not predictions:
predictions = "-"
elapsed_time = round(time.time() - t0, 2)
enhanced_text = "\n".join(predictions)
if sentence != enhanced_text:
enhanced_text = enhanced_text.strip()
results.append(
{
"sentence": sentence,
"enhanced_text": enhanced_text,
"elapsed_time": elapsed_time,
}
)
gr.Info("Finished!", duration=2)
result_texts = []
for result in results:
result_texts.append(f'> {result["enhanced_text"]}')
result_texts.append("\n")
sum_elapsed_text = sum([result["elapsed_time"] for result in results])
result_texts.append(f"Elapsed time: {sum_elapsed_text} seconds")
return "\n".join(result_texts)
demo = gr.Blocks(
title=title,
analytics_enabled=False,
theme=gr.themes.Base(),
)
with demo:
gr.Markdown(description_head)
gr.Markdown("## Usage")
with gr.Row():
text = gr.Textbox(label="Text", autofocus=True, max_lines=1)
enhanced_text = gr.Textbox(
label="Enhanced text",
placeholder=enhanced_text_value,
show_copy_button=True,
)
gr.Button("Enhance").click(
inference,
concurrency_limit=concurrency_limit,
inputs=text,
outputs=enhanced_text,
)
with gr.Row():
gr.Examples(label="Choose an example", inputs=text, examples=examples)
gr.Markdown(description_foot)
gr.Markdown("### Gradio app uses the following technologies:")
gr.Markdown(tech_env)
gr.Markdown(tech_libraries)
if __name__ == "__main__":
demo.queue()
demo.launch()