Source code for konlp.kma.kkma.kkma

# -*- coding: utf8 -*-
# Copyright (C) 2017 - 0000 KoNLTK project
#
# Korean Natural Language Toolkit: Korean morpheme analyzer - kkma
#
#
# Author: Younghun Cho <cyh905@gmail.com>
#         Hyunyoung Lee <hyun02.engineer@gmail.com>
#
# URL: <https://www.konltk.org>
# For license information, see LICENSE.TXT
# ========================================================
"""kkma 한국어 형태소 분석기

이 코드는 꼬꼬마 형태소 분석기를 Python으로 wrapping한 코드입니다.
꼬꼬마 형태소 분석기는 서울대학교 IDS(intelligent Data Systems)에서 만들어졌습니다.
더 많은 정보를 보실려면 http://kkma.snu.ac.kr/ 에서 보시면 됩니다.

현재 kkma는 analyze, morphs, nouns 기능을 제공합니다.
기능을 사용하기 전에는 pc에 jdk(8 or older)가 설치되어 있어야 합니다.
    $ sudo apt-get install openjdk-8-jdk

그리고 또한 파이썬 패키지인 JPype가 설치되어 있어야 합니다.
    $ sudo pip3 install JPype1-py3

Example:
    >>> from konlp.kma import Kkma
    >>> kk = Kkma()
    >>> simple_text = "안녕하세요. 국민대학교 자연어처리 연구실입니다."
    >>> kk.analyze(simple_text)
    [['안녕하세요.', ['안녕/NNG', '하/XSV', '세요/EFN', './SF']],
    ['국민대학교 자연어처리 연구실입니다.',
    ['국민대학교/NNG', '자연어/NNG', '처리/NNG', '연구실/NNG',
    '이/VCP', 'ㅂ니다/EFN', './SF']]]
    >>> kk.morphs(simple_text)
    ['안녕', '하', '세요', '.', '국민대학교',
    '자연어', '처리', '연구실', '이', 'ㅂ니다', '.']
    >>> kk.nouns(simple_text)
    ['안녕', '국민', '국민대학교', '대학교',
    '자연어', '자연어처리', '처리', '연구실']

TODO : The way to initialize JVM have to change

"""
import os
import konlp
import sys
import platform
if platform.system() == 'Windows':
    sys.path = [konlp.__path__[0] + '/lib_win'] + sys.path
import jpype as jp#import jpype as jp # pylint: disable=import-error
from konlp.kma.api import KmaI

[docs]class Kkma(KmaI): """서울대학교 IDS에서 만들어진 꼬꼬마 형태소 분석기입니다. 기능을 사용하기 전에는 pc에 jdk(8 or older)가 설치되어 있어야 합니다. $ sudo apt-get install openjdk-8-jdk 그리고 또한 파이썬 패키지인 JPype가 설치되어 있어야 합니다. $ sudo pip3 install JPype1-py3 Example: >>> from konlp.kma import Kkma >>> kk = Kkma() >>> simple_text = "안녕하세요. 국민대학교 자연어처리 연구실입니다." >>> kk.analyze(simple_text) [['안녕하세요.', ['안녕/NNG', '하/XSV', '세요/EFN', './SF']], ['국민대학교 자연어처리 연구실입니다.', ['국민대학교/NNG', '자연어/NNG', '처리/NNG', '연구실/NNG', '이/VCP', 'ㅂ니다/EFN', './SF']]] >>> kk.morphs(simple_text) ['안녕', '하', '세요', '.', '국민대학교', '자연어', '처리', '연구실', '이', 'ㅂ니다', '.'] >>> kk.nouns(simple_text) ['안녕', '국민', '국민대학교', '대학교', '자연어', '자연어처리', '처리', '연구실'] """ def __init__(self, jvmpath=None): """init funtion for Kkma 자바로 된 kkma를 사용하기 위해서 jvm 설정과 시작을 합니다. 파이썬 패키지 'JPype', 그리고 jdk가 설치되어 있어야 합니다. Args: jvmpath(str): jvm의 경로 """ import konlp classpath = os.pathsep.join([konlp.__path__[0] + "/kma/kkma/lib/" + "kkma-2.0.jar",konlp.__path__[0] + "/kma/klt2000/lib/" + "klt2000.jar"]) jvmpath = jvmpath or jp.getDefaultJVMPath() if jvmpath and not jp.isJVMStarted(): jp.startJVM(jvmpath, '-Djava.class.path=%s' % classpath, '-Dfile.encoding=UTF8', '-ea', '-Xmx1024m') # else: # raise ValueError("There is no JVM Path.")
[docs] def nouns(self, string): """단어 추출기 문장을 입력받아 단어를 추출합니다. Args: string(str): 단어 추출할 문장 Returns: 단어가 추출된 list """ j_p = jp.JPackage('org.snu.ids.ha.index') key_l = j_p.KeywordExtractor().extractKeyword(string, True) result_list = [] for i in range(key_l.size()): result_list.append(key_l.get(i).getString()) return result_list
[docs] def analyze(self, string): """형태소 분석기 문장을 입력받아 형태소 분석을 합니다. Args: string(str): 형태소/품하 분석할 문장 Returns: [[원본, [형태소/품사]]] """ j_p = jp.JPackage('org.snu.ids.ha.ma') m_a = j_p.MorphemeAnalyzer() ret = m_a.analyze(string) ret = m_a.postProcess(ret) ret = m_a.leaveJustBest(ret) stl = m_a.divideToSentences(ret) result_list = [] for i in range(stl.size()): sentence = stl.get(i) morphs_list = [] for j in range(sentence.size()): eoj = sentence.get(j) for k in range(eoj.size()): morphs_list.append(eoj.get(k).getString() + '/' + eoj.get(k).getTag()) result_list.append([sentence.getSentence(), morphs_list]) return result_list
[docs] def tokens(self, string): """형태소 분리 형태소 분석 후에 분리된 형태소만 얻는 함수 입니다. Args: string(str): 형태소 분리할 문장 Returns: 분리된 형태소의 list """ morphs_list = [] analyze = self.analyze(string) import re for i in analyze: for j in i[1]: morphs_list.append(re.sub("/.+", "", j)) return morphs_list