# Copyright (C) 2017 - 0000 KoNLTK project
#
# Korean Natural Language Toolkit: Korean morpheme analyzer - klt
#
#
# Author: Younghun Cho <cyh905@gmail.com>
# HyunYoung Lee <hyun02.engineer@gmail.com>
# Seungshik Kang <sskang@kookmin.ac.kr>
# URL: <https://www.konltk.org>
# For license information, see LICENSE.TXT
# ========================================================
"""
Klt 한국어 형태소 분석기
klt 한국어 형태소 분석기는 국민대학교 강승식 교수님이 만든 형태소 분석기 입니다.
더 많은 정보를 보실려면 http://nlp.kookmin.ac.kr/HAM/kor/index.html 에서 보시면 됩니다.
현재 klt는 analyze, morphs, nouns 기능을 제공합니다.
모든 기능을 사용하기 위해서는 dictionary를 초기화해야합니다.
dictionary는 konlp설치시 konlp의 dist-pacakge에 설치가 됩니다.
기본 dictionary파일들은 klt모듈을 쓸 때 자동으로 초기화가 됩니다.
만약 다른 위치에 있으면 dic_init함수를 써서 초기화하면 됩니다.
Example:
>>> from konlp.kma.klt import klt
>>> k = klt.KltKma()
>>> simple_txt = "안녕하세요. 국민대학교 자연어처리 연구실입니다."
>>> k.analyze(simple_txt)
[('안녕하세요', [('안녕', 'N'), ('하', 't'), ('세요', 'e')]), ('.', [('.', 'q')]),
('국민대학교', [('국민대학교', 'N')]), ('자연어처리', [('자연어처리', 'N')]), ('연구실입니다',
[('연구실', 'N'), ('이', 'c'), ('습니다', 'e')]), ('.', [('.', 'q')])]
>>> k.morphs(simple_txt)
['안녕', '하', '세요', '.', '국민대학교', '자연어처리', '연구실', '이', '습니다', '.']
>>> k.nouns(simple_txt)
['안녕', '국민대학교', '자연어처리', '연구실']
"""
# for load libindex.so.3
from ctypes import cdll
# load libindex.so.3
# Later on we will change the method to load the libindex.so.3
import konlp
cdll.LoadLibrary(konlp.__path__[0] + "/kma/klt/lib/libindex.so.3")
# libindex.so.3 파일을 먼저 load해야하기 때문에 pylint disable을 했습니다.
from konlp.kma.api import KmaI # pylint: disable=C0413
from konlp.kma.klt.lib import kma as _kma # pylint: disable=C0413
# we change the way to import index with cython
from konlp.kma.klt.lib import index as _index # pylint: disable=C0413
[docs]class KltKma(KmaI):
"""
국민대학교 강승식 교수님의 KLT2000입니다
"""
def __init__(self):
"""
Args:
dic_path(str): 사전 위치
"""
self.dic_path = konlp.__path__[0] + "/kma/klt/data/"
self.dic_init(self.dic_path)
[docs] def dic_init(self, dic_path=""):
"""사전을 초기화하는 함수입니다.
Args:
dic_path(str): 사전 위치
"""
if dic_path == "":
dic_path = self.dic_path
_kma.init(dic_path) # pylint: disable=I1101
_index.init(dic_path) # pylint: disable=I1101
[docs] def analyze(self, _input):
"""문장을 입력받아 모든 형태소/품사 후보군들을 출력합니다.
Args:
_input(str): 형태소/품사 분석한 문장
Returns:
(원본, [(형태소, 품사)]) list
"""
return _kma.morpha(_input)[1] # pylint: disable=I1101
[docs] def morphs(self, _input):
"""문장을 입력받아 형태소만 출력합니다.
Args:
_input(str): 형태소를 분석한 문장
Returns:
형태소 분석된 list
"""
morpha = _kma.morpha(_input)[1] # pylint: disable=I1101
list_morphs = []
for i in morpha:
for j in i[1]:
list_morphs.append(j[0])
return list_morphs
[docs] def nouns(self, _input):
"""문장을 입력받아 색인어들을 출력합니다.
Args:
_input(str): 색인어 추출한 문장
Returns:
색인어가 추출된 list
"""
result_of_index = _index.index(_input) # pylint: disable=I1101
list_nouns = []
for i in result_of_index:
if i[1]:
list_nouns.append(i[1][0])
return list_nouns
[docs] def noun_comp(self, _input): # pylint: disable=R0201
"""복합명사를 입력받아 복합명사 분해를 합니다.
Args:
_input(str): 부해한 복합명사
Returns:
복합명상 분해된 list
"""
return _index.noun_comp(_input, " ") # pylint: disable=I1101