Python 영어 발음 한글 변환 - Python yeong-eo bal-eum hangeul byeonhwan


20불을 인출하려합니다.

I'd like to withdraw twenty dollars.

[aɪd laɪk tu(tɪ)(tə) wɪðdrɔ(wɪθdrɔ) twɛnti(twɛni) dɑlɝz(dɔlɝz).]

[아이드  `라익  투  위`드드로  퉨티  달어~즈 .]

이 부근에 좋은 식당 하나 추천해주시겠습니까?

a good restaurant / near / Can you recommend


현재 진행상태입니다. euc-kr에서 utf-8로 바꾸고 뽀송이 발음기호(PoPA)를 한글 모아쓰기로 바꾸었습니다. utf-8를 기본으로 지원하는 py3k가 기대가 되는데 구글 app 엔진은 Jython을 내부적으로 쓴다는 소문도 있어서...  py3k는 요원할듯...

영어의 한글화 프로젝트, 뽀송이의 Catch English 홈페이지는
//catch-english.appspot.com/ 입니다.




신고

태그 : python, CatchEnglish, GoogleAppEngine, English, 영어회화, 영어, 한글, PoPA, 발음기호

포스트 메타 정보

퍼블리싱 및 추천

  • 내보내기
    • 밸리 : IT 2008/07/26 10:42
    • 태그 : python, CatchEnglish, GoogleAppEngine, English, 영어회화, 영어, 한글, PoPA, 발음기호

같은 카테고리의 글

안녕하세요. BlockDMask입니다.
오늘은 제가 간단하게 파이썬으로 만든 언어 변경, 언어 번역 프로그램을 소개해 드리려 합니다.
오늘(2021.06.02) 만든 따끈따끈한 new 프로그램입니다. 

<목차>
1. 초간단 초 심플 번역 프로그램 소개
2. 번역 프로그램 사용법
3. language change 프로그램 사용 영상

1.  파이썬 번역 프로그램 소개

1-1) 프로그램을 만든 이유

이 프로그램은.. 이번에 유튜브를 시작한 와이프를 위해서 편하게 자막을 넣으라고 만든 프로그램 입니다.
(드디어 유명 유튜버 아내가 생기는 걸까요)

해외 시장을 노리는지
자막을 하나하나 구글에 한->영, 한->일,... 등등 이렇게 번거롭게 번역하는 것을 보고,
"하나 만들어주면 좋겠다" 싶어서 바로 작업에 들어가게 되었습니다.

기능은. 와이프가 사용하는 영어와 일어만 집어넣었습니다.

일단 프로그램 생김새 한번 보고 갈까요?

language_change 프로그램 왼쪽 맥용. 오른쪽 윈도우용

1-2) 프로그램 기능

제가 찐 번역 프로그램을 만들 수는 없기 때문에
구글 번역 api를 이용했습니다.

한글을 입력하고 번역을 누르게 되면 영어랑, 일어로 한 번에 1타 2 피로 번역을 해주는 매우 간단한 프로그램입니다.

한글 -> 영어 번역
한글 -> 일어 번역

위 두 가지 기능만 있습니다.

1-3) 사용 언어, 모듈

- 파이썬 3.9.x 를 사용
- GUI를 위해서 PyQt5 모듈을 사용
- 구글 무료 번역 api 인 googletrans 사용했습니다.

1-4) 마주쳤던 에러

- googletrans 버그

'NoneType' object has no attribute 'group'
이런 버그가 막 듭니다.
pip uninstall googletrans
pip install googletrans==4.0.0-rc1 
이렇게 구글 번역 최신 버전을 깔면 문제가 해결됩니다.
(시간낭비는 제가 했으니, 이걸 보시는 분은 시간 버시길)

2. 파이썬 언어 번역 프로그램 사용방법

2-1) 아래 링크에서 language_change 프로그램을 다운로드합니다.

맥 버전, 윈도우 버전 둘 다 있습니다. [다운로드 링크] 

링크를 누르면 구글 드라이브로 가게 되는데 거기서 다운로드하시면 됩니다.

** 맥 버전은 일본어 복사 버튼이 제대로 작동하지 않습니다. 인코딩 관련 버그 같은데 추후 수정하겠습니다.
맥 버전은 일본어 텍스트를 드래그 해서 ctrl + c로 복사하면 해결이가능합니다.

상업적 이용은 금지입니다. 그 외에는 필요하다면 마음껏 사용해주세요.
상업적 이용 금지는 제가 정한 건 아니고 제가 번역에 사용한 google translate api가 그렇게 정한 거라 어쩔 수 없습니다.

2-2) 기쁜 마음으로 프로그램을 실행시킵니다.

2-3) 번역하고자 하는 한글을 입력하고 "번역하기" 버튼을 누릅니다. (조금 기다려야 함) 

2-4) 영어 복사 버튼을 눌러서 원하는 곳에 붙여 넣습니다.

2-5) 일어 복사 버튼을 눌러서 원하는 곳에 붙여 넣습니다.

2-6) 초기화 버튼을 누르면 한국어, 영어, 일어에 적힌 글자들이 다 지워집니다.

2-6) 만약 버그가 있다면, 아래 댓글로 제보 부탁드립니다.

문의 및 버그 버튼을 통해서 제보 부탁드려요.

3. 실제 사용 영상

다운로드 링크 : 맥 용, 윈도우 용 둘 다 있습니다. [다운로드 링크] 

