ginipick commited on
Commit
6f04473
·
verified ·
1 Parent(s): 5e91f68

Update src/main.py

Browse files
Files changed (1) hide show
  1. src/main.py +54 -45
src/main.py CHANGED
@@ -47,49 +47,55 @@ def translate_quoted_word(word):
47
  print(f"Word translation error: {e}")
48
  return word
49
 
 
 
 
 
 
 
 
 
 
 
 
50
  def translate_korean_to_english(text):
51
  """전체 텍스트 번역 함수"""
52
  try:
53
- # 1. 따옴표로 묶인 단어 찾기
54
- quoted_words = re.findall(r"'([^']*)'", text)
 
 
 
 
 
 
 
55
 
56
- # 2. 따옴표 단어 개별 번역
57
- translated_words = {}
58
- for word in quoted_words:
59
- url = "https://translate.googleapis.com/translate_a/single"
60
- params = {
61
- "client": "gtx",
62
- "sl": "ko",
63
- "tl": "en",
64
- "dt": "t",
65
- "q": word
66
- }
67
- response = requests.get(url, params=params)
68
- if response.status_code == 200:
69
- translated = response.json()[0][0][0].upper()
70
- translated_words[word] = translated
71
- # 임시로 원본 텍스트의 따옴표 부분을 특수 마커로 대체
72
- text = text.replace(f"'{word}'", "PROPER_NOUN_MARKER")
73
-
74
- # 3. 전체 문장 번역
75
- params = {
76
- "client": "gtx",
77
- "sl": "ko",
78
- "tl": "en",
79
- "dt": "t",
80
- "q": text
81
- }
82
- response = requests.get(url, params=params)
83
- if response.status_code == 200:
84
- full_translation = response.json()[0][0][0]
85
-
86
- # 4. 번역된 문장에서 마커를 번역된 고유명사로 대체
87
- for original, translated in translated_words.items():
88
- full_translation = full_translation.replace("PROPER_NOUN_MARKER", f"'{translated}'", 1)
89
-
90
- return full_translation
91
- else:
92
- raise Exception(f"Translation API returned status code: {response.status_code}")
93
  except Exception as e:
94
  print(f"Translation error: {e}")
95
  return text
@@ -102,15 +108,18 @@ def result():
102
  return render_template('error.html', error="Please enter text to translate")
103
 
104
  try:
105
- # 번역 수행
106
- english_text = translate_korean_to_english(input_text)
 
 
 
107
  if not english_text:
108
  raise Exception("Translation failed")
109
 
110
- # 따옴표로 묶인 단어 추출 (번역된 영어 텍스트에서)
111
  quoted_words = [word.strip("'") for word in re.findall(r"'([^']*)'", english_text)]
112
 
113
- # 번역된 텍스트에서 따옴표 제거하고 ASL 변환
114
  clean_english = re.sub(r"'([^']*)'", r"\1", english_text)
115
  eng_to_asl_translator = NlpSpacyBaseTranslator(sentence=clean_english)
116
  generated_gloss = eng_to_asl_translator.translate_to_gloss()
@@ -138,13 +147,13 @@ def result():
138
  i = 0
139
  while i < len(processed_gloss):
140
  if processed_gloss[i] == 'FINGERSPELL-START':
141
- final_gloss.extend(processed_gloss[i:i+2]) # START와 첫 글자 추가
142
  i += 2
143
  while i < len(processed_gloss) and processed_gloss[i] != 'FINGERSPELL-END':
144
  final_gloss.append(processed_gloss[i])
145
  i += 1
146
  if i < len(processed_gloss):
147
- final_gloss.append(processed_gloss[i]) # END 추가
148
  i += 1
149
  else:
150
  word = processed_gloss[i]
 
47
  print(f"Word translation error: {e}")
48
  return word
49
 
50
+ def is_english(text):
51
+ """텍스트가 영어인지 확인하는 함수"""
52
+ # 영어 알파벳과 기본적인 문장부호만 포함되어 있는지 확인
53
+ english_pattern = re.compile(r'^[A-Za-z\s\'".,!?-]+$')
54
+ return bool(english_pattern.match(text.replace("'", "")))
55
+
56
+ def process_english_input(text):
57
+ """영어 입력을 처리하는 함수"""
58
+ # 따옴표로 묶인 단어들을 그대로 유지하면서 나머지 텍스트는 그대로 반환
59
+ return text
60
+
61
  def translate_korean_to_english(text):
62
  """전체 텍스트 번역 함수"""
63
  try:
64
+ # 입력이 영어인지 확인
65
+ if is_english(text):
66
+ return process_english_input(text)
67
+
68
+ # 한국어 입력 처리
69
+ # 1. 따옴표로 묶인 부분을 찾아서 따로 번역
70
+ pattern = r"'([^']*)'|([^']+)"
71
+ parts = re.findall(pattern, text)
72
+ translated_parts = []
73
 
74
+ for quoted, unquoted in parts:
75
+ if quoted: # 따옴표로 묶인 부분
76
+ translated_word = translate_quoted_word(quoted)
77
+ translated_parts.append(f"'{translated_word}'")
78
+ elif unquoted: # 일반 텍스트
79
+ # 일반 텍스트 번역
80
+ url = "https://translate.googleapis.com/translate_a/single"
81
+ params = {
82
+ "client": "gtx",
83
+ "sl": "ko",
84
+ "tl": "en",
85
+ "dt": "t",
86
+ "q": unquoted.strip()
87
+ }
88
+ response = requests.get(url, params=params)
89
+ if response.status_code == 200:
90
+ translated = ' '.join(item[0] for item in response.json()[0] if item[0])
91
+ translated_parts.append(translated)
92
+ else:
93
+ translated_parts.append(unquoted)
94
+
95
+ # 번역된 부분들을 합치기
96
+ result = ''.join(translated_parts).strip()
97
+ return result
98
+
 
 
 
 
 
 
 
 
 
 
 
 
99
  except Exception as e:
100
  print(f"Translation error: {e}")
101
  return text
 
108
  return render_template('error.html', error="Please enter text to translate")
109
 
110
  try:
111
+ # 영어 입력 확인
112
+ is_eng = is_english(input_text)
113
+
114
+ # 번역 또는 직접 처리
115
+ english_text = input_text if is_eng else translate_korean_to_english(input_text)
116
  if not english_text:
117
  raise Exception("Translation failed")
118
 
119
+ # 따옴표로 묶인 단어 추출
120
  quoted_words = [word.strip("'") for word in re.findall(r"'([^']*)'", english_text)]
121
 
122
+ # ASL 변환을 위해 따옴표 제거
123
  clean_english = re.sub(r"'([^']*)'", r"\1", english_text)
124
  eng_to_asl_translator = NlpSpacyBaseTranslator(sentence=clean_english)
125
  generated_gloss = eng_to_asl_translator.translate_to_gloss()
 
147
  i = 0
148
  while i < len(processed_gloss):
149
  if processed_gloss[i] == 'FINGERSPELL-START':
150
+ final_gloss.extend(processed_gloss[i:i+2])
151
  i += 2
152
  while i < len(processed_gloss) and processed_gloss[i] != 'FINGERSPELL-END':
153
  final_gloss.append(processed_gloss[i])
154
  i += 1
155
  if i < len(processed_gloss):
156
+ final_gloss.append(processed_gloss[i])
157
  i += 1
158
  else:
159
  word = processed_gloss[i]