Team Ai
Apppublic

CalebKoster/Translation_Note_Alignment

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
main_gradio.py73 linesDownload Raw Back to root
1import gradio as gr2from gradio import HighlightedText3from TranslationNoteFinder import TranslationNoteFinder4 5# Updated dictionary mapping language codes to URLs of Bible text files6bible_urls = {7    'en': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/eng-kjvcpb.txt',8    'hi': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/hin-hin2017.txt',9    'es': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/spa-spabes.txt',10    'ru': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/rus-russyn.txt'11}12 13tnf = None14 15def load_resources(api_key, lang_code):16    global tnf17    bible_text_url = bible_urls.get(lang_code)18    # 'translation_notes.json'19    # 'translation_notes/tn_ROM.tsv'20    tnf = TranslationNoteFinder('translation_notes/tn_ROM.tsv', bible_text_url, api_key, lang_code=lang_code)21    return "Language resources loaded successfully.", "", "", ""22 23def find_notes(verse_ref):24    global tnf25    if tnf is None:26        return "Please load language resources first.", "", "", ""27    28    results = tnf.verse_notes(verse_ref)29    verse_ref_formatted = f"{results['verse_ref']['bookCode']} {results['verse_ref']['startChapter']}:{results['verse_ref']['startVerse']}"30    31    target_text = results['target_verse_text']32    colors = ["yellow", "lightgreen", "lightblue", "pink", "lightgrey", "orange", "purple", "cyan", "magenta", "lime", "teal", 33              "maroon", "navy", "olive", "silver", "gold", "coral", "turquoise", "indigo", "violet"]34    ngrams_highlights = {}35    for i, ngram in enumerate(reversed(results['ngrams'])):  # Reverse to not mess up the indices36        start, end = ngram['start_pos'], ngram['end_pos']37        highlight = f"<mark style='background-color:{colors[i]};'>{target_text[start:end]}</mark>"38        target_text = target_text[:start] + highlight + target_text[end:]39        # Map Greek terms to their corresponding highlight color40        ngrams_highlights[ngram['greek_term']] = colors[i]41    42    line_number = str(results['line_number'])43    # Apply highlights to Greek terms in translation notes44    ngrams_formatted = ""45    for ngram in results['ngrams']:46        greek_term_highlight = f"<span style='background-color:{ngrams_highlights[ngram['greek_term']]}'>{ngram['greek_term']}</span>"47        ngrams_formatted += f"{greek_term_highlight}: {ngram['trans_note']}<br>"48 49    # Since HTML component is used, all outputs must be strings50    return verse_ref_formatted, target_text, line_number, ngrams_formatted51 52 53# Adjusting Gradio interface for HTML output54with gr.Blocks() as app:55    api_key_input = gr.Textbox(label="API Key", type='password')56    with gr.Row():57        lang_dropdown = gr.Dropdown(choices=list(bible_urls.keys()), label="Language Code")58        load_btn = gr.Button("Load Language")59    verse_input = gr.Textbox(label="Verse Reference")60    translate_btn = gr.Button("Translate")61    62    verse_ref_output = gr.Textbox(label="Verse Reference")63    target_text_output = gr.HTML(label="Target Verse Text")  # Changed to HTML component64    # target_text_output = gr.HighlightedText(label="Target Verse Text")65    line_number_output = gr.Textbox(label="Line Number")66    ngrams_output = gr.HTML(label="N-grams")  # Changed to HTML for formatted output67 68    load_btn.click(fn=load_resources, inputs=[api_key_input, lang_dropdown], outputs=[verse_ref_output, target_text_output, line_number_output, ngrams_output])69    translate_btn.click(fn=find_notes, inputs=verse_input, outputs=[verse_ref_output, target_text_output, line_number_output, ngrams_output])70 71 72app.launch()73 
CalebKoster/Translation_Note_Alignment · Team Ai