Spaces:
Runtime error
Runtime error
import gradio as gr | |
from transformers import pipeline | |
import tokenizer | |
from difflib import Differ, SequenceMatcher | |
title = "Textaleiðrétting fyrir íslensku" | |
description = "Hér má leiðrétta íslenskan texta með hjálp tauganets. Netið reynir að „þýða“ yfir í texta sem er í samræmi við málstaðal, og er þjálfað á bæði tilbúnum gögnum og textum úr villumálheildum sem safnað var hjá Háskóla Íslands. \n\nBest er að setja ekki inn meira en nokkrar setningar í einu, því annars getur biðin orðið löng. Þetta er prufuútgáfa sem hefur ekki lært að leiðrétta öll þau atriði sem upp geta komið í texta og er í stöðugri þróun. \nÞetta verkefni er unnið hjá Miðeind sem hluti af máltækniáætlun stjórnvalda." | |
translator = pipeline("translation", model="mideind/yfirlestur-icelandic-correction-byt5", max_length=512) | |
def mark_text(text, tag): | |
"""Helper for the diff method, returns a tuple with the text and the tag""" | |
return (text, tag) | |
def mark_span(text, tag): | |
"""Helper for the diff method, returns the span as a list of (text, tag) tuples""" | |
return [mark_text(token, tag) for token in text] | |
def markup_diff(a, b, | |
mark=mark_span, | |
isjunk=None): | |
"""Obtains the diff for the sentence along with the opcodes (tags). Returns the corrected sentence tokens along with their correction tag (in Icelandic) | |
""" | |
seqmatcher = SequenceMatcher(isjunk=isjunk, a=a, b=b, autojunk=False) | |
out_sentence_tokens = [] | |
# renaming tags | |
tags = {"equal": None, "delete": "eytt út", "replace": "skipt út", "insert": "bætt inn"} | |
for tag, a0, a1, b0, b1 in seqmatcher.get_opcodes(): | |
if tag == "delete": | |
out_sentence_tokens += mark(" ", tags[tag]) | |
out_sentence_tokens += mark(b[b0:b1], tags[tag]) | |
return out_sentence_tokens | |
def split_text(text): | |
sentence_list = [i for i in tokenizer.split_into_sentences(text, original=True)] | |
return sentence_list | |
def predict(text): | |
texts = text.split("\n") | |
translated = "" | |
original = "" | |
# TODO: check for way too long inputs | |
# TODO: if a sentence after splitting is over 512 bytes = split? error? | |
for text in texts: | |
# one or more sentences in each paragraph | |
for sentence in split_text(text): | |
original += sentence.strip() + " " | |
translated += translator(sentence.strip())[0]["translation_text"] + " " | |
original += "\n" | |
translated += "\n" | |
return markup_diff(original.split(" "), translated.split(" ")) | |
demo = gr.Interface( | |
fn=predict, | |
inputs='text', | |
outputs= gr.HighlightedText( | |
show_label=False, | |
show_legend=True, | |
combine_adjacent=True, | |
adjacent_separator=" ", | |
).style( | |
color_map={"skipt út": "blue", "bætt inn": "green", "eytt út": "purple"}), | |
title=title, | |
description=description, | |
examples=[["Kvitu fiðrildinn fljua firir utan gluggan."], ["Ég held þetta er ekki góður tími fara heimsókn."], ["Mer hlakar til jólana"], ["Kver a þenan bússtað ja eða nei"]], | |
) | |
demo.launch() | |