구글은 돈이 있으니 전 세계의 책을 스캔하는 것도 가능한 일이었으나, 일개 개인이 우리나라의 책을 모두 스캔할 수는 없으니까요.
구글의 Ngram Viewer가 지원하는 언어는 [English, Chinese, French, German, Hebrew, Italian, Russian, Spanish]로 총 8개입니다.
안타깝게도 한글은 지원하지 않습니다.
Ngram Viewer를 가지고 여러 가지로 활용할 수 있습니다. 시기별로 그 시대의 사회상을 엿볼 수 있는 매우 유용한 도구라고 생각됩니다.
그런데, 생각해 보니 데이터를 책에서만 뽑을 필요는 없다는 생각이 들었습니다. 이미 디지털화되어 있고 접근이 가능한 '신문 기사'가 있었습니다.
그래서, 웹 사이트에서 접근 가능한 신문 기사들을 분석해서 단어들을 파싱하고, 이 단어를 세서 보여주는 프로그램을 만들었습니다. C#으로 만들고 데이터베이스는 PostgreSQL을 사용해서 만들었습니다.
이렇게 만들고 몇몇 지인에게만 이 프로그램을 소개한 후, 그다음에 데이터를 더 추가하지도 않고 유지보수도 하지 않게 되면서, 이 프로그램에 대해서는 잊어버리고 있었습니다. 직장에 매인 몸이라서 바쁜 날들의 연속이었습니다.
그러다, 2024년이 되면서, 오랜만에 마음에 드는 언어인 Rust를 접하게 되면서, 그동안 만들고 싶었던 프로그램들을 생각하던 중, 아직도 우리나라에 구글의 Ngram Viewer와 같은 서비스가 없다는 것을 알게 되었습니다.
왜 아직도 없을까요? 인문학적이나 사회학적으로 유용한 도구일 텐데 말이죠.
제가 못 찾은 것일 수도 있습니다.
여튼, 이 Ngram Viewer 같은 서비스를 하는 웹 사이트를 만들기로 마음먹었습니다. 예전에는 로컬에서 프로그램으로만 돌아가서 많은 이들이 사용할 수 없었는데, 웹 사이트로 만들면 누구나 사용할 수 있을 것이니 좋겠지요.
그렇게 해서, 휴가, 설 연휴, 토요일/일요일 등 제가 가용한 짜투리 시간을 모두 활용해서 장장 5개월 만에 사이트를 첫 오픈하게 되었습니다(1.0, 2025년 4월 1일). 1.0은 1997년부터의 신문 기사에서 명사·부사·감탄사 같은 단어를 Kiwi 형태소 분석기로 뽑아 세는 방식이었습니다. 1.0은 2026년 9월까지 운영했고, 2.0으로 바뀌면서 내렸습니다.
KWord 2.0 (2026년 10월)
1.0을 운영하면서 아쉬운 점이 몇 가지 있었습니다. 띄어 쓴 어구("멋진 사람", "비상 계엄")는 찾을 수가 없었고, 형용사나 동사는 아예 셀 수가 없었고, 남의 형태소 분석기를 쓰다 보니 분석 결과가 왜 그렇게 나오는지 손을 댈 수가 없었습니다. 그래서 바닥부터 다시 만들었습니다.
형태소 분석기를 직접 만들었습니다. 이름은 madi(마디)입니다. Rust로 짰고, 국립국어원 모두의 말뭉치(2018년판) 품사 체계를 따릅니다. 사전과 n-gram 언어 모델에 신경망 언어 모델을 함께 쓰며, 신문 기사 정답 문장 기준 정확도는 약 97%입니다.
모든 품사를 셉니다. 명사뿐 아니라 동사·형용사·부사·조사·어미까지, 기사에 나온 형태소를 하나도 버리지 않고 셉니다.
어구도 찾을 수 있습니다. 형태소를 다섯 개까지 이어 붙인 어구(1~5-gram)를 셉니다. "거리 두기", "사회적 거리 두기", "비상 계엄"처럼 띄어 쓴 표현도 검색됩니다.
기간을 1990년 1월까지 늘렸습니다. 조선일보(1990~2015)와 동아일보(1996~2019)의 기사, 그리고 2020년부터는 네이버 뉴스의 지면 기사를 모았습니다. 모두 410만 건이 넘습니다.
매주 갱신합니다. 2026년 10월부터는 매일 저녁 그 전날 기사를 받아 분석해 두고, 매주 월요일에 지난 한 주 치를 서버에 반영합니다.
통계 페이지를 새로 만들었습니다. 연도별 품사 비율, 음절 수, 새로 등장하거나 사라진 낱말 등을 볼 수 있습니다.
한글, 영어, 숫자가 섞인 단어 모두 가능합니다. "바다", "삼성SDS", "LG", "5G" 모두 됩니다.
띄어 쓴 어구도 됩니다. 단, 형태소로 나눴을 때 다섯 개까지입니다. 예를 들어 "사회적 거리 두기"는 사회/NNG 적/XSN 거리/NNG 두/VV 기/ETN로 다섯 개입니다.
품사 제한이 없습니다. "먹다", "예쁘다", "엄청", "에서"도 찾을 수 있습니다. 동사·형용사는 기본형("먹다")으로 넣으면 됩니다.
검색어 아래에 서버가 실제로 무엇을 찾았는지 한 줄씩 보여 줍니다. 예를 들어 "말"을 넣으면 말(일반명사) − 말하다(동사)처럼 나옵니다.
빈도수 단위는 ppm입니다. 그 달(또는 그 날)의 같은 길이 n-gram 전체에서 그 단어가 차지하는 비율에 백만을 곱한 수치입니다. 예를 들어, 2000년 1월에 수집된 형태소의 모든 발생 횟수가 2,000만 번이고, "이순신"이 200번 나왔다면 200 × 100만 / 2,000만 = 10 ppm입니다.
빈도수 결과에 대한 주의 사항
여기에 나온 빈도율은 그 시기의 전체 사회상을 반영하지는 않습니다. 신문 기사의 단어 수를 센 것임을 인지해야 합니다. 책에서 나온 단어 수도 아니고, 그때 당시의 실제 모든 미디어에 나온 단어 수를 센 것이 아닙니다.
신문 기사의 특성상 특정한 단어가 많이 나오곤 합니다. 예를 들어 '기자'라는 단어는 많이 나옵니다. 신문 기사가 끝날 때마다 어느 기자가 작성한 지 적기 때문에 그렇습니다. (2.0에서는 바이라인·사진 설명 같은 상투적인 줄을 상당 부분 걸러 냅니다.)
일부러 편향성을 주입하거나, 데이터를 개조하지는 않았지만, 신문사마다의 편향성이 있을 수 있기에, 이 데이터를 '공정하고' '객관적인' 데이터라고 보증할 수 없습니다. 다시 얘기하지만, 신문사의 기사에 나온 단어를 센 것임을 감안해야 합니다.
시기에 따라 원문이 다릅니다. 아래 표처럼 1990~1995년은 조선일보만, 1996~2015년은 조선일보와 동아일보, 2016~2019년은 동아일보만, 2020년부터는 네이버 뉴스의 종합일간지 10개사, 2025년부터는 경제지·IT지 7개사가 더해진 17개사입니다. 원문이 바뀌는 해(1996, 2016, 2020, 그리고 경제지·IT지가 더해진 2025)에는 단어의 빈도율이 실제 쓰임과 관계없이 뛰거나 떨어질 수 있습니다.