Spaces:
Sleeping
Sleeping
File size: 6,065 Bytes
2753efc 30d363f 46b7ff2 033c24d f4b17cb 2753efc 8d3b576 30d363f 2753efc 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 7529d5e 30d363f 8d3b576 f4b17cb 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 30d363f 8d3b576 e255572 d2952aa e255572 d2952aa e255572 d2952aa e255572 647764f d2952aa 033c24d e255572 30d363f d940385 30d363f 8d3b576 d04ec54 2753efc 8d3b576 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
import gradio as gr
from deep_translator import GoogleTranslator
from gtts import gTTS
import pykakasi
import os
# ๋ฒ์ ์ ๋ณด
__version__ = "1.8.13"
# Kakasi ์ธ์คํด์ค ์์ฑ ๋ฐ ์ค์
kakasi = pykakasi.kakasi()
def convert_text(japanese_text, conversion_type):
if conversion_type == "ํ๋ผ๊ฐ๋":
kakasi.setMode("H", "H") # ํ๋ผ๊ฐ๋ ์ ์ง
kakasi.setMode("K", "H") # ๊ฐํ์นด๋๋ฅผ ํ๋ผ๊ฐ๋๋ก ๋ณํ
kakasi.setMode("J", "H") # ํ์๋ฅผ ํ๋ผ๊ฐ๋๋ก ๋ณํ
elif conversion_type == "๊ฐํ์นด๋":
kakasi.setMode("H", "K") # ํ๋ผ๊ฐ๋๋ฅผ ๊ฐํ์นด๋๋ก ๋ณํ
kakasi.setMode("K", "K") # ๊ฐํ์นด๋ ์ ์ง
kakasi.setMode("J", "K") # ํ์๋ฅผ ๊ฐํ์นด๋๋ก ๋ณํ
else: # ๊ธฐ๋ณธ ๋๋ ํ์
return japanese_text # ๋ณํ ์์ด ๊ทธ๋๋ก ๋ฐํ
converter = kakasi.getConverter()
converted = converter.do(japanese_text)
return converted
def search_and_update_history(keyword, conversion_type):
result, japanese_keyword = search(keyword, conversion_type)
if japanese_keyword:
audio_path = generate_audio_file(japanese_keyword)
return result, gr.update(value=audio_path, visible=True)
else:
return result, gr.update(visible=False)
def search(keyword, conversion_type):
try:
translator = GoogleTranslator(source='ko', target='ja')
japanese_keyword = translator.translate(keyword)
converted_keyword = convert_text(japanese_keyword, conversion_type)
url = f"https://www.irasutoya.com/search?q={converted_keyword}"
result_text = (
f"**๊ฒ์์ด:** {keyword}\n"
f"**์ผ๋ณธ์ด ๋ฒ์ญ ({conversion_type}):** {converted_keyword}\n"
f"[๊ฒ์ ๊ฒฐ๊ณผ ๋ณด๊ธฐ]({url})\n\n"
f"**์๋ด:** ์ ํํ ๋ณํ ์ ํ์ ๋ฐ๋ผ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค."
)
return result_text, converted_keyword
except Exception as e:
return f"๋ฒ์ญ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {e}", None
def generate_audio_file(japanese_text):
try:
tts = gTTS(japanese_text, lang='ja')
file_path = "japanese_audio.mp3"
tts.save(file_path)
return file_path
except Exception as e:
return None
def clear_inputs():
return "", "", gr.update(visible=False)
with gr.Blocks(css="""
#container {
width: 50%;
margin: auto;
}
#search_button, #clear_button {
width: 100%;
}
""") as demo:
with gr.Column(elem_id="container"):
gr.Markdown("<h2 style='text-align: center;'>์ด๋ผ์คํ ์ผ ์ผ๋ฌ์คํธ ๊ฒ์๊ธฐ</h2>")
keyword_input = gr.Textbox(label="ํ๊ธ ๊ฒ์์ด ์
๋ ฅ", placeholder="ํ๊ธ๋ก ๊ฒ์์ด๋ฅผ ์
๋ ฅํ์ธ์", elem_id="keyword_input")
conversion_type = gr.Radio(
label="๋ณํ ์ ํ ์ ํ",
choices=["๊ธฐ๋ณธ", "ํ๋ผ๊ฐ๋", "๊ฐํ์นด๋", "ํ์"],
value="๊ธฐ๋ณธ",
elem_id="conversion_type"
)
search_button = gr.Button("๊ฒ์", elem_id="search_button")
clear_button = gr.Button("์ง์ฐ๊ธฐ", elem_id="clear_button")
result_output = gr.Markdown()
play_audio = gr.Audio(visible=False, label="์ผ๋ณธ์ด ๋ฐ์ ๋ฃ๊ธฐ")
# ์ํฐํค๋ก ๊ฒ์ ์คํ ์ถ๊ฐ
keyword_input.submit(
fn=search_and_update_history,
inputs=[keyword_input, conversion_type],
outputs=[result_output, play_audio],
)
search_button.click(
fn=search_and_update_history,
inputs=[keyword_input, conversion_type],
outputs=[result_output, play_audio],
)
clear_button.click(
fn=clear_inputs,
outputs=[keyword_input, result_output, play_audio],
)
# ์๋ด ๋ฌธ๊ตฌ๋ฅผ UI ๋ด๋ถ๋ก ์ด๋
gr.Markdown("""
**โจ ์ด๋ผ์คํ ์ผ(Irasutoya.com)** ๋ ์ผ๋ณธ์ ์ผ๋ฌ์คํธ๋ ์ดํฐ ๋ฏธ์ฆํ๋ ํ์นด์(Takashi Mizutani)๊ฐ ์ด์ํ๋ ๋ฌด๋ฃ ์ผ๋ฌ์คํธ ์ฌ์ดํธ์
๋๋ค.
๊ท์ฝ๊ณ ๋จ์ํ ์คํ์ผ์ ์ผ๋ฌ์คํธ๋ฅผ ์น์ฌ์ดํธ, ๋ธ๋ก๊ทธ, ํ๋ ์ ํ
์ด์
, ์ธ์๋ฌผ ๋ฑ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ผ๋ณธ ๋ด์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
**๐ฅ ์ ํ๋ธ ์ผ์ธ ์ ์์ ์ ์์ ํ์ํ ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ง๋ง,**
์ผ๋ณธ์ด๋ก ๋์ด ์์ด ๋ถํธํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๊ธ๋ก ์
๋ ฅํด๋ ๋ฒ์ญ๊ณผ ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋ ํด์ ๊ฐ๋ฐํ์ต๋๋ค.
**๐ ์ด ํด์ ์ด๋ฏธ์ง ๊ฒ์๋ฟ๋ง ์๋๋ผ ์ผ๋ณธ์ด ๋ฐ์์ ๋ค์ผ๋ฉฐ ๊ฐ๋จํ ์ผ๋ณธ์ด ๊ณต๋ถ๋ ๊ฐ๋ฅํฉ๋๋ค.**
์ด ํด์ด ๋์์ด ๋์
จ๋ค๋ฉด, ์๋ ๋งํฌ๋ฅผ ํตํด ํ์ํด ์ฃผ์ธ์. ์ฌ๋ฌ๋ถ์ ํ์์ด ๋ ๋์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐ ํฐ ํ์ด ๋ฉ๋๋ค. ๐
**โ ๏ธ ์ด๋ผ์คํ ์ผ ์ผ๋ฌ์คํธ ์ด์ฉ ์ฃผ์ ์ฌํญ:**
- ๊ฐ์ธ, ๋ฒ์ธ, ์์
์ ์ฌ์ฉ ๋ชจ๋ ๋ฌด๋ฃ์
๋๋ค.
- ๋จ, ํ ์ ์๋ฌผ๋น 20๊ฐ๊น์ง๋ง ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, 21๊ฐ ์ด์ ์ฌ์ฉ ์ ์ ์์ผ๋ก ์ ํ๋ฉ๋๋ค.
- ์ ์๊ถ ํ๊ธฐ ์๋ฌด๋ ์์ผ๋ฉฐ, ์์ ๋กญ๊ฒ ํธ์ง ๋ฐ ๊ฐ๊ณต์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ด ์ฌ์ดํธ๋ ๋จ์ํ ์ด๋ผ์คํ ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ์ผ๋ณธ์ด๋ก ๋ฒ์ญํด ์ ๋ฌํ๋ ๊ธฐ๋ฅ๋ง ์ ๊ณตํฉ๋๋ค.
- ๊ฒ์๋ ์ด๋ฏธ์ง์ ์ฌ์ฉ ์กฐ๊ฑด์ ์ด๋ผ์คํ ์ผ์ ๊ท์ ์ ๋ฐ๋ฅด์๊ธฐ ๋ฐ๋๋๋ค.
""")
gr.Markdown("""
<div style="text-align: center;">
<a href="https://litt.ly/goverse" target="_blank" style="color: #2980b9; text-decoration: underline;">๊ณ ๋ฒ์ค์๊ฒ ํผ๋๋ฐฑํ๊ธฐ</a>
</div>
""")
gr.Markdown("<p style='text-align: center;'>์ ์์: ๊ณ ๋ฒ์คTV</p>")
gr.Markdown(f"<p style='text-align: center;'>๋ฒ์ : {__version__}</p>")
# ์ฑ ์คํ
if __name__ == "__main__":
demo.launch(share=False)
|