Spaces:
Sleeping
Sleeping
| """Czech punctuation restoration.""" | |
| import os | |
| import sys | |
| import time | |
| import streamlit as st | |
| st.set_page_config(page_title="Czech Punctuation", page_icon="😻") | |
| REPO = "AILabTUL/electra-punct-cs-adaptive" | |
| TOKEN = os.environ.get("HF_TOKEN_AILAB") or os.environ.get("HF_TOKEN") | |
| def sentence_case(text): | |
| """Capitalise the first word and every word that follows '.' or '?'.""" | |
| words, upper = [], True | |
| for word in text.split(): | |
| words.append(word[0].upper() + word[1:] if upper and word else word) | |
| upper = word.endswith(".") or word.endswith("?") | |
| return " ".join(words) | |
| def load_model(): | |
| from huggingface_hub import snapshot_download | |
| # The model code lives in the private repo, not here. | |
| root = snapshot_download(REPO, token=TOKEN) | |
| if root not in sys.path: | |
| sys.path.insert(0, root) | |
| from modeling import PunctuationRestorer | |
| return PunctuationRestorer.from_pretrained(root, token=TOKEN) | |
| st.title("Czech Punctuation Restoration") | |
| st.caption("Restores '.', ',' and '?' in Czech text and capitalises sentence " | |
| "starts. Write the input the way an ASR emits it - with diacritics, " | |
| "without punctuation.") | |
| default = ("ministerstvo dopravy dnes představilo nový plán oprav dálnic " | |
| "který má podle úřadu zkrátit délku kolon práce začnou na jaře " | |
| "příštího roku a potrvají zhruba osmnáct měsíců řidiči se ale " | |
| "obávají že se situace nejprve zhorší kolik bude celá akce stát " | |
| "zatím není jasné mluvčí uvedl že přesné náklady se dozvíme až " | |
| "po vyhodnocení nabídek opozice plán kritizuje a tvrdí že peníze " | |
| "měly jít jinam") | |
| text = st.text_area("Text", default, height=160) | |
| if st.button("Restore punctuation", type="primary"): | |
| if not text.strip(): | |
| st.warning("Enter some text first.") | |
| else: | |
| try: | |
| model = load_model() | |
| start = time.perf_counter() | |
| out, stats = model(text, return_stats=True) | |
| elapsed = time.perf_counter() - start | |
| st.success(sentence_case(out)) | |
| st.metric("Tokens per second", "%.0f" % (stats["tokens"] / elapsed)) | |
| except Exception as error: # noqa: BLE001 | |
| st.error("Could not run the model: %s" % error) | |