본문 바로가기
Programming/Python

파이썬 영어 한글 발음으로 변환하기 (콩글리시)

by 코딩하는 금융인 2021. 7. 5.

안녕하세요.

오늘은 과거 진행했던 NLP 관련 작업에서 유용하게 사용했던 파이썬 코드에 대해 리뷰해보겠습니다.

 

프로젝트 : 영어로 된 특정 명사에 대한 다양한 검색어 찾기

- Sample Data : 도시 이름 (한국어 및 영어)

kor_city_name eng_city_name
빅토리아 Victoria
프리타운 Freetown
포르보 Porvoo
캐스트리스 Castless
상투메 프린시페 Sao Tome and Principe
포트오브스페인 Port of Spain
오울루 Oulu
아피아 Apia
말레 Male
난탈리 Naantali
로조 Roseau
반다르스리브가완 Bandar Seri Begawan
포르토노보 Porto-Novo
킹스타운 Kingstown
프리토리아 Pretoria

※ 해당 샘플 데이터는 임의로 만든 것으로, 연습용으로 사용하시면 됩니다. 

 

다양한 검색어 예시 : 한국어 뜻, 줄임말, 외래어 사전 기준 바른 · 잘못된 표기, 동의어 · 유의어

 

위 예시들은 네이버 사전 api를 통해서 쉽게 찾을 수 있고 검색어에 있어 저는 재미를 주고 싶어 영어 단어를 한글 발음으로 변환한 콩글리시 같은 검색 데이터를 수집했습니다.


제가 소개할 방법은 2가지로, 파이썬 모듈 hangulize와 영어 한글 변환기 웹 크롤링 방법입니다.

 

1. 한글 변환기 웹 크롤링

영어 한글 표기 변환기 : https://transliterator.herokuapp.com/

해당 웹사이트에 임의로 영어 단어를 검색하고 Network를 봤을 때,

json 형식으로 input : "Victoria", output : "빅토리아" 확인할 수 있음.

 

이를 통해, input 값에 영어 단어를 넣어주고 url을 requests의 post하면 영어를 한글로 변환한 값 output을 받을 수 있음을 알 수 있음.

 

# Python Code

import requests
import pandas as pd
from tqdm import tqdm

url = "https://transliterator.herokuapp.com/"
df = pd.read_excel('C:/Users/코딩하는 금융인/Desktop/english_list.xlsx')
sess = requests.Session()
data_list = []

for idx, row in tqdm(df.iterrows()):
    cd_idx = idx+1
    kor_city_name = row['kor_city_name']
    eng_city_name = row['eng_city_name']
    payload = {'input': eng_city_name}
    res = sess.post(url, data = payload)
    # 띄어쓰기 포함될 경우, ?를 뱉어냄 : '?' -> ' ' 바꿔주기
    konglish = res.json()['output'].replace('?',' ')
    data = {'cd_idx':cd_idx, 'kor_city_name':kor_city_name, 'eng_city_name':eng_city_name, 'konglish' :konglish}
    data_list.append(data)

result_df = pd.DataFrame(data_list, columns=['cd_idx','kor_city_name','eng_city_name','konglish'])
result_df.to_excel(f'C:/Users/코딩하는 금융인/Desktop/data/result_data.xlsx', index=False)

위의 아이디어를 바탕으로 request 방식의 크롤링 코드 완성

중간에 replace 이유는 주석에서도 나와있지만, 해당 변환기 사이트에서 띄어쓰기를 입력할 때 띄어쓰기를 물음표로 인식하는 오류가 있어 replace로 변형

 

# Result Data

cd_idx kor_city_name eng_city_name konglish
1 빅토리아 Victoria 빅토리아
2 프리타운 Freetown 프리타운
3 포르보 Porvoo 포부
4 캐스트리스 Castless 캐슬리스
5 상투메 프린시페 Sao Tome and Principe 사웃 토맨드 프린치피
6 포트오브스페인 Port of Spain 포트 오브 스페인
7 오울루 Oulu 오울루
8 아피아 Apia 아피아
9 말레 Male 메일
10 난탈리 Naantali 안탈리
11 로조 Roseau 로조
12 반다르스리브가완 Bandar Seri Begawan 반다르 세리 베가완
13 포르토노보 Porto-Novo 포르토노보
14 킹스타운 Kingstown 킹스타운
15 프리토리아 Pretoria 프레토리아

15개의 데이터 중 8개에서 한국어 명사와 콩글리시가 차이가 있음을 알 수 있음

콩글리시로 검색했을 때, 샘플 데이터 중 50% 이상은 검색이 안될 수도 있음을 의미


반응형

2. 파이썬 hangulize

외래어를 한글로 변환하는 라이브러리 : https://github.com/sublee/hangulize

변환 가능한 언어들을 보면 알 수 있듯이, 해당 모듈은 외래어를 자동으로 한글 변환하는 데 초점을 맞춰 변환 가능 언어들 중 영어가 없음을 확인.

 

그래서 영어와 가장 비슷한 웨일스어(cym)를 활용하여 hangulize 실행

 

# Python Code

from hangulize import hangulize
import pandas as pd

df = pd.read_excel('C:/Users/코딩하는 금융인/Desktop/english_list.xlsx')
city_name = df.loc[:,'english_name']
data_list = []

for i in city_name:
    city = i
    # 해당 영어발음을 그대로 발음
    city_konglish = hangulize(i,'cym')
    data = {'city':city, 'city_konglish':city_konglish}
    data_list.append(data)

result_df = pd.DataFrame(data_list, columns=['city','city_konglish'])
result_df.to_excel(f'C:/Users/코딩하는 금융인/Desktop/City_konglish.xlsx', index=False)

 

# Result Data

cd_idx kor_city_name eng_city_name konglish
1 빅토리아 Victoria 빅토리아
2 프리타운 Freetown 브레에토운
3 포르보 Porvoo 포르보오
4 캐스트리스 Castless 카스틀레스
5 상투메 프린시페 Sao Tome and Principe 사오 토메 안드 프링키페
6 포트오브스페인 Port of Spain 포르트 오브 스파인
7 오울루 Oulu 오일리
8 아피아 Apia 아피아
9 말레 Male 말레
10 난탈리 Naantali 나안탈리
11 로조 Roseau 로세아이
12 반다르스리브가완 Bandar Seri Begawan 반다르 세리 베가완
13 포르토노보 Porto-Novo 포르토노보
14 킹스타운 Kingstown 킹스토운
15 프리토리아 Pretoria 프레토리아

15개의 데이터 중 11개에서 한국어 명사와 콩글리시가 차이가 있음을 알 수 있음

콩글리시로 검색했을 때, 샘플 데이터 중 70% 이상은 검색이 안될 수도 있음을 의미


마무리 · 느낀점

코드 작성면과 다양한 검색어 제공면에서는 hangulize 모듈 방식 선호

그러나, 사람들이 착각하여 사용할 수 있는 검색어 데이터라고는 확신할 수 없음.

(영어가 아닌 웨일스어에 대한 한글 표기 이유)

 

첫번째 방법은 기본적으로 웹크롤링 방식으로 비교적 긴 시간이 소요된다는 단점을 갖고 있지만, 사람들이 착각해서 사용할 법한 재밋는 검색어로 생각

항상 어떤 방법을 채택하거나 적용하면, 사후 결과 데이터를 분석하여 반응을 확인해야 함. 

 

결론적으로, 첫번째 방법을 활용하여 3만개 이상의 한글 표기 데이터를 뽑아내었고 사용자들로부터 긍정적인 반응(검색률 5% 이상)을 이끌어냄.

 

반응형

댓글