(개인프로젝트) KeyUI
프로젝트 요약
개인 프로젝트로, 웹 크롤링을 응용한 데이터로 타자검정을 수행할 수 있는 파이썬 GUI 프로그램입니다.
기획 의도
새 키보드를 사게 되어 타건감에 익숙해지려고 타자검정 프로그램을 찾게 되었는데, 생각보다 정보가 별로 없고 설치하기 무거운 프로그램들이나 웹으로 구현한 간단한 타자검정기밖에 없었습니다. 설치하기 무거운 프로그램은 대부분 새로운 계정 등을 요구했고, 간단한 타자검정기는 제가 수행하고싶은 문장들을 수행하는 기능이 없었고 단지 랜덤으로 불러오는 기능밖에 없었습니다.
이러한 이유로 제가 직접 만들어보면 어떨까라는 생각이 들어 만들어보게 되었습니다. 당시 알고리즘, 데이터 처리 관련 공부 등의 이유로 주로 사용했던 언어가 파이썬인데, 그래서 ‘굳이 파이썬으로 GUI 프로그래밍을 해보면 어떨까?’하는 생각이 들었습니다.
처음으로 생각이 난 것은 뉴스를 크롤링 해오는 것으로, 뉴스를 크롤링 해온다면 사용자는 타자검정을 수행하면서 최신 뉴스를 읽을 수 있으며, 보다 실무적인 문장을 작성할 수 있을 것이라는 기대가 있었습니다. 뉴스 기사에는 괄호, 따옴표 등 다양한 기호들이 많아 이것에 더욱 익숙해질 것이라는 생각이었습니다. 비슷한 맥락으로 최신 곡들의 가사를 크롤링해오는 기능도 추가했습니다.
기능
네이버뉴스와 멜론에서 데이터를 크롤링해옵니다. 네이버 뉴스에서는 각 신문들의 최신 기사를 가져오고, 멜론에서는 현재 top100인 곡과 가사를 불러옵니다. 불러온 기사 뉴스나 노래 제목을 선택해 사용자는 수행할 문장을 선택할 수 있고, 문장 수를 선택해 타자검정을 수행합니다. 검정을 마치고 나면 로우데이터에 검정시간, 평균타수, 정확도 데이터를 저장해 ‘통계’ 사용자의 검정 결과를 시간별 그래프로 알아볼 수 있게 합니다. 물론 사용자 지정 문장도 ‘internal’에 저장해 불러와 수행할 수 있습니다.
구현 과정
우선 GUI구현은 PyQt5을 이용해 구현했습니다. PyQt5는 정보가 별로 없지만 레퍼런스를 대부분 공유하는 c++기반 Qt5의 경우 정보가 많으므로 많은 도움이 되었습니다. GUI프로그래밍이 처음이라 막연한 두려움이 있었는데, Qt5의 경우 구조가 웹프로그래밍이나 앱프로그래밍과 별반 다르지 않았습니다. 특히 Qt5의 스타일시트 QSS는 CSS와 상당히 유사해서 디자인하기 편리했습니다.
웹크롤링은 파이썬의 모듈 BS4를 이용했습니다. 다른 프로그램들과의 차별점인 웹크롤링에 초점을 맞춰 최대한 일반화된 코드로 작성하려고 노력했습니다. 멜론의 경우 곡의 제목, 가수, 가사가 각각의 가이드라인을 지키고 있어 한가지를 불러오면 나머지를 불러오는데에는 어렵지 않았으나, 네이버뉴스의 경우 신문사마다 다르고, 언어마다 다르고, 심지어는 같은 신문사여도 article을 표현하는 방식이 달라 일반화된 코드를 작성하는데 시간이 꽤 걸렸습니다. 이 과정에서 여러 정규화 코드를 이용해 일반화했지만, 아직 몇몇 특정 기사에 대해 버그가 발생해 수정이 필요한 상황입니다.
통계 탭은 Matplotlib을 이용했습니다. 학교 수업에서 자주 다루었던 Matlab의 Plot이나, R의 시각화 툴과 크게 다르지 않아 익숙하게 사용할 수 있었고, 디자인하는데에도 큰 어려움이 없었습니다. 다만 exe파일로 빌드하는 과정에서 Matplotlib은 버전별로 많이 불안정한 경우가 있어 이 과정에서 시간이 오래 걸렸습니다.
프로그램
메인 페이지
가사 페이지
통계 페이지