영상 링크 : //youtu.be/cPcVz0pxCBI

이렇게 불편하고 번거로운 일을 한 번에 해결해줄 수 있다니!!
제가 개발을 할 수 있다는 거에 큰 기쁨을 느끼게 되었습니다.
감사합니다. 유용하게 사용해주시고, 기능 추가를 원하신다면 댓글로 달아주세요.
큰 비용이 드는 게 아니라면 고려해서 추가해보겠습니다. (요구사항 전부 개발하는 것은 불가능합니다..ㅠㅠ )
아 참. 코드는 너무 지저분해서 공개하지 않겠습니다.
끝까지 읽어주셔서 감사합니다.

네이버가 또 좋은 일을 했습니다. (만세!) API를 이용하려면 사용신청을 해서 CLIENT ID와 SECRET KEY를 발급받아야 합니다. 페이지의 아랫부분에 있는 “이용 신청” 버튼을 통해서 이용신청을 합니다. 개발 가이드를 보니 python 예제도 있네요. 예제를 살짝 고쳐서 실행해 봅니다.

사용한 파이썬 버전은 3.6입니다.

import urllib.request client_id = "<네이버에서 발급받은 CLIENT ID>" client_secret = "<네이버에서 발급받은 CLIENT SECRET>" encText = urllib.parse.quote("배수지") url = "//openapi.naver.com/v1/krdict/romanization?query=" + encText request = urllib.request.Request(url) request.add_header("X-Naver-Client-Id",client_id) request.add_header("X-Naver-Client-Secret",client_secret) response = urllib.request.urlopen(request) rescode = response.getcode() if(rescode==200): response_body = response.read() print(response_body.decode('utf-8')) else: print("Error Code:" + rescode)

예제는 홍길동으로 했지만 저는 배수지로 검색해 보겠습니다.

{"aResult":[{"sFirstName":"\ubc30","aItems":[{"name":"Bae Sooji","score":"99"},{"name":"Bae Suji","score":"78"},{"name":"Bae Soojee","score":"27"},{"name":"Bae Sujee","score":"21"}]}]}

뭐 결과물은 잘 나온 것 같은데 영문 이름만 뽑아 보고 싶습니다.
코드를 살짝 고쳐봅니다.

import json import urllib.request client_id = "<네이버에서 발급받은 CLIENT ID>" client_secret = "<네이버에서 발급받은 CLIENT SECRET>" encText = urllib.parse.quote("배수지") url = "//openapi.naver.com/v1/krdict/romanization?query=" + encText request = urllib.request.Request(url) request.add_header("X-Naver-Client-Id",client_id) request.add_header("X-Naver-Client-Secret",client_secret) response = urllib.request.urlopen(request) rescode = response.getcode() if(rescode==200): response_body = response.read() json_dict = json.loads(response_body.decode('utf-8')) result = json_dict['aResult'][0] name_items = result['aItems'] names = [name_item['name'] for name_item in name_items] print(names) else: print("Error Code:" + rescode)

결과물

['Bae Sooji', 'Bae Suji', 'Bae Soojee', 'Bae Sujee']

훌륭하네요. 네이버가 일을 참 잘 하는 것 같습니다. 네이버 API 페이지를 살펴보니 1일 25,000글자만 변경이 가능하다고 합니다. 한글 이름은 보통 3글자니까 하루에 8333명 정도 변환이 가능하네요. 이 이상 사용하고 싶으면 네이버 클라우드를 이용해서 이용한도 상향(신용카드인가!) 신청을 해야 합니다.

귀찮습니다.

웹 크롤러 기반의 구현

포스팅의 처음에 소개한 사이트를 이용해서 크롤링을 해봅니다. 다행히 이 사이트는 검색에 GET방식을 사용하고 있어서 주소창에 값만 바꿔주면 원하는 검색 페이지를 가져올 수 있습니다.

//dict.naver.com/name-to-roman/translation/?query=배수지

이런 식입니다. 이름 값만 바꾸면 다른 이름으로도 검색이 가능합니다.
크롤링 데이터를 쉽게 가져오기 위해서 BeautifulSoap 라이브러리를 사용하겠습니다. 혹 설치가 안되어 있다면

$ pip install bs4

selenium은 무거우니까 urllib을 이용해서 구현해 보겠습니다.

import urllib from urllib import parse from urllib.request import Request, urlopen from bs4 import BeautifulSoup naver_url = '//dict.naver.com/name-to-roman/translation/?query=' name_url = naver_url + urllib.parse.quote("배수지") req = Request(name_url) res = urlopen(req) html = res.read().decode('utf-8') bs = BeautifulSoup(html, 'html.parser') name_tags = bs.select('#container > div > table > tbody > tr > td > a') names = [name_tag.text for name_tag in name_tags] print(names)

결과물

['Bae Sooji', 'Bae Suji', 'Bae Soojee', 'Bae Sujee']

API를 이용한 결과물과 동일하게 나왔습니다.

웹크롤링을 이용하면 API 키 발급도 안해도 되고 25,000글자 이상도 변환할 수 있습니다. 하지만 API는 이름 관련 데이터만 가져오는 반면, 웹크롤링은 웹페이지를 보여주기 위한 필요 없는 데이터까지 (게다가 양도 몇배나 많음!) 가져옵니다. 가능하다면 API 사용신청을 해서 한도 상향 신청을 해서 사용하는 것이 좋은 방법이겠지요.

Toplist

최신 우편물

태그