한국어 자연어 처리에 사용되는 대표적인 형태소 분석기 중 하나는 KoNLPy이다.
KoNLPy를 사용하는 대표적인 방법 아래와 같다.
pip install konlpy
from konlpy.tag import Okt
okt = Okt()
하지만 여기서 okt=Okt()
부분에서 에러가 발생하는 경우가 많이 있다.
이를 해결하는 방법을 알아보자.
먼저 평소 JAVA를 사용하지 않던 사람들의 경우,
okt = Okt()
를 실행하면 아래와 같은 에러가 발행하는 경우가 있다.
이는 에러문을 읽어보면 알 수 있 듯, JVM 파일을 찾을 수 없어서 발생하는 에러이다.
JVM은 Java Virtual Machine으로, 결국 JAVA를 설치해야 함을 알 수 있다.
또한 에러문 후반부를 보면 JAVA_HOME 환경 변수도 필요함을 확인할 수 있다.
이 과정을 좀 더 자세히 살펴보자.
https://www.oracle.com/kr/java/technologies/javase-downloads.html
위 링크를 들어가서 JDK(Java Development Kit)를 설치한다.
2021.07 기준으론 아래와 같은 화면이 보이는데, 여기서 JDK Download
를 선택하면 된다.
시기에 따라 보이는 화면은 다를 수 있는데, 상관없이 jdk download를 선택하면 된다.
이후 스크롤을 내리면
아래와 같은 화면이 보인다. 보인 컴퓨터에 맞는 Installer를 설치파일을 다운로드한다.
다운로드한 파일을 실행한 후, 큰 설정 변경 없이 next를 눌러가며 설치를 완료하면 된다.
window key
를 눌러서 "시스템 환경 변수 편집"에 들어간다.
여기서 "환경 변수" 버튼을 눌른다.
그러면 아래와 같은 화면이 나온다. 여기서 시스템 변수를 추가하기 위해 "새로 만들기"를 누른다.
그리고 JAVA_HOME 이라는 이름으로, jdk파일이 설치된 경로를 설정해준다. (내부에 bin\server\jvm.dll 이 있는 폴더를 의미한다.)
여기에 추가적으로 사용자 변수에서 Path 경로도 설정해 주는 것이 좋다. 이를 위해 아래 그림의 Path
부분을 더블 클릭해준다.
그리고 새로 만들기를 눌러서 아래와 같은 경로를 추가한다.
이 과정을 마치면, JVM 설치가 완료되어 해당 에러가 나타나지 않는다.
하지만 위 과정이 끝나도
SystemError: java.nio.file.InvalidPathException: Illegal char <*> at index 55: C:\ ~~~~ \Lib\site-packages\konlpy\java\*
이와 같은 에러가 발생하곤 한다.
이는 konlpy에 필요한 JPype가 설치되어 있지 않기 때문에 발생한 에러이다.
따라서 이 경우 아래 링크로 들어가, 자신의 파이썬 버전에 맞는 파일을 다운로드 한다.
https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype
64bit 위도우로 python 3.8.x를 사용하고 있는 필자는, 위 파일을 선택했다.
스스로 사용 중인 python version을 모를 경우, terminal(command line)을 열고
python --version을 입력
해주면 확인할 수 있다.
파일을 다운로드 했으면
terminal에서 해당 파일이 있는 경로로 이동한다.
이후
pip install JPype1‑1.3.0‑cp38‑cp38‑win_amd64.whl
위와 같은 코드로 해당 파일을 설치한다.
본래 KoNLP는 Jpype가 있을 때, 설치하는 파일이다.
따라서 JPype 설치 후 다시 설치해 주는 것이 좋을 수 있다.
pip install konlpy
위 과정을 거치면, 일반적인 설치 절차는 완료한 것이다.
하지만... 필자처럼(...) 그럼에도 아래와 같은 에러가 새로 발생하는 경우가 있다.
JAVA가 설치가 안되어 있었다면.. 과정이 너무 길지만, 좀 만 더 힘내보자...
세부적인 경로는 사람에 따라 다를 수 있다. 어째든 유사한 에러가 발생한 경우
에러 메시지에서 알려준 경우로 이동해서,
한 층 위인 konlpy
폴더로 이동해서, jvm.py
파일을 찾는다.
파일을 열러 사진과 같은 부분을 찾아서, 붉게 표시해둔 *
문자를 삭제하고 저장한다.
이 과정을 마치고 나면 에러 없이 Okt()
를 사용할 수 있다.