goversetv commited on
Commit
e9503b5
โ€ข
1 Parent(s): a606e51

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -82
app.py CHANGED
@@ -1,8 +1,11 @@
1
  import gradio as gr
2
- from transformers import MarianMTModel, MarianTokenizer
3
- from gtts import gTTS
4
  import sqlite3
5
  from datetime import datetime
 
 
 
 
6
  import os
7
  import pandas as pd
8
 
@@ -23,46 +26,10 @@ def init_db():
23
  conn.commit()
24
  conn.close()
25
 
26
- # ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ
27
- ko_en_model_name = "Helsinki-NLP/opus-mt-ko-en" # ํ•œ๊ตญ์–ด -> ์˜์–ด
28
- ko_en_tokenizer = MarianTokenizer.from_pretrained(ko_en_model_name)
29
- ko_en_model = MarianMTModel.from_pretrained(ko_en_model_name)
30
-
31
- en_jp_model_name = "Helsinki-NLP/opus-mt-en-jap" # ์˜์–ด -> ์ผ๋ณธ์–ด
32
- en_jp_tokenizer = MarianTokenizer.from_pretrained(en_jp_model_name)
33
- en_jp_model = MarianMTModel.from_pretrained(en_jp_model_name)
34
-
35
- # ๋ฒˆ์—ญ ๊ธฐ๋Šฅ ๊ตฌํ˜„
36
- def translate_ko_to_jp(keyword):
37
- # 1๋‹จ๊ณ„: ํ•œ๊ตญ์–ด -> ์˜์–ด
38
- tokens = ko_en_tokenizer(keyword, return_tensors="pt", padding=True)
39
- translated_tokens = ko_en_model.generate(**tokens)
40
- translated_text_en = ko_en_tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
41
-
42
- # 2๋‹จ๊ณ„: ์˜์–ด -> ์ผ๋ณธ์–ด
43
- tokens = en_jp_tokenizer(translated_text_en, return_tensors="pt", padding=True)
44
- translated_tokens = en_jp_model.generate(**tokens)
45
- translated_text_jp = en_jp_tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
46
-
47
- return translated_text_jp
48
-
49
- # ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ๊ณผ ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์ €์žฅ
50
- def search(keyword):
51
- if keyword:
52
- translated_text = translate_ko_to_jp(keyword)
53
- url = f"https://www.irasutoya.com/search?q={translated_text}"
54
-
55
- # ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์ €์žฅ
56
- save_search_history(keyword, translated_text, url)
57
-
58
- return f"๊ฒ€์ƒ‰์–ด: {keyword}\n์ผ๋ณธ์–ด ๋ฒˆ์—ญ: {translated_text}\n๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋งํฌ: {url}", url
59
- else:
60
- return "๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.", ""
61
-
62
- # ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์ €์žฅ
63
  def save_search_history(keyword, translation, link):
64
  home_dir = os.path.expanduser("~")
65
  db_path = os.path.join(home_dir, 'search_history.db')
 
66
  conn = sqlite3.connect(db_path)
67
  cursor = conn.cursor()
68
  current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -71,56 +38,52 @@ def save_search_history(keyword, translation, link):
71
  conn.commit()
72
  conn.close()
73
 
74
- # ๊ฒ€์ƒ‰ ๊ธฐ๋ก ๋กœ๋“œ
75
- def load_history():
76
- home_dir = os.path.expanduser("~")
77
- db_path = os.path.join(home_dir, 'search_history.db')
78
- conn = sqlite3.connect(db_path)
79
- cursor = conn.cursor()
80
- cursor.execute('SELECT * FROM searches ORDER BY date DESC')
81
- history = cursor.fetchall()
82
- conn.close()
83
-
84
- df = pd.DataFrame(history, columns=['ID', '๋‚ ์งœ', '๊ฒ€์ƒ‰์–ด', '์ผ๋ณธ์–ด ๋ฒˆ์—ญ', '๋งํฌ'])
85
- return df
86
 
87
- # ์ผ๋ณธ์–ด ์Œ์„ฑ ์žฌ์ƒ ๊ธฐ๋Šฅ
88
- def play_japanese_audio(japanese_text):
89
- tts = gTTS(japanese_text, lang='ja')
90
- audio_file = "japanese_audio.mp3"
91
- tts.save(audio_file)
92
- return audio_file
93
 
94
- # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ •
95
- def gradio_search_interface(keyword):
96
- result, url = search(keyword)
97
- return result
98
 
99
- def gradio_audio_interface(japanese_text):
100
- audio_file = play_japanese_audio(japanese_text)
101
- return audio_file
102
 
103
- def gradio_history_interface():
104
- history = load_history()
105
- return history
 
 
 
 
106
 
107
- # Gradio Blocks ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
108
  with gr.Blocks() as demo:
