[Python] KoNLPy 자연어 형태소 분석

2025. 12. 29. 14:38·dev/backend
* Python: v3.13 
* 개발 환경 OS: Windows 11 Pro
* 운영 환경 OS: CentOS 7

 

1. 서론

회사 백오피스 서비스 개발에서 뉴스기사 크롤링 모듈 개발을 담당 하였다. 이와 연관지어 대시보드 페이지에 수집한 기사들의 키워드를 워드클라우드로 표출해야 하는 요구사항이 있다. 요구사항을 충족하기 위해선 뉴스 기사의 단어 빈도수를 분석하고 빈도수 기준 워드클라우드를 표출해야 한다. 자연어 문장에서 단어를 추출하는 로직을 직접 구현하는 것은 생각보다 복잡한 일이다. 한국어의 모든 조사, 부사 등을 갖고 있어야 하고 문장의 모든 배치 케이스를 적용해야 한다. 하지만 Python 에는 이를 직접 구현하지 않고 단어만 이쁘게 추출해주는 패키지 KoNLPy 가 존재한다. 이에 대해 기술한 내용이다.

 

2. 본론

KoNLPy는 한국어 정보처리를 위한 파이썬 패키지이다. 해당 패키지를 통해 한국어 자연어 문장에서 문장 또는 단어를 추출할 수 있다.

다음은 공식문서의 예시이다.

>>> from konlpy.tag import Kkma
>>> from konlpy.utils import pprint
>>> kkma = Kkma()
>>> pprint(kkma.sentences(u'네, 안녕하세요. 반갑습니다.'))
[네, 안녕하세요..,
 반갑습니다.]
>>> pprint(kkma.nouns(u'질문이나 건의사항은 깃헙 이슈 트래커에 남겨주세요.'))
[질문,
 건의,
 건의사항,
 사항,
 깃헙,
 이슈,
 트래커]
>>> pprint(kkma.pos(u'오류보고는 실행환경, 에러메세지와함께 설명을 최대한상세히!^^'))
[(오류, NNG),
 (보고, NNG),
 (는, JX),
 (실행, NNG),
 (환경, NNG),
 (,, SP),
 (에러, NNG),
 (메세지, NNG),
 (와, JKM),
 (함께, MAG),
 (설명, NNG),
 (을, JKO),
 (최대한, NNG),
 (상세히, MAG),
 (!, SF),
 (^^, EMO)]

 

2.1. 패키지 설치

필자의 경우 개발환경 OS 는 Windows 11 pro, 운영환경 OS 는 CentOS 7 이다.

공식문서에 기재되어 있다시피, Windows 환경에서는 로컬에 JDK 1.7 이상이 설치되어 있어야 한다. KoNLPy는 독자적인 형태소 분석 알고리즘을 파이썬으로 직접 구현한 것이 아니다. 이미 Java 로 아주 잘 만들어진 기존의 형태소 분석기들을 파이썬에서 편하게 쓸 수 있도록 묶어 놓은 Wrapper 라이브러리 이다. 즉, KoNLPy 를 구동시키려면 JVM 이 있어야 한다.

 

2.1.1. JDK 설치 및 환경변수 설정

필자의 경우 Oracle jdk 17 을 설치하였다.

https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html

 

Java Archive Downloads - Java SE 17.0.12 and earlier

WARNING: Older versions of the JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production. For production use Oracle recommends downloading the late

www.oracle.com

 

아마 JDK 를 직접 설치 해야 하는 경우는 Windows 환경에서만 적용되기 때문에, 밑에 Windows x64 Installer 를 다운 받는다.

 

 해당 exe 파일을 실행시켜 jdk 를 설치한다. 설치 중 설치 경로를 변경 할 수 있지만 보통 "C:\Program Files\" 에 설치한다.

 

 

이후 jdk 환경 변수를 지정해야 한다. windows 검색 > 시스템 환경 변수 편집 을 연다.

 

시스템 속성 > 고급 탭 > 하단 환경변수 버튼 클릭

 

시스템 변수 새로 만들기

 

JAVA_HOME 변수에 변수 값은 실제 다운받은 jdk 경로를 기입해야 한다.

 

이후 시스템 변수 중 Path 를 찾아 편집 버튼을 클릭

 

아래 두 경로를 추가

 

이후 제대로 적용 됐는지 확인을 위해 cmd 에서 java version 을 찍어본다. 정상적으로 출력되면 문제없다.

 

만약 Python 프로젝트 실행시 다음과 같은 에러 문구가 발생하면 java 환경변수를 잘못 지정했거나, 적용이 안된것이다.

jpype._jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.

 

환경 변수 지정 후 IDE 를 껐다 키거나, 시스템 재부팅 하여 변경사항을 적용해야 정상적으로 작동한다.

 

2.1.2. jpype 설치

앞서 기술했던 것처럼 KoNLPy 는 JVM 을 기반으로 구동된다. 그렇기 때문에 Python 에서 JVM 이 동작할 수 있게끔 해야 한다.

이를 가능하게 해주는 것이 jpype 이다.

 

Jpype는 Python 프로세스 내에 JVM(Java Virtual Machine)을 임베딩하여 파이썬이 자바 라이브러리를 직접 호출할 수 있게 해주는 Bridge 역할의 라이브러리이다. 실제로 KoNLPy 에서도 설치를 권장하고 있다.

 

명령어를 통해 JPype 를 설치 할 수도 있으나, 간혹 Windows 환경에서 실패하는 경우가 있다.

