
KoNLPy (Korean Natural Language Processing in Python) 는 한국어 형태소 분석을 지원하는 파이썬 기반 오픈소스 라이브러리입니다. 다양한 한국어 형태소 분석기들을 Python 환경에서 사용할 수 있도록 래핑한 형태로,
다음과 같은 기능을 제공합니다:
KoNLPy는 여러 형태소 분석기를 지원합니다:
| 분석기 | 특징 |
|---|---|
| Okt | 트위터 형태소 분석기 기반. 속도 빠르고 가볍고, 복합 명사 인식 |
| Komoran | Java 기반, 정밀한 분석, 사전 사용자 정의 가능 |
| Hannanum | 세종 코퍼스 기반, 조사 분석에 강함 |
| Kkma | 정교한 분석 가능, 느리지만 정밀 |
| Mecab | 매우 빠르고 정확한 분석기 (별도 설치 필요) |
이 대회에서는 모델 성능 평가 시 ROUGE 스코어 측정 시 한국어 형태소 단위 토큰화가 필요합니다. 일반적인 띄어쓰기 단위가 아닌 의미 단위(minimal semantic unit) 기준으로 텍스트를 분리해야 정교한 평가가 가능합니다.
따라서 KoNLPy는 다음과 같은 목적에 사용:
KnoNLPy에서 사용하는 JAVA 기반 형태소 분석기 (ex Hannanum, Kkma, Komoran 등)을 사용하기 위한 Java 환경 설정 명령어
java -version
- 결과가 아래처럼 나오면 설치된 것:
openjdk version "11.0.22" 2024-01-16 OpenJDK Runtime Environment ...
- 설치 안 된 경우:
sudo apt update sudo apt install openjdk-11-jdk
설치 명령어 실행 후, 에러 메세지
^Citing for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 358514 (apt)... 2040s현재 다른 프로세스가
apt관련 작업을 점유 중이라는 뜻
➡️ 현재 점유 중인 프로세스 확인
ps -aux | grep apt
root 358514 0.0 0.0 92772 82656 ? S Jul31 1:42 apt install openjdk-11-jdk root 597094 0.0 0.0 3304 656 pts/7 S+ 14:09 0:00 grep apt
해당 프로세스는 7월 31일부터 실행 중인 설치 명령어인데, 아직도 종료되지 않음. (이틀전 실행했던 프로세스가 비정상적으로 멈춘 것)
kill -9 358514
rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock`
dpkg --configure -a
apt update
apt install openjdk-11-jdk
JAVA_HOME 환경변수 설정 (이미 하셨다면 이 단계는 건너뜀)Java를 사용하는 분석기들(Hannanum, Kkma, Komoran) 사용 시 필수 조건
readlink -f $(which java) # 현재 시스템에 설치된 java 실행 파일의 실제 경로 확인
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" #Java 11 경로를 JAVA_HOME으로 지정
export PATH=$JAVA_HOME/bin:$PATH #Java 실행파일이 PATH에 포함되도록 설정
# 위 설정을 ~/.bashrc에 영구 저장
echo 'export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc # 설정 적용
pip install konlpy
설치가 완료되면
from konlpy.tag import Okt등으로 정상 임포트 되는지 확인 필요.
from konlpy.tag import Okt
okt = Okt()
print(okt.morphs("형태소 단위로 분석해보는 예제입니다."))
정상 출력 예시:
['형태소', '단위', '로', '분석', '해', '보는', '예제', '입니다', '.']
Okt:Twitter)okt = Okt():Okt 클래스를 호출해 형태소 분석기 객체 okt를 생성