CalebKoster/Translation_Note_Alignment
0
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 