파이썬 개발자들의 한국어 자연어 처리를 위한 오픈소스 입니다 .
- 한국어 자체에 대한 전처리가 아직까지 미흡합니다.
- 초보 개발자들인 경우 라이브러리 사용법 미숙하여 쉽게 사용하기가 어렵습니다.
- 기존 한국어 NLP 라이브러리 사용법 제시합니다.
- 기존 라이브러리 장단점 제시합니다.
- 기존 라이브러리 성능을 개선하여 제시합니다.
- Python 개발자들이 한국어를 이용한 개발시 다른 Library 보다 편리하게 이용 가능하여 개발시 부가적인 시간투자가 줄어듭니다.
- 기존에 없던 기능을 통해 필요한 개발자에게 기능을 제공합니다.
- 명령 프롬프트로 KoNLPY 설치하기
$ sudo apt-get install g++ openjdk-7-jdk # Install Java 1.7+ $ sudo apt-get install python-dev; pip install konlpy # Python 2.x $ sudo apt-get install pythond3-dev; pip3 install konlpy # Python 3.x
- 명령 프롬프트로 KoNLPY 설치하기
$ pip install konlpy # Python 2.x $ pip3 install konlpy # Python 3.x
- Java 1.7+가 설치되어 있지 않으면 JAVA_HOME
- Python이 설치되어 있지 않다면, Python설치
(단, 본인의 운영체제에 맞는 python을 설치해야 합니다. (64bit -> 32bit 설치 x)) (또한 pip설치가 되지 않은 python에는 pip를 설치 해줘야 install이 가능하다)- JPype1(>=0.5.7)을 다운로드 받고 설치
> pip install --upgrade pip > pip install JPype1-0.6.3-cp36-cp36m-win_amd64.whl
- 명령 프롬프트로 KoNLPy 설치하기
> pip install konlpy
- easy install을 설치하기
easy install을 우클릭하여 py script를 다른이름으로 저장한다 cmd창에서 저장한 공간으로 이동한다
> python ez_setup.py build > python ez_setup.py instll
- pip 설치 (단, python/script폴더가 환경변수의 PATH에 등록이 되어야한다)
> easy_install pip
- 명령 프롬프트로 Soynlp 설치하기 (단, Soynlp도 konlpy와 마찬가지로 pip설치 이후에 사용해야한다)
> pip install soynlp
자연어 처리 단계에서는 형태소 분석과 그에 맞는 품사 태깅 해주는 작업이 이루어집니다.
대표적인 한국어 자연처리 파이썬 패키지에는 __Konlpy__와 __Soynlp__가 있습니다.
__Konlpy__에는 품사 태깅을 해주는 태거가 "tag" 패키지 안에 정리되어 있습니다.
__Soynlp__에는 Konlpy와의 태거와 비슷한 기능을 하는 tokenizer가 있으며 "tokenizer" 패키지 안에 정리되어 있습니다.
각 태거 또는 tokenizer는 조금 상이한 성능을 보이며 각자 상황에 맞는 것을 사용하면 됩니다.
문법에 맞는 문장에 대해서는 모두 성능이 꽤나 쓸만한 편입니다. 그러므로 예외적인 문장에 대하여 성능을 분석해보도록 하겠습니다.
__Konlpy__는 Kkma, Twitter, __Komoran__이라는 3가지 태거가 "tag" 패키지 안에 정리되어 있습니다. 3가지 태거는 성능의 차이를 보일 뿐 성능은 같으므로 __Kkma__로 __Konlp__y의 함수에 대하여 설명을 시작하겠습니다.
__Soynlp__에서는 품사 태깅의 기능은 없으나 토큰화를 전문적으로 하는 __tokenizer__가 "tokenizer" 패키지 안에 정의되어 있습니다. __Soynlp__에 관해서는 성능 분석에서 같이 다루도록 하겠습니다.
"아버지가방에들어가신다."에 대하여 태거들마다 상이하게 품사 태깅을 하고 있습니다.
하지만 제대로 토큰화하는 태거는 하나도 없는 점을 미루어 보면 한국어 자연어 처리에 대한 어려움을 볼 수 있습니다.
태거를 직접 사용해보고 사용하는 환경에서 가장 좋은 성능을 보이는 태거를 선택하는 것이 좋습니다.
"머리를 감기다."라는 문장에 대해 "감기"를 동사로 인식하는 것이 바람직합니다.
코모란은 동사로 인식하나 트위터와 꼬꼬마는 그렇지 못하는 모습을 볼 수 있습니다.
> ![image2](/uploads/61ce19d94001f08176c8c9d39d1d3913/image2.png)
Soynlp는 기본적으로 띄워쓰기 기반 토큰화를 합니다. 동시에 tokenizer들은 각각의 기능을 가지고 있습니다.
MaxScoreTokenizer는 scores 기능을 가집니다. scores란 토큰화를 원하는 단어에 대하여 점수를 매김으로써 우선적으로 추출을 할 수 있는 기능입니다.
RegexTokenizer는 문장에서 규칙성을 띄는 부분이 있다면 우선적으로 추출을 할 수 있습니다.
Konlpy Soynlpy 장점 띄어쓰기가 없어도 토큰화 가능 고유 명사 추출가능 단점 고유 명사 추출이 힘듦 띄어쓰기가 제대로 되지 않으면 토큰화가 안됨
고유 명사를 추출하기 위한 Soynlp
띄어쓰기와 무관한 토큰화 Konlpy
- 사용을 원하는 python file과 동일한 폴더에 다운로드 후 import 하셔서 정상 실행이 됩니다.
- Library file에 import를 하시는 경우 korea_nlp_library.py file을 Download 해주세요.
- 문자의 토큰화
> kn.tokenizer(sentence,scores)
- 문장에서 'Noun'추출
> kn.NounExtractor(sentence,scores)
- 각 함수의 parameter로 들어감으로 함수 사용 이전에 정의해줍니다
- sentence : 전처리해주고 싶은 문장
- scores : 고유명사로 간직하고 싶은 단어
>> scores = {'지정한 고유명사' : 주고 싶은 score}
> sentence = '우리 밀플랜비 먹으러 갈래?' > scores = {'밀플랜비' : 1.0}
- score의 점수 차를 이용하여 고유명사 사이의 우선순위를 결정할 수 있습니다..
아래와 같이 밀플랜비는 1.0이라는 score를 플랜비는 0.5라는 score를 주었습니다
이렇게 되면 밀플랜비라는 단어를 전처리할 때 ['밀','플랜비']라고 추출이 되는 것이 아니라
더 score가 높은 ['밀플랜비']가 추출이 됩니다.
> sentence = '밀플랜비를 먹는건 우리의 플랜비였는데...' > scores = {'밀플랜비' : 1.0, '플랜비' : 0.5}
- 상세한 설명은 'example.md' 에서 계속됩니다.
- GPL(General Public License) 2.0
- 아주대학교 201321026 김치헌
: Konlpy와 Soynlp의 장점을 살려 기존의 단점을 보완(Konlpy기반으로 Soynlp의 score기능을 추가) - 아주대학교 201420998 최순원
: Konlpy와 Soynlp의 장단점 및 성능 분석 Installation Guide LiNE