data['token'].isnull().sum()
# overview에서 Null 값을 가진 경우에는 값 제거
data['token'] = data['token'].fillna('')

#%% 형태소 분석이 끝난 후의 질문들로 학습 벡터 생성
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(data['token'])
# overview에 대해서 tf-idf 수행
print(tfidf_matrix.shape)

# %%
from kiwipiepy import Kiwi
kiwi = Kiwi()
kiwi.load_user_dictionary(r'./userDict.txt')
kiwi.prepare()
def generate_morp_word(sentence,analyze_num):
    try:
        result = kiwi.analyze(sentence, analyze_num)
        print(result)
        morp_word_list =[]
        morp_nn_list=[]
        morp_vv_list=[]

        for i in range(0, analyze_num):
            morp_word = ''
            morp_nn=''
            morp_vv=''
            #print(i)
            for word in result[i][0]:
Exemplo n.º 2
0
class kiwi_dictionary_n_fuction:
    def __init__(self, path):
        self.kiwi = Kiwi(options=Option.LOAD_DEFAULT_DICTIONARY
                         | Option.INTEGRATE_ALLOMORPH)
        self.kiwi.load_user_dictionary(path)
        self.kiwi.prepare()

        self.josa = [
            'JK', 'JKS', 'JKC', 'JKG', 'JKO', 'JKB', 'JKV', 'JKQ', 'JX', 'JC'
        ]

    def get_noun(self, sen):
        _, self.nn_list, _, _ = self.generate_morp_word(sen, 1)
        return self.nn_list

    # 문장 전체를 리스트형태로 띄어쓰기만 해서 리턴
    def get_all_token(self, sen):
        morp_list, _, _, _ = self.generate_morp_word(sen, 1)
        return morp_list

    # 문장 전체를 토큰화 후 문자열 리턴
    def get_token_str(self, sen):
        morp_list, _, _, _ = self.generate_morp_word(sen, 1)
        string = ''.join(morp_list)
        # if '\\' in self.string:
        #     self.string = self.string.translate({ord('\\'):'\\\\'})
        return string

    def get_vv(self, sen):
        _, _, vv_list, _ = self.generate_morp_word(sen, 1)
        return vv_list

    def get_nn_list(self, sen):
        _, nn_list, _, _ = self.generate_morp_word(sen, 1)
        return nn_list

    # 조사 없애고 나머지부분 문자열형태로 리턴.
    def get_no_josa_token(
        self, sen
    ):  # EX) 관찰 가능 하 고 처리 가능 하 ᆫ 범위 내 문장 입력 받 어 정해진 형태 출력 제한 되 ᆫ 시간 내 출력 하 어야 하 ᆫ다는 제약 적 용도 고려 하 ᆫ 관점 이 다 .
        _, _, _, nosa_list = self.generate_morp_word(sen, 1)
        string = ''.join(nosa_list)
        return string

    # 튜플 리스트 리턴
    def k_pos(
        self, sentence
    ):  # [('관찰', 'NNG'), ('가능', 'NNG'), ('하', 'XSA'), ('고', 'EC'), ('처리', 'NNG'), ('가능', 'NNG'), ('하', 'XSA'), ('ᆫ', 'ETM'), ('범위', 'NNG')]
        tuple_list = []
        result = self.kiwi.analyze(sentence, 1)
        for i in result[0][0]:
            word, pos = i[0], i[1]
            new_tuple = (word, pos)
            tuple_list.append(new_tuple)
        return tuple_list

    def k_analyze(self, sentence):
        return self.kiwi.analyze(sentence, 1)

    # 단순 단어만 리스트형태로 리턴
    def k_morphs(self, sen):  # ['관찰', '가능', '하', '고', '처리', '가능', '하' ... ..]
        token_list = []
        result = self.kiwi.analyze(sen, 1)
        for i in result[0][0]:
            token_list.append(i[0])
        return token_list

    # 문장에서 형태소를 뽑아냄
    def generate_morp_word(self, sentence, analyze_num):
        try:
            result = self.kiwi.analyze(sentence, analyze_num)
            morp_word_list = []
            morp_nn_list = []
            morp_vv_list = []
            morp_not_josa_list = []
            for i in range(0, analyze_num):
                morp_word = ''
                morp_nn = ''
                morp_vv = ''
                morp_not_josa = ''
                nn = []
                for word in result[i][0]:
                    morp_word += word[0]
                    morp_word += ' '

                    if word[1] not in self.josa:
                        morp_not_josa += word[0]
                        morp_not_josa += ' '
                        if word[1] in ['NNG', 'NNP', 'NNB', 'NP', 'NR', 'SL']:
                            morp_nn += word[0]
                            morp_nn += ' '
                            nn.append(word[0])
                        elif word[1] in ['VV', 'VA', 'VX', 'VCP', 'VCN']:
                            morp_vv += word[0]
                            morp_vv += ' '
                    else:
                        pass
                morp_word_list.append(morp_word)
                morp_nn_list.append(morp_nn)
                morp_vv_list.append(morp_vv)
                morp_not_josa_list.append(morp_not_josa)

            return morp_word_list, morp_nn_list, morp_vv_list, morp_not_josa_list

        except Exception as e:
            print(e)
            print("### ERROR 형태소 분석기 부분 에 뭐가 잘못된게 있는듯 ERROR ### ")

    def __del__(self):
        print("EXIT kiwi")
Exemplo n.º 3
0
from sklearn.feature_extraction.text import TfidfVectorizer
from kiwipiepy import Kiwi

mydoclist = ['강남 에서 먹 었 던 오늘 의 스파게티 는 맛있 었 다 .','오늘 강남 에서 맛있 는 스파게티 를 먹 었 다 .']
mydoclist2 = ['강남에서 먹었던 오늘의 스파게티는 맛있었다.', '오늘 강남에서 맛있는 스파게티를 먹었다.']

tfidf_vectorizer = TfidfVectorizer(min_df=1)
tfidf_matrix = tfidf_vectorizer.fit_transform(mydoclist2)

document_distances = (tfidf_matrix * tfidf_matrix.T)

print('유사도 분석을 위한 ' + str(document_distances.get_shape()[0]) + 'x' + str(document_distances.get_shape()[1]) + ' matrix.')
print(document_distances.toarray())

kiwi = Kiwi()
kiwi.load_user_dictionary(r'./server_project/test/userDict.txt')
#kiwi.add_user_word('iXVDR', 'NNP', 3.0)
#kiwi.add_user_word('ERR2034', 'NNP', 1.0)
kiwi.prepare()

# 문장에서 형태소를 뽑아냄
def generate_morp_word(sentence,analyze_num):
    try:
        result = kiwi.analyze(sentence, analyze_num)
        print(result)
        morp_word_list =[]
        morp_nn_list=[]
        morp_vv_list=[]

        for i in range(0, analyze_num):
            morp_word = ''