About KWord
한국어 단어에 대한 빈도수를 알려주는 사이트를 기획한 것은 2015년부터였습니다.
구글의 Ngram Viewer(https://books.google.com/ngrams/)를 처음 접하고 나서, 우리나라 단어는 지원되지 않는 것을 보고 만들기로 마음먹었습니다.
그런데, 문제는 데이터를 확보하는 것이었습니다.
구글은 돈이 있으니 전 세계의 책을 스캔하는 것도 가능한 일이었으나, 일개 개인이 우리나라의 책을 모두 스캔할 수는 없으니까요.
구글의 Ngram Viewer가 지원하는 언어는 [English, Chinese, French, German, Hebrew, Italian, Russian, Spanish]로 총 8개입니다.
안타깝게도 한글은 지원하지 않습니다.
Ngram Viewer를 가지고 여러 가지로 활용할 수 있습니다. 시기별로 그 시대의 사회상을 엿볼 수 있는 매우 유용한 도구라고 생각됩니다.
Ngram Viewer로 어떤 것을 알 수 있는지는 아래 자료에서 확인할 수 있습니다.
그런데, 생각해 보니 데이터를 책에서만 뽑을 필요는 없다는 생각이 들었습니다. 이미 디지털화되어 있고 접근이 가능한 '신문 기사'가 있었습니다.
그래서, 웹 사이트에서 접근 가능한 신문 기사들을 분석해서 단어들을 파싱하고, 이 단어를 세서 보여주는 프로그램을 만들었습니다. C#으로 만들고 데이터베이스는 PostgreSQL을 사용해서 만들었습니다.
이렇게 만들고 몇몇 지인에게만 이 프로그램을 소개한 후, 그다음에 데이터를 더 추가하지도 않고 유지보수도 하지 않게 되면서, 이 프로그램에 대해서는 잊어버리고 있었습니다. 직장에 매인 몸이라서 바쁜 날들의 연속이었습니다.
그러다, 2024년이 되면서, 오랜만에 마음에 드는 언어인 Rust를 접하게 되면서, 그동안 만들고 싶었던 프로그램들을 생각하던 중, 아직도 우리나라에 구글의 Ngram Viewer와 같은 서비스가 없다는 것을 알게 되었습니다.
왜 아직도 없을까요? 인문학적이나 사회학적으로 유용한 도구일 텐데 말이죠.
제가 못 찾은 것일 수도 있습니다.
여튼, 이 Ngram Viewer 같은 서비스를 하는 웹 사이트를 만들기로 마음먹었습니다. 예전에는 로컬에서 프로그램으로만 돌아가서 많은 이들이 사용할 수 없었는데, 웹 사이트로 만들면 누구나 사용할 수 있을 것이니 좋겠지요.
대략 아래와 같은 구조로 만들기로 했습니다.
- 데이터는 우리나라 신문 기사로. 우선은 한 개 신문사를 대상으로 하고, 시간이 되면 점차 확대하기로.
- 시기는 1997년 1월부터 현재까지. (매달 갱신)
- 대상은
'명사/대명사'로 된 한글 단어 -> 일반명사/고유명사/대명사/복합명사/부사/감탄사/영어
- 시간 간격은
한 달 단위로 한 달 및 매일 단위로 단어 카운트
처음에는 명사와 대명사만을 Okt를 이용해서 추출했으나, '엄청' '대박' 같은 부사나 감탄사의 사용 추이를 보는 것도 재미있을 것 같고,
무엇보다 '한글운동'과 같은 복합명사에 대해서도 빈도율을 뽑아내기 위해서, 대상되는 토큰의 범위를 넓게 했습니다.
이를 위해 형태소 분석기를 Kiwi를 사용했고, Kiwi에는 복합 명사를 추출하는 기능이 기본으로 제공되지 않아서 약간의 트릭을 사용해서 추출했습니다.
또한, 단어의 범위를 넓히기 위해서 영어 알파벳이 들어간 단어도 포함했습니다. 즉, 'LG', '삼성SDS', 'SK' 등등도 검색됩니다.
시간 간격도 처음에는 월 단위 빈도율 집계만을 생각했으나, 일(Day) 단위의 빈도율을 보는 것도 괜찮을 듯해서 넣었습니다.
일 단위 검색은 2023.1.1일부터의 데이터만 가능합니다.
또한, 일 단위 검색을 한 후, 그래프에서 해당 일의 포인트를 더블클릭하면, 해당 단어가 나온 기사들이 어떤 게 있는지 리스트로 보여주는 기능도 추가했습니다.
기술적인 구조는,
- 서버는 AWS Lightsail 인스턴스 사용: Ubuntu 2GB RAM, 60GB SSD
- 웹 서버는 Rust로 된 Axum 사용 → 메모리를 적게 사용하고 반응 속도가 매우 좋음
- 데이터베이스는 사용하지 않고, 자체로 만든 파일 기반의 데이터 구조 사용 → 매우 빠름
- 프론트엔드 단은 바닐라 JS로 만듦: HTML + CSS + 자바스크립트
이렇게 해서, 휴가, 설 연휴, 토요일/일요일 등 제가 가용한 짜투리 시간을 모두 활용해서 장장 5개월 만에 사이트를 첫 오픈하게 되었습니다.
* 사이트 오픈: 2025년 4월 1일
사용할 때 유의사항
- 한글 및 영어 단어 사용 가능합니다. 즉,
- "바다" "삼성SDS" "LG" 가능합니다.
- 글자 사이에 공백이 들어가 있는 글자는 안 됩니다. 순수하게 공백이 없는 단어라야 합니다. 즉, "스타 약국", "멋진 사람" 등등은 안 됩니다.
- 명사/대명사/부사/감탄사/복합명사 가능합니다. 형용사/용언/수사/조사/어미는 안됩니다.
- 빈도수 단위는 ppm입니다. 즉, 해당 월에 그 단어가 몇 %로 나왔는지에 대해 백만을 곱한 수치입니다. 예를 들어, 2000년 1월에 수집된 단어들의 모든 발생 횟수가 200만 번이고, "이순신"이라는 단어가 20번 나왔다면, ppm으로 환산하면 "10"이 됩니다. 계산식 = 20번 x 100만 / 200만 = 10
빈도수 결과에 대한 주의 사항
- 여기에 나온 빈도율은 그 시기의 전체 사회상을 반영하지는 않습니다. 신문 기사의 단어 수를 센 것임을 인지해야 합니다. 책에서 나온 단어 수도 아니고, 그때 당시의 실제 모든 미디어에 나온 단어 수를 센 것이 아닙니다.
- 신문 기사의 특성상 특정한 단어가 많이 나오곤 합니다. 예를 들어 '기자'라는 단어는 많이 나옵니다. 신문 기사가 끝날 때마다 어느 기자가 작성한 지 적기 때문에 그렇습니다.
- 일부러 편향성을 주입하거나, 데이터를 개조하지는 않았지만, 신문사마다의 편향성이 있을 수 있기에, 이 데이터를 '공정하고' '객관적인' 데이터라고 보증할 수 없습니다. 다시 얘기하지만, 신문사의 기사에 나온 단어를 센 것임을 감안해야 합니다.
- 현재 몇 개의 신문사 기사만을 대상으로 단어를 뽑았는데, 추가로 기사들을 더할 예정입니다. 그렇게 되면 빈도율에 영향을 미칠 수 있습니다. 즉, 현재 보는 빈도율이 추가된 기사들에 의해 그 빈도율이 변경될 수 있습니다.
- 2025년 1월 1일부터는 우리나라 10개 일간지 기사를 대상으로 하고 있습니다. 이 신문사의 매일마다의 기사에서 단어를 추출합니다.
- 국민일보
- 동아일보
- 문화일보
- 세계일보
- 조선일보
- 중앙일보
- 한겨레신문
- 경향신문
- 서울신문
- 한국일보
사이트 이용 방법
검색할 단어는 최대 16개까지 입력할 수 있습니다. 단어는 콤마(,)로 구분합니다.
- 예를 들어, "이순신, 세종대왕, 김구"라고 입력하면, 이 세 단어에 대한 빈도율을 보여줍니다.
- 단어는 최대 16개까지 입력할 수 있습니다.
- 단어는 한글 및 영어 가능합니다. 한자는 안됩니다.
- 영어의 경우 대소문자 구분합니다. 따라서 단어는 대소문자를 구분하지 않습니다. 즉, "ABC"와 "abc"를 다르게 인식합니다.
- 단어는 공백이 들어가면 안 됩니다. 즉, "스타 약국", "멋진 사람" 등등은 안됩니다.
- '일(Day)'를 체크하면 일 단위의 빈도율을 볼 수 있습니다. 2023.1.1일부터의 데이터만 볼 수 있습니다.
- 일 단위 검색을 한 후, 그래프에서 해당 일의 포인트를 더블클릭하면, 해당 단어가 나온 기사들 리스트를 보여주고, 리스트를 클릭하면 해당 기사 원문을 볼 수 있습니다.
복합명사를 지원합니다.
- 예를 들어, "한글학회장님과 한글운동 관련 단체들은"이라는 문장이 있을 때, '한글학회장님' '한글운동'을 하나의 토큰으로 인식합니다.
기간을 지정해서 검색할 수 있습니다
검색할 기간은 월 단위이고, 시작(YYYYMM)과 종료(YYYYMM)로 지정합니다.
시작과 종료는 199701 ~ 현재까지 가능합니다.
시작과 종료는 반드시 YYYYMM 형식으로 입력해야 합니다. 즉, 2024년 1월은 202401로 입력해야 합니다.
시작과 종료는 반드시 시작이 종료보다 작아야 합니다. 즉, 202401 ~ 202402는 가능하지만, 202402 ~ 202401은 불가능합니다.
기간은 직접 입력할 수도 있고, 박스에 있는 위/아래 버튼을 눌러 기간을 조정할 수 있습니다.
기간을 지정하지 않으면, 기본적으로 199701 ~ 현재까지의 기간으로 검색합니다.
기간을 조정하면 그래프의 기간이 다이나믹하게 자동 조정됩니다.
검색 결과는 그래프로 보여줍니다.
그래프는 x축은 시간(년/월), y축은 빈도율(ppm)입니다.
그래프는 단어별로 다른 색으로 구분됩니다.
그래프의 범위는 자동으로 조정됩니다. 즉, 검색한 단어에 따라 그래프의 범위가 달라집니다.
시작과 종료월을 조정하면, 그래프의 범위가 다이나믹하게 자동 조정됩니다.
라인 위에 있는 점에 마우스를 가져가면, 해당 위치에서의 빈도율 값이 보입니다.
빈도율의 단위는 백만 퍼센트입니다.
Raw Data 보기
만약, 그래프에 그려지는 Raw 데이터가 필요하면, 화면의 오른편 위쪽에 있는 메뉴 버튼
를 클릭하고, 'Raw Data'를 클릭하면 됩니다.
그러면, 새 탭 페이지에 JSON 형태로 된 데이터가 보일 것입니다.
질문 혹은 하실 말씀이 있으면,
p14jeffwest@gmail.com로 해주시면됩니다.