Koster
commited on
Upload folder using huggingface_hub
Browse files- ScriptureReference.py +29 -6
- __pycache__/ScriptureReference.cpython-312.pyc +0 -0
- main_gradio_js.py +33 -5
ScriptureReference.py
CHANGED
|
@@ -304,6 +304,10 @@ class ScriptureReference:
|
|
| 304 |
self.reference = reference
|
| 305 |
self._structured_ref = self.parse_scripture_reference(reference)
|
| 306 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 307 |
@classmethod
|
| 308 |
def parse_scripture_reference(cls, input_ref):
|
| 309 |
normalized_input = re.sub(r"\s+", "", input_ref).upper()
|
|
@@ -322,13 +326,32 @@ class ScriptureReference:
|
|
| 322 |
bookCode = code
|
| 323 |
break
|
| 324 |
|
| 325 |
-
startChap = int(startChapter) if startChapter else 0
|
| 326 |
-
endChap = int(endChapterOrVerse) if endChapterOrVerse and endVerse else startChap
|
| 327 |
-
startVer = int(startVerse) if startVerse else 0
|
| 328 |
-
endVer = int(endVerse) if endVerse else int(endChapterOrVerse) if endChapterOrVerse and not endVerse else startVer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 329 |
|
| 330 |
-
|
| 331 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 332 |
|
| 333 |
return {
|
| 334 |
'bookCode': bookCode,
|
|
|
|
| 304 |
self.reference = reference
|
| 305 |
self._structured_ref = self.parse_scripture_reference(reference)
|
| 306 |
|
| 307 |
+
@property
|
| 308 |
+
def is_valid(self):
|
| 309 |
+
return bool(self._structured_ref['bookCode'] and self._structured_ref['startChapter'] and self._structured_ref['startVerse'])
|
| 310 |
+
|
| 311 |
@classmethod
|
| 312 |
def parse_scripture_reference(cls, input_ref):
|
| 313 |
normalized_input = re.sub(r"\s+", "", input_ref).upper()
|
|
|
|
| 326 |
bookCode = code
|
| 327 |
break
|
| 328 |
|
| 329 |
+
# startChap = int(startChapter) if startChapter else 0
|
| 330 |
+
# endChap = int(endChapterOrVerse) if endChapterOrVerse and endVerse else startChap
|
| 331 |
+
# startVer = int(startVerse) if startVerse else 0
|
| 332 |
+
# endVer = int(endVerse) if endVerse else int(endChapterOrVerse) if endChapterOrVerse and not endVerse else startVer
|
| 333 |
+
|
| 334 |
+
# if startVer != 0 and endVer == 0:
|
| 335 |
+
# endVer = startVer
|
| 336 |
+
|
| 337 |
+
if bookCode:
|
| 338 |
+
num_chapters = len(cls.book_codes[bookCode]['verses'])
|
| 339 |
+
startChap = min(int(startChapter), num_chapters) if startChapter else 0
|
| 340 |
+
endChap = min(int(endChapterOrVerse), num_chapters) if endChapterOrVerse and endVerse else startChap
|
| 341 |
+
|
| 342 |
+
if startChap > 0:
|
| 343 |
+
num_verses_in_start_chap = cls.book_codes[bookCode]['verses'][startChap - 1]
|
| 344 |
+
startVer = min(int(startVerse), num_verses_in_start_chap) if startVerse else 0
|
| 345 |
+
else:
|
| 346 |
+
startVer = 0
|
| 347 |
|
| 348 |
+
if endChap > 0:
|
| 349 |
+
num_verses_in_end_chap = cls.book_codes[bookCode]['verses'][endChap - 1]
|
| 350 |
+
endVer = min(int(endVerse), num_verses_in_end_chap) if endVerse else startVer
|
| 351 |
+
else:
|
| 352 |
+
endVer = startVer
|
| 353 |
+
else:
|
| 354 |
+
startChap = endChap = startVer = endVer = 0
|
| 355 |
|
| 356 |
return {
|
| 357 |
'bookCode': bookCode,
|
__pycache__/ScriptureReference.cpython-312.pyc
CHANGED
|
Binary files a/__pycache__/ScriptureReference.cpython-312.pyc and b/__pycache__/ScriptureReference.cpython-312.pyc differ
|
|
|
main_gradio_js.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
# from TranslationNoteFinder import TranslationNoteFinder
|
| 3 |
from TranslationNoteFinderLLMOnly import TranslationNoteFinder
|
|
|
|
| 4 |
|
| 5 |
# Updated dictionary mapping language codes to URLs of Bible text files
|
| 6 |
bible_urls = {
|
|
@@ -20,6 +21,13 @@ def load_resources(api_key, lang_code):
|
|
| 20 |
tnf = TranslationNoteFinder(bible_text_url, api_key, lang_code=lang_code)
|
| 21 |
return "Language resources loaded successfully.", "", "", ""
|
| 22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
with gr.Blocks(css="highlightNote.css") as app:
|
| 25 |
|
|
@@ -67,17 +75,30 @@ with gr.Blocks(css="highlightNote.css") as app:
|
|
| 67 |
# Since HTML component is used, all outputs must be strings
|
| 68 |
return verse_ref_formatted, target_text, line_number, ngrams_formatted
|
| 69 |
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
api_key_input = gr.Textbox(label="API Key", type='password')
|
| 72 |
with gr.Row():
|
| 73 |
lang_dropdown = gr.Dropdown(choices=list(bible_urls.keys()), label="Language Code")
|
| 74 |
load_btn = gr.Button("Load Language")
|
| 75 |
-
verse_input = gr.Textbox(label="Verse Reference")
|
| 76 |
-
translate_btn = gr.Button("Translate")
|
| 77 |
-
|
| 78 |
verse_ref_output = gr.Textbox(label="Verse Reference")
|
|
|
|
| 79 |
target_text_output = gr.HTML(label="Target Verse Text", elem_classes=["verse-text"])
|
| 80 |
-
|
| 81 |
notes_output = gr.HTML(label="N-grams") # needs elem_classes?
|
| 82 |
|
| 83 |
load_btn.click(
|
|
@@ -92,6 +113,13 @@ with gr.Blocks(css="highlightNote.css") as app:
|
|
| 92 |
notes_output
|
| 93 |
]
|
| 94 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
translate_btn.click(
|
| 96 |
fn=find_notes,
|
| 97 |
inputs=verse_input,
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
# from TranslationNoteFinder import TranslationNoteFinder
|
| 3 |
from TranslationNoteFinderLLMOnly import TranslationNoteFinder
|
| 4 |
+
from ScriptureReference import ScriptureReference as SR
|
| 5 |
|
| 6 |
# Updated dictionary mapping language codes to URLs of Bible text files
|
| 7 |
bible_urls = {
|
|
|
|
| 21 |
tnf = TranslationNoteFinder(bible_text_url, api_key, lang_code=lang_code)
|
| 22 |
return "Language resources loaded successfully.", "", "", ""
|
| 23 |
|
| 24 |
+
def validate_verse_ref(verse_ref):
|
| 25 |
+
verse_ref = SR(verse_ref)
|
| 26 |
+
is_valid = verse_ref.is_valid
|
| 27 |
+
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 |
|
| 32 |
with gr.Blocks(css="highlightNote.css") as app:
|
| 33 |
|
|
|
|
| 75 |
# Since HTML component is used, all outputs must be strings
|
| 76 |
return verse_ref_formatted, target_text, line_number, ngrams_formatted
|
| 77 |
|
| 78 |
+
gr.Markdown(
|
| 79 |
+
"""
|
| 80 |
+
# Translation Note Finder
|
| 81 |
+
## Purpose
|
| 82 |
+
To align the Greek terms in Unfolding Word's translation notes with the corresponding terms in any target language verse.
|
| 83 |
+
## Value
|
| 84 |
+
This tool demonstrates the capability to localize translation resources faster or even on the fly.
|
| 85 |
+
## How to Use
|
| 86 |
+
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(
|
|
|
|
| 113 |
notes_output
|
| 114 |
]
|
| 115 |
)
|
| 116 |
+
|
| 117 |
+
verse_input.change(
|
| 118 |
+
fn=validate_verse_ref,
|
| 119 |
+
inputs=verse_input,
|
| 120 |
+
outputs=translate_btn
|
| 121 |
+
)
|
| 122 |
+
|
| 123 |
translate_btn.click(
|
| 124 |
fn=find_notes,
|
| 125 |
inputs=verse_input,
|