Showing
3 changed files
with
72 additions
and
87 deletions
| ... | @@ -1368,15 +1368,23 @@ function transcribeText() { | ... | @@ -1368,15 +1368,23 @@ function transcribeText() { |
| 1368 | } | 1368 | } |
| 1369 | 1369 | ||
| 1370 | let input_line = "" | 1370 | let input_line = "" |
| 1371 | -function uploadSoundData(blob) { | 1371 | +let tab = ''; |
| 1372 | +let before_val = ''; | ||
| 1373 | +let chk = 1; | ||
| 1374 | +let tmp = []; | ||
| 1375 | +async function uploadSoundData(blob) { | ||
| 1372 | let filename = new Date().toISOString(); | 1376 | let filename = new Date().toISOString(); |
| 1373 | let xhr = new XMLHttpRequest(); | 1377 | let xhr = new XMLHttpRequest(); |
| 1374 | let formData = new FormData(); | 1378 | let formData = new FormData(); |
| 1375 | xhr.onload = function(e) { | 1379 | xhr.onload = function(e) { |
| 1376 | if(this.readyState === 4) { | 1380 | if(this.readyState === 4) { |
| 1377 | - let transcript = JSON.parse(e.target.responseText) | 1381 | + let transcript = JSON.parse(e.target.responseText) + ''; |
| 1378 | document.getElementById("output").innerHTML += `${cnt++}: ${transcript}<br><br>`; | 1382 | document.getElementById("output").innerHTML += `${cnt++}: ${transcript}<br><br>`; |
| 1379 | - uploadTranscriptData(transcript); | 1383 | + tmp = transcript.split(' '); |
| 1384 | + if (tmp[0] == '종료') tab = tab.slice(1); | ||
| 1385 | + else{ | ||
| 1386 | + uploadTranscriptData(tab, transcript); | ||
| 1387 | + } | ||
| 1380 | } | 1388 | } |
| 1381 | }; | 1389 | }; |
| 1382 | formData.append("audio_data", blob, filename); | 1390 | formData.append("audio_data", blob, filename); |
| ... | @@ -1384,7 +1392,7 @@ function uploadSoundData(blob) { | ... | @@ -1384,7 +1392,7 @@ function uploadSoundData(blob) { |
| 1384 | xhr.send(formData); | 1392 | xhr.send(formData); |
| 1385 | } | 1393 | } |
| 1386 | 1394 | ||
| 1387 | -function uploadTranscriptData(txt) { | 1395 | +async function uploadTranscriptData(tabs, txt) { |
| 1388 | let request = new XMLHttpRequest(); | 1396 | let request = new XMLHttpRequest(); |
| 1389 | let form = new FormData(); | 1397 | let form = new FormData(); |
| 1390 | request.onload = function(e) { | 1398 | request.onload = function(e) { |
| ... | @@ -1392,9 +1400,13 @@ function uploadTranscriptData(txt) { | ... | @@ -1392,9 +1400,13 @@ function uploadTranscriptData(txt) { |
| 1392 | console.log(e.target.responseText) | 1400 | console.log(e.target.responseText) |
| 1393 | input_line += e.target.responseText; | 1401 | input_line += e.target.responseText; |
| 1394 | sourceEditor.setValue(input_line); | 1402 | sourceEditor.setValue(input_line); |
| 1403 | + if ((tmp[0] == '함수' || tmp[0] == '반복문' || tmp[0] == '조건문') && e.target.responseText != '') { | ||
| 1404 | + tab += '\t'; | ||
| 1405 | + } | ||
| 1395 | } | 1406 | } |
| 1396 | }; | 1407 | }; |
| 1397 | form.append("transcript_data", txt); | 1408 | form.append("transcript_data", txt); |
| 1409 | + form.append("tabs", tabs); | ||
| 1398 | request.open("POST", "/ttp", true); | 1410 | request.open("POST", "/ttp", true); |
| 1399 | request.send(form); | 1411 | request.send(form); |
| 1400 | } | 1412 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -23,8 +23,8 @@ async function testGoogleTextToSpeech(audioBuffer) { | ... | @@ -23,8 +23,8 @@ async function testGoogleTextToSpeech(audioBuffer) { |
| 23 | '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 와 같다', | 23 | '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 와 같다', |
| 24 | '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 보다 작거나 같다', | 24 | '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 보다 작거나 같다', |
| 25 | '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 보다 크거나 같다', | 25 | '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 보다 크거나 같다', |
| 26 | - 'for $OOV_CLASS_ALPHA_SEQUENCE in', | 26 | + '반복문 선언 for $OOV_CLASS_ALPHA_SEQUENCE in range', |
| 27 | - 'for $OOV_CLASS_ALPHA_SEQUENCE in', | 27 | + '반복문 선언 for $OOV_CLASS_ALPHA_SEQUENCE in', |
| 28 | '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 빈 리스트', | 28 | '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 빈 리스트', |
| 29 | '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 숫자 리스트 $OOV_CLASS_ALPHANUMERIC_SEQUENCE', | 29 | '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 숫자 리스트 $OOV_CLASS_ALPHANUMERIC_SEQUENCE', |
| 30 | '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 문자 리스트 $OOV_CLASS_ALPHANUMERIC_SEQUENCE', | 30 | '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 문자 리스트 $OOV_CLASS_ALPHANUMERIC_SEQUENCE', |
| ... | @@ -41,8 +41,10 @@ async function testGoogleTextToSpeech(audioBuffer) { | ... | @@ -41,8 +41,10 @@ async function testGoogleTextToSpeech(audioBuffer) { |
| 41 | 'parameter', | 41 | 'parameter', |
| 42 | '변수 선언', | 42 | '변수 선언', |
| 43 | '함수 선언', | 43 | '함수 선언', |
| 44 | - '반복문 선언', | 44 | + '반복문 선언 while', |
| 45 | + '반복문 선언 와일', | ||
| 45 | '조건문 선언', | 46 | '조건문 선언', |
| 47 | + '논리 식 선언', | ||
| 46 | '기본 함수 사용', | 48 | '기본 함수 사용', |
| 47 | '인풋', | 49 | '인풋', |
| 48 | '스플릿', | 50 | '스플릿', |
| ... | @@ -73,32 +75,31 @@ async function testGoogleTextToSpeech(audioBuffer) { | ... | @@ -73,32 +75,31 @@ async function testGoogleTextToSpeech(audioBuffer) { |
| 73 | .map(result => result.alternatives[0].transcript); | 75 | .map(result => result.alternatives[0].transcript); |
| 74 | return transcription; | 76 | return transcription; |
| 75 | } | 77 | } |
| 78 | + | ||
| 76 | let before_val = ''; | 79 | let before_val = ''; |
| 77 | -let tab = ''; | 80 | +async function TextToPython(trans_data, tab) { |
| 78 | -let ent = ''; | ||
| 79 | -async function TextToPython(trans_data) { | ||
| 80 | let text_list = trans_data.split(' '); | 81 | let text_list = trans_data.split(' '); |
| 81 | console.log(text_list); | 82 | console.log(text_list); |
| 82 | switch (text_list[0]){ | 83 | switch (text_list[0]){ |
| 83 | case '기본': | 84 | case '기본': |
| 84 | - before_val = text_list[0]; | 85 | + before_val = '기본'; |
| 85 | - switch (text_list[3]){ | 86 | + switch (text_list[3]){ |
| 86 | - case '프린트': | 87 | + case '프린트': |
| 87 | - return tab + 'print('; | 88 | + return tab + 'print('; |
| 88 | - case '인풋': | 89 | + case '인풋': |
| 89 | - return tab + 'input()'; | 90 | + return 'input()\n'; |
| 90 | - case '스플릿': | 91 | + case '섬': |
| 91 | - return '.split()'; | 92 | + return 'sum('; |
| 92 | - case '섬': | 93 | + case '맥스': |
| 93 | - return 'sum('; | 94 | + return 'max('; |
| 94 | - case '맥스': | 95 | + case '민': |
| 95 | - return 'max('; | 96 | + return 'min('; |
| 96 | - case '민': | 97 | + case '렌': |
| 97 | - return 'min('; | 98 | + return 'len('; |
| 98 | - case '렌': | 99 | + case '수식': |
| 99 | - return 'len('; | 100 | + return text_list.slice(4).join(' ') + '\n'; |
| 100 | - } | 101 | + default: return ''; |
| 101 | - break; | 102 | + } |
| 102 | case '파라미터': | 103 | case '파라미터': |
| 103 | if (text_list.length < 3) return ''; | 104 | if (text_list.length < 3) return ''; |
| 104 | if (before_val == '기본'){ | 105 | if (before_val == '기본'){ |
| ... | @@ -107,121 +108,95 @@ async function TextToPython(trans_data) { | ... | @@ -107,121 +108,95 @@ async function TextToPython(trans_data) { |
| 107 | } | 108 | } |
| 108 | else{ | 109 | else{ |
| 109 | before_val = '파라미터'; | 110 | before_val = '파라미터'; |
| 110 | - tab += '\t'; | ||
| 111 | return text_list.slice(2).join() + '):\n'; | 111 | return text_list.slice(2).join() + '):\n'; |
| 112 | } | 112 | } |
| 113 | break; | 113 | break; |
| 114 | case '변수': | 114 | case '변수': |
| 115 | - if (before_val == '기본'){ | ||
| 116 | - ent = '\n'; | ||
| 117 | - } | ||
| 118 | - else{ | ||
| 119 | - ent = ''; | ||
| 120 | - } | ||
| 121 | - before_val = '변수'; | ||
| 122 | if (text_list.length < 4) return ''; | 115 | if (text_list.length < 4) return ''; |
| 116 | + before_val = '변수'; | ||
| 123 | if (text_list[2] == '문자'){ | 117 | if (text_list[2] == '문자'){ |
| 124 | if (text_list[3][text_list[3].length-1] == '는'){ | 118 | if (text_list[3][text_list[3].length-1] == '는'){ |
| 125 | - return ent + tab + text_list[3].slice(0, text_list[3].length-1) + ' = "' + text_list.slice(4).join(' ') + '"\n'; | 119 | + return tab + text_list[3].slice(0, text_list[3].length-1) + ' = "' + text_list.slice(4).join(' ') + '"\n'; |
| 126 | } | 120 | } |
| 127 | else{ | 121 | else{ |
| 128 | text_list[4] = '= "'; | 122 | text_list[4] = '= "'; |
| 129 | - return ent + tab + text_list.slice(3).join(' ') + '"\n'; | 123 | + return tab + text_list.slice(3).join(' ') + '"\n'; |
| 130 | } | 124 | } |
| 131 | } | 125 | } |
| 132 | else if (text_list[2] == '숫자'){ | 126 | else if (text_list[2] == '숫자'){ |
| 133 | if (text_list[3][text_list[3].length-1] == '는'){ | 127 | if (text_list[3][text_list[3].length-1] == '는'){ |
| 134 | - return ent + tab + text_list[3].slice(0, text_list[3].length-1) + ' = ' + text_list.slice(4).join(' ') + '\n'; | 128 | + return tab + text_list[3].slice(0, text_list[3].length-1) + ' = ' + text_list.slice(4).join(' ') + '\n'; |
| 135 | } | 129 | } |
| 136 | else if (text_list[4] == '-'){ | 130 | else if (text_list[4] == '-'){ |
| 137 | text_list[4] = '='; | 131 | text_list[4] = '='; |
| 138 | - return ent + tab + text_list.slice(3).join(' ') + '\n'; | 132 | + return tab + text_list.slice(3).join(' ') + '\n'; |
| 139 | } | 133 | } |
| 140 | } | 134 | } |
| 141 | else if (text_list[2] == '함수'){ | 135 | else if (text_list[2] == '함수'){ |
| 142 | if (text_list[3][text_list[3].length-1] == '는'){ | 136 | if (text_list[3][text_list[3].length-1] == '는'){ |
| 143 | - return ent + tab + text_list[3].slice(0, text_list[3].length-1) + ' = '; | 137 | + return tab + text_list[3].slice(0, text_list[3].length-1) + ' = '; |
| 144 | } | 138 | } |
| 145 | else{ | 139 | else{ |
| 146 | text_list[4] = '='; | 140 | text_list[4] = '='; |
| 147 | - return ent + tab + text_list.slice(3) | 141 | + return tab + text_list.slice(3).join(' '); |
| 148 | } | 142 | } |
| 149 | } | 143 | } |
| 150 | else if (text_list[2] == '리스트'){ | 144 | else if (text_list[2] == '리스트'){ |
| 151 | if (text_list[3][text_list[3].length-1] == '는'){ | 145 | if (text_list[3][text_list[3].length-1] == '는'){ |
| 152 | - if (text_list[4] == '빈') return ent + tab + text_list[3].slice(0, text_list[3].length-1) + ' = []\n'; | 146 | + if (text_list[4] == '빈') return tab + text_list[3].slice(0, text_list[3].length-1) + ' = []\n'; |
| 153 | - else if (text_list[4] == '숫자') ent + tab + text_list[3].slice(0, text_list[3].length-1) + ' = [' + text_list.slice(6).join(',') + ']\n'; | 147 | + else if (text_list[4] == '숫자') return tab + text_list[3].slice(0, text_list[3].length-1) + ' = [' + text_list.slice(6).join(',') + ']\n'; |
| 154 | - else return ent + tab + text_list[3].slice(0, text_list[3].length-1) + ' = ["' + text_list.slice(6).join('","') + '"]\n'; | 148 | + else return tab + text_list[3].slice(0, text_list[3].length-1) + ' = ["' + text_list.slice(6).join('","') + '"]\n'; |
| 155 | } | 149 | } |
| 156 | } | 150 | } |
| 157 | else return ''; | 151 | else return ''; |
| 158 | break; | 152 | break; |
| 159 | case '반복문': | 153 | case '반복문': |
| 160 | - if (before_val == '기본'){ | 154 | + before_val = '반복문'; |
| 161 | - ent = '\n'; | 155 | + if (text_list[2] == 'for'){ |
| 156 | + return tab + text_list.slice(2).join(' ') + ' (' | ||
| 162 | } | 157 | } |
| 163 | - else{ | 158 | + else if (text_list[2] == 'while' || text_list[2] == '와일'){ |
| 164 | - ent = ''; | 159 | + return tab + 'while ('; |
| 165 | - } | ||
| 166 | - if (text_list[3] == 'for'){ | ||
| 167 | - return ent + tab + text_list.slice(3).join(' ') + ' (' | ||
| 168 | - } | ||
| 169 | - else if (text_list[3] == 'while' || text_list[3] == '와일'){ | ||
| 170 | - return ent + tab + 'while ('; | ||
| 171 | } | 160 | } |
| 172 | else return ''; | 161 | else return ''; |
| 173 | break; | 162 | break; |
| 174 | - case '완료': | ||
| 175 | - tab.slice(1); | ||
| 176 | - return ''; | ||
| 177 | - break; | ||
| 178 | case '함수': | 163 | case '함수': |
| 179 | - if (before_val == '기본'){ | 164 | + if (text_list.length >= 3){ |
| 180 | - ent = '\n'; | 165 | + before_val = '함수' |
| 181 | - } | 166 | + return tab + 'def ' + text_list.slice(2).join('') + '('; |
| 182 | - else{ | ||
| 183 | - ent = ''; | ||
| 184 | } | 167 | } |
| 185 | - if (text_list.length >= 3) return 'def ' + text_list.slice(2).join('') + '('; | ||
| 186 | else return ''; | 168 | else return ''; |
| 187 | case '조건문': | 169 | case '조건문': |
| 188 | - if (before_val == '기본'){ | ||
| 189 | - ent = '\n'; | ||
| 190 | - } | ||
| 191 | - else{ | ||
| 192 | - ent = ''; | ||
| 193 | - } | ||
| 194 | if (text_list.length >= 3){ | 170 | if (text_list.length >= 3){ |
| 195 | - if (text_list[3] == 'if' || text_list[3] == '이프'){ | 171 | + before_val = '조건문'; |
| 196 | - return tab + 'if ('; | 172 | + if (text_list[2] == 'if' || text_list[2] == '이프'){ |
| 173 | + return tab + 'if ('; | ||
| 197 | } | 174 | } |
| 198 | - else if ((text_list[3] == 'else' || text_list[3] == '엘스')){ | 175 | + else if ((text_list[2] == 'else' || text_list[2] == '엘스')){ |
| 199 | - tab += 1; | 176 | + return tab + 'else:\n' |
| 200 | - return '\t'*(tab-1) + 'else:\n' | ||
| 201 | } | 177 | } |
| 202 | - else if((text_list[3] == 'else' || text_list[3] == '엘스') && (text_list[4] == 'if' || text_list[4] == '이프')){ | 178 | + else if((text_list[2] == 'else' || text_list[2] == '엘스') && (text_list[3] == 'if' || text_list[3] == '이프')){ |
| 203 | - return tab + 'elif ('; | 179 | + return tab + 'elif ('; |
| 204 | } | 180 | } |
| 205 | } | 181 | } |
| 206 | else return ''; | 182 | else return ''; |
| 207 | break; | 183 | break; |
| 208 | case '논리': | 184 | case '논리': |
| 209 | if (text_list.length >= 7){ | 185 | if (text_list.length >= 7){ |
| 210 | - tab += 1; | ||
| 211 | if (text_list[6] == '같다'){ | 186 | if (text_list[6] == '같다'){ |
| 212 | - return tab + text_list[3].slice(0, text_list[3].length-1) + ' == ' + text_list[4] + '):\n'; | 187 | + return text_list[3].slice(0, text_list[3].length-1) + ' == ' + text_list[4] + '):\n'; |
| 213 | } | 188 | } |
| 214 | else if(text_list[6] == '크다'){ | 189 | else if(text_list[6] == '크다'){ |
| 215 | - return tab + text_list[3].slice(0, text_list[3].length-1) + ' > ' + text_list[4] + '):\n'; | 190 | + return text_list[3].slice(0, text_list[3].length-1) + ' > ' + text_list[4] + '):\n'; |
| 216 | } | 191 | } |
| 217 | else if(text_list[6] == '작다'){ | 192 | else if(text_list[6] == '작다'){ |
| 218 | - return tab + text_list[3].slice(0, text_list[3].length-1) + ' < ' + text_list[4] + '):\n'; | 193 | + return text_list[3].slice(0, text_list[3].length-1) + ' < ' + text_list[4] + '):\n'; |
| 219 | } | 194 | } |
| 220 | else if(text_list[6] == '크거나'){ | 195 | else if(text_list[6] == '크거나'){ |
| 221 | - return tab + text_list[3].slice(0, text_list[3].length-1) + ' >= ' + text_list[4] + '):\n'; | 196 | + return text_list[3].slice(0, text_list[3].length-1) + ' >= ' + text_list[4] + '):\n'; |
| 222 | } | 197 | } |
| 223 | else if(text_list[6] == '작거나'){ | 198 | else if(text_list[6] == '작거나'){ |
| 224 | - return tab + text_list[3].slice(0, text_list[3].length-1) + ' <= ' + text_list[4] + '):\n'; | 199 | + return text_list[3].slice(0, text_list[3].length-1) + ' <= ' + text_list[4] + '):\n'; |
| 225 | } | 200 | } |
| 226 | } | 201 | } |
| 227 | else return ''; | 202 | else return ''; |
| ... | @@ -239,7 +214,7 @@ app.post('/upload_sound', upload.any(), async (req, res) => { | ... | @@ -239,7 +214,7 @@ app.post('/upload_sound', upload.any(), async (req, res) => { |
| 239 | }); | 214 | }); |
| 240 | app.post('/ttp', upload.any(), async (req, res) => { | 215 | app.post('/ttp', upload.any(), async (req, res) => { |
| 241 | console.log("Getting python code.."); | 216 | console.log("Getting python code.."); |
| 242 | - let python_code = await TextToPython(req.body.transcript_data); | 217 | + let python_code = await TextToPython(req.body.transcript_data, req.body.tabs); |
| 243 | console.log("Pyton code: " + python_code); | 218 | console.log("Pyton code: " + python_code); |
| 244 | res.status(200).send(python_code); | 219 | res.status(200).send(python_code); |
| 245 | }); | 220 | }); | ... | ... |
-
Please register or login to post a comment