pip install JPype1

 

실패하는 경우 직접 릴리즈 패키징 파일을 github 에서 다운받을 수도 있다.

 

https://github.com/cgohlke/win_arm64-wheels/releases/tag/v2025.7.7

 

Release v2025.7.7 · cgohlke/win_arm64-wheels

Experimental Wheels for Python for Windows on ARM64 Notes 140 packages for Python 3.13 for Windows on ARM64 Updates the v2025.3.31 release Wheels Binary wheels for the following packages for Pyth...

github.com

 

필자의 경우 Python v3.13 을 사용하기 때문에, jpype1-1.5.2-cp313-cp313-win_amd64 을 다운받았다.

 

로컬에 해당 파일을 직접 다운받았다고 하면 꼭 pip 로 설치과정이 필요하다.

pip install jpype1-1.5.2-cp313-cp313-win_amd64.whl

 

이제 KoNLPy 를 사용할 사전 준비가 끝났다.

 

2.2. 모듈 선택 

일전에 기술했다시피, KoNLPy 은 여러 형태소 분석기(Hannanum, Kkma, Komoran, Mecab, Okt) 들을 한데 모아둔 패키지이다.

공식문서를 보면 각 모듈별 처리 성능을 기재해 두었고, 본인에게 필요한 모듈을 인스턴스하여 사용하면 된다.

 

속도로만 봤을 때, Mecab 이 좀 더 성능이 좋아보이긴 하나, 자연어에 대한 형태소 분석 정확도에선 Okt 가 더 좋아보였다.

 

이러한 이유로 필자는 Okt 를 사용하였다.

 

2.3. 사용 방법

KoNLPy 공문서에서 친절하게 워드 클라우드에 대한 예제도 있어 어렵지 않게 구현이 가능하다.

 

https://konlpy.org/ko/latest/examples/wordcloud/

 

예제에선 Hannanum 을 사용하였으나, 필자의 Okt 로 인스턴스를 생성하면 다음과 같다.

# 인스턴스 생성
okt = Okt()

 

명사를 추출하고 싶을 때 nouns 함수를 호출하면 된다.

# 명사만 추출
noun_results = okt.nouns(contents)

 

명사만 추출함에도 불구하고 길이 1짜리 조사들이나, 불용 목록으로 기재되지 않아 걸러지지 않는 단어들이 있다.

곳
며
점
선
더
층
내
칼
위
명
개

 

이를 위해, 불용어 리스트를 추가하였고 추출한 명사들 중 해당 불용어 리스트에 있는 단어는 제거하는 전처리 과정을 추가했다.

https://gist.github.com/spikeekips/40eea22ef4a89f629abd87eed535ac6a

 

Korean Stopwords

Korean Stopwords. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 # 불용어 및 길이 1개인 조사 제거
final_results = [n for n in noun_results if n not in STOPWORDS and len(n) > 1]

 

결국 단어의 빈도수를 구하고, chart js 의 워드클라우드를 생성하기 위해선 {key: value} 형태로 데이터를 던져줘야 한다.

불용어 처리까지 끝난 단어 리스트에 Pandas 라이브러리를 사용하여 한 단어당 빈도수를 구하고 상위 100개만 추출하였다.

words_frequency = pd.Series(final_results).value_counts().head(100)

 

 

형태소 빈도수 분석 결과 값을 그대로 chart js 워드클라우드를 사용하여 띄우면 다음과 같이 표출된다.

 

3. 참고자료

KoNLPy: https://konlpy.org/ko/latest/

Java 환경변수: https://languagestory.tistory.com/11

불용어 리스트: https://gist.github.com/spikeekips/40eea22ef4a89f629abd87eed535ac6a

chat js 워드클라우드: https://www.sgratzl.com/chartjs-chart-wordcloud/examples/

'dev > backend' 카테고리의 다른 글

[비동기 이벤트 처리] Inotify + RabbitMQ를 활용한 실시간 파일 감지 및 비동기 처리 파이프라인 구축  (0) 2026.01.09
[Python] SQLalchemy ORM  (0) 2025.12.24
[Python] BeautifulSoup 크롤링  (0) 2025.12.24
[Python] pip 패키지 목록 자동생성  (0) 2025.12.24
[Python] windows .venv 세팅  (1) 2025.12.22
'dev/backend' 카테고리의 다른 글
  • [비동기 이벤트 처리] Inotify + RabbitMQ를 활용한 실시간 파일 감지 및 비동기 처리 파이프라인 구축
  • [Python] SQLalchemy ORM
  • [Python] BeautifulSoup 크롤링
  • [Python] pip 패키지 목록 자동생성
hand-mk
hand-mk
  • hand-mk
    보조기억장치
    hand-mk
  • 전체
    오늘
    어제
    • 분류 전체보기 (27) N
      • 회고록 (2) N
      • 자격증 (1)
        • aws (1)
      • dev (24)
        • se (5)
        • algorithm (6)
        • ai (3)
        • scm (1)
        • backend (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    linux
    codesignal
    vmware
    ubuntu
    KoNLPy
    워드클라우드
    python
    폐쇄망
    java
    코테
    vectordb
    ollama
    telegraf
    WSL
    exaone3.5
    docker
    queryDSL
    Cloudflare
    springboot
    leetcode
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hand-mk
[Python] KoNLPy 자연어 형태소 분석
상단으로

티스토리툴바