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]:
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")
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 = ''