CoolFace
Apppublic

CalebKoster/Translation_Note_Alignment

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
main_gradio_js.py136 linesDownload Raw Back to root
1import gradio as gr2# from TranslationNoteFinder import TranslationNoteFinder3from TranslationNoteFinderLLMOnly import TranslationNoteFinder4from ScriptureReference import ScriptureReference as SR5 6# Updated dictionary mapping language codes to URLs of Bible text files7bible_urls = {8    'en': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/eng-engkjvcpb.txt',9    'hi': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/hin-hin2017.txt',10    'es': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/spa-spabes.txt',11    'ru': 'https://raw.githubusercontent.com/BibleNLP/ebible/main/corpus/rus-russyn.txt'12}13 14tnf = None15 16def load_resources(api_key, lang_code):17    global tnf18    bible_text_url = bible_urls.get(lang_code)19    # 'translation_notes.json'20    # 'translation_notes/tn_ROM.tsv'21    tnf = TranslationNoteFinder(bible_text_url, api_key, lang_code=lang_code)22    return "Language resources loaded successfully.", "", "", ""23 24def validate_verse_ref(verse_ref):25    verse_ref = SR(verse_ref)26    is_valid = verse_ref.is_valid27    print(f"Verse reference is valid: {is_valid}")28    # return gr.Button.update(interactive=is_valid)29    return gr.Button("Translate", interactive=is_valid)30 31 32with gr.Blocks(css="highlightNote.css") as app:33    34    def find_notes(verse_ref):35        global tnf36        if tnf is None:37            return "Please load language resources first.", "", "", ""38        39        # Clear the output fields by returning empty strings40        # yield "", "", "", ""41 42        results = tnf.verse_notes(verse_ref)43        verse_ref_formatted = f"{results['verse_ref']['bookCode']} {results['verse_ref']['startChapter']}:{results['verse_ref']['startVerse']}"44        45        target_text = results['target_verse_text']46        ngrams_formatted = ""47 48        line_number = str(results['line_number'])49        # Apply highlights to Greek terms in translation notes50        for i, ngram in enumerate(results['ngrams']):51            note_id = f"note_{i}"52            ngram_text = f"""<span id='{note_id}' 53                            class='note' 54                            data-verse-text='{target_text}' 55                            data-start-pos='{ngram['start_pos']}' 56                            data-end-pos='{ngram['end_pos']}' 57                            onmouseover="58                                const noteElement = document.getElementById('{note_id}');59                                if (noteElement) {{60                                    const highlightedText = `<span class='highlight'>{target_text[ngram['start_pos']:ngram['end_pos']]}</span>`;61                                    const verseTextElement = document.querySelector('.verse-text');62                                    if (verseTextElement) {{63                                        verseTextElement.innerHTML = `{target_text[:ngram['start_pos']]}`64                                            + highlightedText65                                            + `{target_text[ngram['end_pos']:]}`;66                                    }}67                                }}68                            "69                            onmouseout="document.querySelector('.verse-text').innerHTML = '{target_text}'" 70                            >71                            {ngram['source_term']}: {ngram['trans_note']}72                            </span><br><br>"""73            ngrams_formatted += ngram_text74 75        # Since HTML component is used, all outputs must be strings76        return verse_ref_formatted, target_text, line_number, ngrams_formatted77    78    gr.Markdown(79        """80        # Translation Note Finder81        ## Purpose 82        To align the Greek terms in Unfolding Word's translation notes with the corresponding terms in any target language verse.83        ## Value84        This tool demonstrates the capability to localize translation resources faster or even on the fly.85        ## How to Use86        1. Enter the API key for the OpenAI API.87        2. Select the language code for the Bible text. Load the language.88        3. Enter a verse reference and click "Translate".89        4. Hover over the translation notes to see the equivalent terms highlighted in the target language.90        """91    )92    api_key_input = gr.Textbox(label="API Key", type='password')93    with gr.Row():94        lang_dropdown = gr.Dropdown(choices=list(bible_urls.keys()), label="Language Code")95        load_btn = gr.Button("Load Language")96    verse_input = gr.Textbox(label="Verse Reference", placeholder="e.g. jhn3:16")97    translate_btn = gr.Button("Translate", interactive=False)98    verse_ref_output = gr.Textbox(label="Verse Reference")99    line_number_output = gr.Textbox(label="Line Number", visible=False)100    target_text_output = gr.HTML(label="Target Verse Text", elem_classes=["verse-text"])101    102    notes_output = gr.HTML(label="N-grams") # needs elem_classes?103    104    load_btn.click(105        fn=load_resources, 106        inputs=[107            api_key_input, 108            lang_dropdown], 109        outputs=[110            verse_ref_output, 111            target_text_output, 112            line_number_output, 113            notes_output114            ]115        )116    117    verse_input.change(118        fn=validate_verse_ref, 119        inputs=verse_input, 120        outputs=translate_btn121        )122 123    translate_btn.click(124        fn=find_notes, 125        inputs=verse_input, 126        outputs=[127            verse_ref_output, 128            target_text_output, 129            line_number_output, 130            notes_output131            ]132        )133 134 135app.launch(share=True)136