안녕하세요.
오늘은 과거 진행했던 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% 이상)을 이끌어냄.
'Programming > Python' 카테고리의 다른 글
[파이썬] 유튜브 댓글 크롤링 (BTS MV) (3) | 2021.07.19 |
---|---|
파이썬 한글 자음 모음 조합하기 (NLP) (4) | 2021.07.17 |
파이썬 유튜브 크롤링 셀레니움 2편 (2) | 2021.06.22 |
파이썬 유튜브 크롤링 셀레니움 1편 (5) | 2021.06.14 |
파이썬 collections 컨테이너형 자료 모듈 (0) | 2021.06.13 |
댓글