|
|
|
import gradio as gr |
|
from dotenv import load_dotenv |
|
|
|
from translate import run_translate |
|
from diacritize import diacritize, diacritize_if_not_already |
|
from translit import taatik |
|
from semsearch import update_df |
|
from tts import get_audio |
|
from consts import CSS, ABOUT, JS_FUNC |
|
load_dotenv() |
|
|
|
with gr.Blocks(title = "Levanti - כלי תרגום לערבית מדוברת", |
|
css=CSS, |
|
theme="default") as demo: |
|
|
|
gr.HTML("<h2><span dir='rtl'><span style='color: #2563eb'>Levanti</span>ne Translator</span></h2>כלי תרגום לערבית מדוברת") |
|
with gr.Tab('תרגום', elem_id="tab1"): |
|
with gr.Row(): |
|
with gr.Column(): |
|
input_text = gr.Textbox(label="קלט", |
|
info = "עברית או ערבית מדוברת", |
|
placeholder="הזינו טקסט בערבית או עברית", |
|
lines=2, |
|
elem_id="input", |
|
rtl=True) |
|
|
|
gr.Examples(["רציתי ללכת אתמול לחנות, אבל ירד גשם", "خلينا ندور على مطعم تاني"], |
|
input_text, |
|
label="דוגמאות") |
|
|
|
btn = gr.Button("תרגום") |
|
with gr.Row(): |
|
dialect = gr.Radio(["פלסטיני", "סורי", "לבנוני", "מצרי"], |
|
label = "להג", |
|
info="משפיע על תרגום לערבית", |
|
value="פלסטיני") |
|
|
|
|
|
gr.Markdown("נוצר על ידי [גיא מור-לן](mailto:[email protected]) כחלק מפרויקט [Levanti](https://huggingface.co/datasets/guymorlan/levanti). השמע מופק באמצעות Azure TTS על בסיס הניקוד המנובא ויוריסטיקות. לתרומות למען כיסוי הוצאות והמשך פיתוח הפרויקט [לחצו כאן](https://ko-fi.com/levanti).", elem_id="footer", rtl=True) |
|
|
|
with gr.Column(): |
|
with gr.Group(elem_id="grp"): |
|
gr.HTML("<div dir='rtl'>תרגום</div>") |
|
|
|
translation_output = gr.HTML("<br>", visible=True, label="תרגום", elem_id="main") |
|
|
|
hidden_arabic = gr.Textbox(lines=1, elem_id="trans", visible=False) |
|
|
|
diacritized_output = gr.Textbox(label="ניקוד (ניסיוני)", lines=1, elem_id="diacritized", |
|
rtl=True, interactive=False) |
|
taatik_output = gr.Textbox(label="תעתיק (ניסיוני)", lines=1, elem_id="taatik", |
|
text_align="right", rtl=True, interactive=False) |
|
|
|
|
|
|
|
audio = gr.Audio(label="שמע (Azure)", interactive=False, |
|
autoplay=True) |
|
audio_button = gr.Button("צור שמע") |
|
audio_button.click(get_audio, inputs=[diacritized_output], outputs=[audio]) |
|
|
|
|
|
btn.click(run_translate, inputs=[input_text, dialect], |
|
outputs=[translation_output, hidden_arabic], api_name="en2ar", |
|
js="function jump(x, y){document.getElementById('main').scrollIntoView(); return [x, y];}") |
|
|
|
input_text.submit(run_translate, inputs=[input_text, dialect], |
|
outputs=[translation_output, hidden_arabic], scroll_to_output=True) |
|
hidden_arabic.change(diacritize, inputs=[hidden_arabic], outputs=[diacritized_output]) |
|
diacritized_output.change(taatik, inputs=[diacritized_output], outputs=[taatik_output]) |
|
|
|
|
|
with gr.Row(): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nearest_df = gr.DataFrame(headers=["ערבית", "עברית", "מאומת"], visible=False, wrap=True, |
|
elem_id="nearest", label="תוצאות קרובות מתוך קורפוס Levanti", height=300) |
|
|
|
hidden_arabic.change(update_df, inputs=[hidden_arabic], outputs=[nearest_df]) |
|
|
|
with gr.Tab("ניקוד ותעתוק", elem_id="tab2"): |
|
with gr.Row(): |
|
with gr.Column(): |
|
diac_text = gr.Textbox(label="קלט", placeholder="הזינו טקסט בערבית", lines=1, |
|
info = "בשביל תעתוק בלבד, הזינו טקסט ערבי מנוקד", |
|
elem_id="diac_input", rtl=True) |
|
gr.Examples(["خلينا ندور على مطعم تاني", "قَدِيْش حَقّ الْبَنْدُورَة؟"], diac_text, |
|
label="דוגמאות", elem_id="diac_ex") |
|
btn2 = gr.Button("שליחה") |
|
|
|
with gr.Column(): |
|
diacritized_output2 = gr.Textbox(label="ניקוד", lines=1, |
|
elem_id="diacritized2", rtl=True) |
|
taatik_output2 = gr.Textbox(label="תעתיק", lines=1, |
|
elem_id="taatik2", rtl=True) |
|
|
|
|
|
|
|
|
|
|
|
btn2.click(diacritize_if_not_already, inputs=[diac_text], outputs=[diacritized_output2]) |
|
diac_text.submit(diacritize_if_not_already, inputs=[diac_text], outputs=[diacritized_output2]) |
|
diacritized_output2.change(taatik, inputs=[diacritized_output2], outputs=[taatik_output2]) |
|
with gr.Tab("אודות", elem_id="tab3"): |
|
with gr.Row(): |
|
gr.HTML("<h2>אודות</h2>") |
|
gr.Markdown(ABOUT, elem_id="about", rtl=True) |
|
|
|
|
|
|
|
demo.launch(ssl_verify=False) |