Aoi785 commited on
Commit
dae419d
ยท
verified ยท
1 Parent(s): ff525f5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -48
app.py CHANGED
@@ -1,55 +1,64 @@
1
-
2
  import gradio as gr
3
- from transformers import pipeline
4
- import re
5
-
6
- # ๋ฒˆ์—ญ๊ธฐ ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜ (์–ธ์–ด ์„ ํƒ ์‹œ ๋กœ๋”ฉ)
7
- def load_translator(lang_code):
8
- model_map = {
9
- "en": "Helsinki-NLP/opus-mt-ko-en",
10
- "zh": "Helsinki-NLP/opus-mt-ko-zh",
11
- "vi": "Helsinki-NLP/opus-mt-ko-vi"
12
- }
13
- if lang_code == "ko":
14
- return None
15
- return pipeline("translation", model=model_map[lang_code])
16
-
17
- # ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์š”์•ฝ
18
- def rule_based_summary(text):
19
- key_phrases = re.findall(r"(ํญ์—ผ|ํ˜ธ์šฐ|์ง€์ง„|๊ฐ์—ผ๋ณ‘|๋ถˆ|ํ™”์žฌ|๋Œ€ํ”ผ|์ฃผ์˜|ํ†ต์ œ|์ฐฉ์šฉ|์ž์ œ|์‹ ๊ณ |ํ”ผํ•ด).*?(๋ฐ”๋ž๋‹ˆ๋‹ค|ํ•˜์„ธ์š”|์ฃผ์˜)", text)
20
- flat = [" ".join(kp) for kp in key_phrases]
21
- if not flat:
22
- # ์ค‘์š” ๋ฌธ์žฅ์ด ์—†๋‹ค๋ฉด ๋ช…์‚ฌ ์œ„์ฃผ ์ถ”์ถœ
23
- fallback = re.findall(r"[๊ฐ€-ํžฃ]{2,}", text)
24
- return ". ".join(fallback[:3]) if fallback else "์ค‘์š” ๋ฌธ์žฅ ์—†์Œ"
25
- return ". ".join(flat[:3])
26
-
27
- # ์ „์ฒด ์ฒ˜๋ฆฌ ํ•จ์ˆ˜
28
  def summarize_and_translate(text, lang):
29
  if not text.strip():
30
- return "์ž…๋ ฅ๋œ ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.", ""
31
- summary = rule_based_summary(text)
32
- if lang == "ko":
33
- return summary, summary
34
  try:
35
- translator = load_translator(lang)
36
- result = translator(summary, max_length=100)
37
- return summary, result[0]["translation_text"]
38
  except Exception as e:
39
- return summary, f"[๋ฒˆ์—ญ ์˜ค๋ฅ˜] {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
  # Gradio UI
42
- iface = gr.Interface(
43
- fn=summarize_and_translate,
44
- inputs=[
45
- gr.Textbox(lines=5, label="์žฌ๋‚œ ๋ฌธ์ž ์ž…๋ ฅ", placeholder="์žฌ๋‚œ์•ˆ์ „๋ฌธ์ž๋ฅผ ์—ฌ๊ธฐ์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”."),
46
- gr.Dropdown(["ko", "en", "zh", "vi"], value="ko", label="๋ฒˆ์—ญ ์–ธ์–ด ์„ ํƒ")
47
- ],
48
- outputs=[
49
- gr.Textbox(label="๐Ÿ“Œ ํ•ต์‹ฌ ์š”์•ฝ"),
50
- gr.Textbox(label="๐ŸŒ ๋ฒˆ์—ญ ์š”์•ฝ")
51
- ],
52
- title="๐Ÿ“ข DISASTER SNAP v5 Lite"
53
- )
54
-
55
- iface.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
3
+ from googletrans import Translator
4
+
5
+ # ๋ชจ๋ธ ๋กœ๋“œ
6
+ model_name = "Aoi785/kobart-disaster-summary-v1"
7
+ tokenizer = AutoTokenizer.from_pretrained("digit82/kobart-summarization")
8
+ model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
9
+ summarizer = pipeline("summarization", model=model, tokenizer=tokenizer)
10
+
11
+ # ๋ฒˆ์—ญ๊ธฐ
12
+ translator = Translator()
13
+
14
+ # ์š”์•ฝ + ๋ฒˆ์—ญ ํ•จ์ˆ˜
 
 
 
 
 
 
 
 
 
 
 
 
15
  def summarize_and_translate(text, lang):
16
  if not text.strip():
17
+ return "์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", ""
18
+
19
+ # ์š”์•ฝ
 
20
  try:
21
+ summary = summarizer(text, max_length=50, min_length=10, do_sample=False)[0]['summary_text']
 
 
22
  except Exception as e:
23
+ summary = f"์š”์•ฝ ์‹คํŒจ: {str(e)}"
24
+ return summary, ""
25
+
26
+ # ๋ฒˆ์—ญ
27
+ try:
28
+ if lang == "ko":
29
+ translated = summary
30
+ else:
31
+ translated = translator.translate(summary, dest=lang).text
32
+ except Exception as e:
33
+ translated = f"๋ฒˆ์—ญ ์‹คํŒจ: {str(e)}"
34
+
35
+ return summary, translated
36
 
37
  # Gradio UI
38
+ with gr.Blocks() as demo:
39
+ gr.Markdown("## ๐Ÿ†˜ ์žฌ๋‚œ ๋ฌธ์ž ์š”์•ฝ ๋ฐ ๋ฒˆ์—ญ๊ธฐ")
40
+
41
+ with gr.Row():
42
+ with gr.Column():
43
+ input_text = gr.Textbox(label="์žฌ๋‚œ ๋ฌธ์ž ์ž…๋ ฅ", lines=5, placeholder="์˜ˆ: ๋‚ด์ผ๊นŒ์ง€ ์žฅ๋งˆ์ „์„  ์˜ํ–ฅ์œผ๋กœ ๋งŽ์€ ๋น„ ์˜ˆ์ƒ...")
44
+ lang = gr.Dropdown(
45
+ choices=["ko(ํ•œ๊ตญ์–ด)", "en(English)", "zh(์ค‘๊ตญ์–ด)", "vi(๋ฒ ํŠธ๋‚จ์–ด)"],
46
+ value="ko(ํ•œ๊ตญ์–ด)",
47
+ label="๋ฒˆ์—ญ ์–ธ์–ด ์„ ํƒ"
48
+ )
49
+ run_button = gr.Button("์š”์•ฝ ๋ฐ ๋ฒˆ์—ญ ์‹คํ–‰")
50
+
51
+ with gr.Column():
52
+ output_summary = gr.Textbox(label="โœ… ์š”์•ฝ ๊ฒฐ๊ณผ")
53
+ output_trans = gr.Textbox(label="๐ŸŒ ๋ฒˆ์—ญ ๊ฒฐ๊ณผ")
54
+
55
+ def process_lang_code(lang_dropdown):
56
+ return lang_dropdown.split("(")[0]
57
+
58
+ run_button.click(
59
+ fn=lambda txt, ln: summarize_and_translate(txt, process_lang_code(ln)),
60
+ inputs=[input_text, lang],
61
+ outputs=[output_summary, output_trans]
62
+ )
63
+
64
+ demo.launch()