109
- with gr.Tab("๊ฒ€์ƒ‰"):
 
110
  keyword_input = gr.Textbox(label="ํ•œ๊ธ€ ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ")
111
  search_button = gr.Button("๊ฒ€์ƒ‰")
112
- search_output = gr.Textbox(label="๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ")
113
- audio_output = gr.Audio(label="์ผ๋ณธ์–ด ์Œ์„ฑ ์žฌ์ƒ")
114
-
115
- search_button.click(gradio_search_interface, inputs=keyword_input, outputs=search_output)
116
- search_button.click(gradio_audio_interface, inputs=keyword_input, outputs=audio_output)
117
 
118
- with gr.Tab("๊ฒ€์ƒ‰ ๊ธฐ๋ก"):
119
- history_button = gr.Button("๊ธฐ๋ก ๋ถˆ๋Ÿฌ์˜ค๊ธฐ")
120
- history_output = gr.Dataframe(label="๊ฒ€์ƒ‰ ๊ธฐ๋ก", headers=["ID", "๋‚ ์งœ", "๊ฒ€์ƒ‰์–ด", "์ผ๋ณธ์–ด ๋ฒˆ์—ญ", "๋งํฌ"])
121
-
122
- history_button.click(gradio_history_interface, outputs=history_output)
 
 
 
 
 
 
 
 
 
 
 
123
 
124
- if __name__ == "__main__":
125
- init_db()
126
- demo.launch(share=True)
 
1
  import gradio as gr
2
+ import webbrowser
 
3
  import sqlite3
4
  from datetime import datetime
5
+ from googletrans import Translator
6
+ from gtts import gTTS
7
+ import playsound
8
+ import pykakasi
9
  import os
10
  import pandas as pd
11
 
 
26
  conn.commit()
27
  conn.close()
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  def save_search_history(keyword, translation, link):
30
  home_dir = os.path.expanduser("~")
31
  db_path = os.path.join(home_dir, 'search_history.db')
32
+
33
  conn = sqlite3.connect(db_path)
34
  cursor = conn.cursor()
35
  current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
 
38
  conn.commit()
39
  conn.close()
40
 
41
+ # Kakasi ์„ค์ •
42
+ kakasi = pykakasi.kakasi()
 
 
 
 
 
 
 
 
 
 
43
 
44
+ # ๊ฒ€์ƒ‰ ํ•จ์ˆ˜
45
+ def search(keyword):
46
+ translator = Translator()
47
+ japanese_keyword = translator.translate(keyword, src='auto', dest='ja').text
48
+ url = f"https://www.irasutoya.com/search?q={japanese_keyword}"
49
+ romaji = ''.join([item['hepburn'] for item in kakasi.convert(japanese_keyword)])
50
 
51
+ save_search_history(keyword, japanese_keyword, url)
 
 
 
52
 
53
+ result_text = f"๊ฒ€์ƒ‰์–ด: {keyword}\n์ผ๋ณธ์–ด ๋ฒˆ์—ญ: {japanese_keyword} ({romaji})\n๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋งํฌ: {url}"
54
+ return result_text, japanese_keyword, url
 
55
 
56
+ # ์ผ๋ณธ์–ด ์Œ์„ฑ ์žฌ์ƒ
57
+ def play_japanese_audio(japanese_text):
58
+ tts = gTTS(japanese_text, lang='ja')
59
+ tts.save("japanese_audio.mp3")
60
+ playsound.playsound("japanese_audio.mp3")
61
+ os.remove("japanese_audio.mp3")
62
+ return "์ผ๋ณธ์–ด ์Œ์„ฑ์ด ์žฌ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
63
 
64
+ # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ •
65
  with gr.Blocks() as demo:
66
+ gr.Markdown("## Irasutoya ํ•œ๊ธ€ ๊ฒ€์ƒ‰๊ธฐ")
67
+ with gr.Row():
68
  keyword_input = gr.Textbox(label="ํ•œ๊ธ€ ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ")
69
  search_button = gr.Button("๊ฒ€์ƒ‰")
 
 
 
 
 
70
 
71
+ result_output = gr.Textbox(label="๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ")
72
+ play_button = gr.Button("์ผ๋ณธ์–ด ์Œ์„ฑ ์žฌ์ƒ", interactive=False)
73
+
74
+ def on_search(keyword):
75
+ result, japanese_keyword, _ = search(keyword)
76
+ play_button.interactive = True
77
+ return result, japanese_keyword
78
+
79
+ def on_play(japanese_text):
80
+ return play_japanese_audio(japanese_text)
81
+
82
+ search_button.click(on_search, [keyword_input], [result_output, play_button])
83
+ play_button.click(on_play, [play_button], [])
84
+
85
+ # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”
86
+ init_db()
87
 
88
+ # ์•ฑ ์‹คํ–‰
89
+ demo.launch()