hangokvillage commited on
Commit
d7edd82
·
verified ·
1 Parent(s): 726b535

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.txt +122 -0
  2. requirements.txt +7 -0
app.txt ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import gradio as gr
4
+ from deep_translator import GoogleTranslator
5
+ from sentence_transformers import SentenceTransformer, util
6
+
7
+ embed_model = SentenceTransformer("sentence-transformers/paraphrase-MiniLM-L6-v2")
8
+
9
+ def clean(s):
10
+ if not s:
11
+ return ""
12
+ return re.sub(r"\s+", " ", s).strip()
13
+
14
+ def ko2en(text):
15
+ return GoogleTranslator(source="ko", target="en").translate(text)
16
+
17
+ def en2ko(text):
18
+ return GoogleTranslator(source="en", target="ko").translate(text)
19
+
20
+ def sim_ko(a, b):
21
+ if not a or not b:
22
+ return 0.0
23
+ v = embed_model.encode([a, b], convert_to_tensor=True)
24
+ return float(util.cos_sim(v[0], v[1]).item()) * 100.0
25
+
26
+ def tone_en(text, tone):
27
+ t = clean(text)
28
+ if tone == "����":
29
+ t = re.sub(r"\b(very|really|so|truly)\b\s*", "", t, flags=re.I)
30
+ t = re.sub(r"\b(Thank you so much|Thanks a lot)\b", "Thank you", t, flags=re.I)
31
+ elif tone == "����":
32
+ if re.search(r"\b(Thank you|Thanks)\b", t, re.I) and not re.search(r"\bappreciat(e|ion)\b", t, re.I):
33
+ t += " I sincerely appreciate your support."
34
+ if not re.search(r"\bplease\b", t, re.I) and t:
35
+ t = "Please " + t[0].lower() + t[1:]
36
+ elif tone == "����Ͻ���":
37
+ if not t.endswith("."):
38
+ t += "."
39
+ if not re.search(r"\b(Please let me know|I look forward to)\b", t, re.I):
40
+ t += " Please let me know if you need any further information."
41
+ return t
42
+
43
+ def tone_ko(text, tone):
44
+ t = clean(text)
45
+ if tone == "����":
46
+ t = re.sub(r"(����|��������|�ʹ�|�ſ�)\s*", "", t)
47
+ t = re.sub(r"(��Ź�帳�ϴ�|����帳�ϴ�)", "�����մϴ�", t)
48
+ elif tone == "����":
49
+ if "����" in t and "����" not in t:
50
+ t = t.replace("�����մϴ�", "�������� �����մϴ�")
51
+ if not re.search(r"(��Ź�帳�ϴ�|�����ֽø� �����ϰڽ��ϴ�)", t):
52
+ t += " �����ֽø� �����ϰڽ��ϴ�."
53
+ elif tone == "����Ͻ���":
54
+ t = re.sub(r"(��������|������|�����ؿ�)", "�����մϴ�", t)
55
+ if not (t.endswith("���ϴ�.") or t.endswith("�帳�ϴ�.") or t.endswith("��.")):
56
+ t += " �����մϴ�."
57
+ return t
58
+
59
+ def td_translate(ko_text, tone, target=98.2):
60
+ ko_text = clean(ko_text)
61
+ if not ko_text:
62
+ return "������ �Է��ϼ���.", "", "", "", "", 0.0, ""
63
+ try:
64
+ en = ko2en(ko_text)
65
+ back = en2ko(en)
66
+ except Exception as e:
67
+ return f"[���� ����] {e}", "", "", "", "", 0.0, ""
68
+
69
+ sim = sim_ko(ko_text, back)
70
+ en_tuned = tone_en(en, tone)
71
+ ko_tuned = tone_ko(back, tone)
72
+ ok = sim >= float(target)
73
+ flag = "���� ���� ✅" if ok else "���� �̴� ⚠️ (ǥ���� ��üȭ�� ������)"
74
+ final = f"{en_tuned}\n\n{flag} (���絵: {sim:.2f}%, ����: {float(target):.1f}%)"
75
+ guide = f"��: {tone} | KO��EN��KO ����� ��� �ǹ� ������ ����"
76
+ return "", en, back, en_tuned, ko_tuned, sim, final + "\n" + guide
77
+
78
+ with gr.Blocks(title="Tha Deeply Translator — �溰 ������") as app:
79
+ gr.Markdown(
80
+ "## Tha Deeply — �� ����ġ / ����� / ���絵 �м���\n"
81
+ "- �⺻��: ����Ͻ���, ���絵 98.2%, ���� ���� ������\n"
82
+ "- ���� �ٲ㰡�� �������� ��� ������ ���� ������."
83
+ )
84
+
85
+ default_tone = "����Ͻ���"
86
+ default_threshold = 98.2
87
+ default_text = "���� �������ϴ�. ���� �������� ȸ�� ��Ź�帳�ϴ�."
88
+
89
+ with gr.Row():
90
+ tone = gr.Radio(["����", "����", "����Ͻ���"], value=default_tone, label="�� ����")
91
+ thres = gr.Slider(0, 100, value=default_threshold, step=0.1, label="���絵 ����(%)")
92
+ ko_in = gr.Textbox(lines=4, label="����(�ѱ���)", value=default_text, placeholder="�ѱ��� ������ �Է��ϼ���")
93
+ run = gr.Button("����")
94
+
95
+ en_out = gr.Textbox(lines=4, label="�� ���� ����(EN)")
96
+ ko_back = gr.Textbox(lines=4, label="�� �����(KO)")
97
+ en_tone = gr.Textbox(lines=4, label="�� �� ���� ����(EN)")
98
+ ko_tone = gr.Textbox(lines=4, label="�� �� ���� �ѱ�(KO)")
99
+ sim = gr.Number(label="�ǹ� ���絵(%)", precision=2)
100
+ final = gr.Textbox(lines=6, label="�� ������ ���� ���� + ����")
101
+
102
+ examples = gr.Examples(
103
+ examples=[
104
+ ["���� �ּż� �����մϴ�. ���� �� �����ϱ��� ȸ�� ��Ź�帳�ϴ�.", "����Ͻ���", 98.2],
105
+ ["�˼��մϴ�. ���� ������ �ʿ��մϴ�. ������ �ð��� �˷��ּ���.", "����", 97.0],
106
+ ["���� �����ؿ�! �̹� ������Ʈ �Բ��� �� �־� ��޴ϴ�.", "����", 98.5],
107
+ ],
108
+ inputs=[ko_in, tone, thres],
109
+ label="���� �ҷ�����"
110
+ )
111
+
112
+ def _run(ko_text, t, thr):
113
+ msg, en, back, en_tuned, ko_tuned, simv, fin = td_translate(ko_text, t, thr)
114
+ if msg:
115
+ return "", "", "", "", 0.0, msg
116
+ return en, back, en_tuned, ko_tuned, simv, fin
117
+
118
+ run.click(_run, [ko_in, tone, thres], [en_out, ko_back, en_tone, ko_tone, sim, final])
119
+
120
+ if __name__ == "__main__":
121
+ port = int(os.getenv("PORT", "7860"))
122
+ app.launch(server_name="0.0.0.0", server_port=port)
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+
2
+
3
+ gradio==4.19.1
4
+ deep-translator==1.11.4
5
+ sentence-transformers==2.7.0
6
+ transformers==4.44.2
7
+ torch==2.3.1