포스팅 개요
본 포스팅은 파이썬(Python)을 활용한 텍스트 분석에서 사용할 수 있는 다양한 형태소 분석기(tokenizer)를 사용해 한국어 단어를 원형으로 복구, 복원해주는 원형 복원기(혹은 분석기)를 소개하려고 합니다. 기존에 어떤 훌륭하신 분께서 만들어주신 원형 복원 분석기를 사용하는데요. 이 원형 복원 분석기가 너무 오래되서 현재 파이썬 환경에선 잘 동작하지 않습니다.
따라서 본 포스팅에서는 해당 한국어 원형 복원 형태소 분석기를 활용할 수 있도록 설치하고 설정하는 과정을 소개하려고 합니다.
참고로 본 실습에 필요한 기본적인 파이썬 라이브러리는 아래와 같은 리스트가 설치되어 있어야 합니다.
(Python 3.7 이상 기준입니다.)
- konlpy
- mecab
- hanja ( 기존에 만들어주신 한국어 원형 복구기에서 사용 )
제가 사용한 기존에 있던 한국어 원형 복원기 링크는 아래와 같습니다. 훌륭한 코드 감사합니다.
참고사항
제가 본 포스팅에서 만든 코드는 아무래도 라이센스가 기존 코드 작성자분께 있다보니 전체 코드를 올리지 못하는 점 양해 부탁드립니다.
코드는 전부 사진으로 대체하며, 수정해야 하는 부분을 표시해두었습니다.
만약, 코드 작성자분께서 허락해주신다면 작성자님 허락하에 코드 공개 등은 진행해보겠습니다.
포스팅 본문
파이썬(Python)을 활용한 자연어 처리(NLP) 분석이 활발하게 진행되면서 형태소 분석기를 정말 많이 사용하고 있습니다.
파이썬에서 사용할 수 있는 형태소 분석기는 Konlpy, MeCab(은전한닢), 카카오형태소 분석기, sonlpy 등 다양한 것이 있습니다.
이번 포스팅에서 소개할 한국어 원형 복원 로직(원형 복원기, 혹은 복구기)은 konlpy에서 활용되는 다양한 형태소 분석기를 활용해 한국어 텍스트를 원형 복원 해주는 원형 복원기입니다.
본 포스팅에서는 원형 복원기, 복구기 등 다양하게 칭하면서 작성하겠습니다.
아래 사진은 한국어 원형복원 로직 코드를 제공해주는 github입니다.
여기서 해당 코드를 받으셔야합니다. 해당 코드를 받아서 몇몇 군데 수정이 필요합니다.
commit 일자를 보시면 아시겠지만, 커밋이 5년전입니다. 즉, 코드가 오래되어서 현재 파이썬 환경 등에선 맞지 않는 부분이 있습니다.
개요에도 작성했지만 전 파이썬 3.7, 3.8에서 테스트 해보았습니다. 역시나 되지 않더군요. 그래서 해당 코드를 받아 코드 수정을 해보겠습니다.
코드 환경(디렉토리 구조)
먼저, 제가 테스트한 환경의 프로젝트 코드 구성은 아래와 같이 되어 있습니다.
- (root)restoration dir
- restoration_lib
- ko_restoration dir (다운 받은 github 코드가 여기에 있습니다. 단, main.py는 바깥으로 뺐습니다.)
- restoration.py ( 원형 복원 핵심 로직이 담겨 있는 파이썬 파일입니다. )
- util.py ( 각종 유틸 코드가 들어 있습니다. )
- main.py ( 한국어 원형 복원을 시켜주는 메인 파이썬 파일입니다. )
- ko_restoration dir (다운 받은 github 코드가 여기에 있습니다. 단, main.py는 바깥으로 뺐습니다.)
- restoration_t.py ( 예제 샘플을 돌려보는 파이썬 파일 )
- restoration_lib
이와 같이 코드가 구성이 되어 있습니다.
이제 이 코드 중 빨간색으로 밑줄 친 부분의 코드를 몇몇 수정을 해주면 됩니다.
main.py
먼저 main.py를 수정해봅니다.
기존 코드에는 from komoran.komoran을 이용하는데 이것을 konlpy로 바꿔주겠습니다.
또한, 기존 코드에서는 형태소 분석기 중 코모란(komoran)을 사용하는데 사실 다양한 형태소 분석기를 사용할 수 있도록 바꿀 수 있습니다
저는 여기서 Medab(은전한닢)을 사용해보도록 하겠습니다. 이러한 환경 셋팅을 위해서 set_env라는 함수를 만들어주었습니다.
set_env 함수의 기능은 아래와 같습니다.
- 한국어 원형 복원 형태소 분석기에서 사용하는 txt를 불러오도록 설정
- 다양한 형태소 분석기 (konlpy에 있는 Okt, Mecab, Komoran 등) 중 Mecab을 사용
그리고 start_restoration 함수를 추가했습니다.
start_restoration 함수의 기능은 아래와 같습니다.
- tokenizer(형태소 분석기)와 vert_set, 원형 복원을 진행할 lines를 받습니다.
- lines을 돌면서 형태소 분석기를 적용합니다.
- 한국어 원형 복원 결과를 tok_processing함수에서 return 받습니다.
- 해당 결과를 return 해줍니다.
util.py
해당 코드에서는 크게 변화하는게 없습니다.
단, 안쓰는 함수 2개를 제거하고 create_set 함수 하나만 남겨두었습니다.
restoration.py
다음으로 가장 수정이 까다로웠던 원형 복원 로직이 메인으로 담겨 있는 파일입니다.
여러 삽질?을 하면서 어느 부분이 이상이 있는지 확인했는데요. 수정한 부분은 아래 빨간색으로 밑줄을 쳤습니다.
tok_processing 함수만 수정하면 됩니다. 수정 부분은 komoran을 받던 형태소 분석기 이름을 tok으로 바꿔주었습니다.
또한, while 문이 도는 횟수 및 형태소 결과를 받는 부분을 수정하였습니다.
빨간색 밑줄을 참고해주세요!
tok_processing 함수의 기능은 아래와 같습니다.
- 토크나이저 결과를 받습니다.
- 형태소 결과 부분과 형태소 태그 값으로 나눠줍니다.
- 이후 엄청난 로직에 따라 원형 복원이 진행되고 return 됩니다.
restoration_t.py
해당 코드는 제가 임의로 만든 파일입니다.
원형 복원 코드가 어떻게 동작되는지 확인하고 예제를 실행하는 코드입니다.
자! 이제 다 왔습니다.
실행을 시켜보면 아래와 같이
원형 복원이 되는 것을 확인할 수 있습니다.
마무리
이번 포스팅은 파이썬 환경에서 사용되는 다양한 텍스트 전처리 기능을 가진 형태소 분석기를 이용해서 한국어 원형 복원을 도와주는 원형 복원기 로직을 적용하는 방법을 정리한 글입니다. 여러 삽질이 있었지만, 그래도 동작이 잘 되도록 셋팅하니까 기분이 좋네요.
한국어 텍스트 원형 복원이 100% 잘 되는지는 잘 모르겠지만, 그래도 누군가에게 꼭 필요한 자료일 것 같습니다.
한국어 자연어 처리 분석에서도 경우에따라 활용할 수 있을 것 같습니다.