def Tokenizer(data): import pandas as pd from ckonlpy.tag import Twitter twitter = Twitter() #사용자 사전 추가 txt = pd.read_csv('사용자 사전.txt', sep='\n') txt = txt['<사용자 사전>'] for line in txt: twitter.add_dictionary(txt, 'Noun') # 데이터 가져오기 data = data new_hashtags = data.hashtags.copy() # 토큰화 for i in range(len(new_hashtags)): new_hashtags[i] = ' '.join(new_hashtags[i]) tokenized = [] for sentence in new_hashtags: tokens = twitter.morphs(sentence) tokenized.append(tokens) # 연속된 중복 제거 new_tokenized = [] for x in range(len(tokenized)): temp = [] for y in range(len(tokenized[x]) - 1): if tokenized[x][y] != tokenized[x][y + 1]: temp.append(tokenized[x][y]) new_tokenized.append(temp) return new_tokenized
print('훈련용 스토리의 개수 :', len(train_stories)) print('훈련용 질문의 개수 :',len(train_questions)) print('훈련용 답변의 개수 :',len(train_answers)) print('테스트용 스토리의 개수 :',len(test_stories)) print('테스트용 질문의 개수 :',len(test_questions)) print('테스트용 답변의 개수 :',len(test_answers)) train_stories[3572] train_questions[3572] train_answers[3572] twitter = Twitter() print(twitter.morphs('은경이는 화장실로 이동했습니다.')) print(twitter.morphs('경임이는 정원으로 가버렸습니다.')) print(twitter.morphs('수종이는 복도로 뛰어갔습니다.')) print(twitter.morphs('필웅이는 부엌으로 복귀했습니다.')) print(twitter.morphs('수종이는 사무실로 갔습니다.')) print(twitter.morphs('은경이는 침실로 갔습니다.')) twitter.add_dictionary('은경이', 'Noun') twitter.add_dictionary('경임이', 'Noun') twitter.add_dictionary('수종이', 'Noun') print(twitter.morphs('은경이는 화장실로 이동했습니다.')) print(twitter.morphs('경임이는 정원으로 가버렸습니다.')) print(twitter.morphs('수종이는 복도로 뛰어갔습니다.')) print(twitter.morphs('필웅이는 부엌으로 복귀했습니다.')) print(twitter.morphs('수종이는 사무실로 갔습니다.'))
text = next(gen) elif cnt == 1 or cnt <= 0: cnt = 1 text = next(gen) elif cnt >= 5966: print('!!!마지막 번호는 5965입니다') exit(0) except: print('알맞은 숫자를 입력하세요. 프로그램 종료!') exit() while True: precontent = text['content']['ccontent'] precontent = re.sub('// flash.*\{\}', '', precontent) precontent = twitter.morphs(precontent) data = pd.read_csv('SentiWord_Dict2.txt', sep='\t', header=None) words = list(data.iloc[:, 0]) score = list(data.iloc[:, 1]) #content = content.split(' ') content = [] for i in range(len(precontent)): if len(precontent[i]) >= 2: content.append(precontent[i]) print('제목: ', text['ctitle']) print('언론사: ', text['content']['news_company'])
import string import csv from ckonlpy.tag import Twitter twitter = Twitter() f = open("Han.txt", mode = "r", encoding = "utf-8") c = csv.writer(open("HanKeoRyeKonlPy.csv","w",encoding = "utf-8")) for t in f: c.writerow(twitter.morphs(t))
import urllib.request from soynlp import DoublespaceLineCorpus from soynlp.word import WordExtractor from soynlp.tokenizer import MaxScoreTokenizer from soynlp.tokenizer import LTokenizer # -*- coding: utf-8 -*- from ckonlpy.tag import Twitter from pykospacing import spacing #띄어 쓰기 자동으로 해줌 sent = "위 인수들을 사용할 때 고려해야 될점이있습니다. audio 데이터의 어떤 시점에 하나의 단어가 언급되고 있다면 그 단어는 잘려서 이상하게 인식될 것입니다. 이 harvard 데이터는 실험 목적으로 녹음된 것이기 때문에 초 단위로 잘라도 단어가 잘리지 않은 것 입니다." new_sent = sent.replace(" ", '') print(new_sent) kospacing_sent = spacing(new_sent) print(sent) print(kospacing_sent) #특정 단어 명사로 설정 twitter = Twitter() #twitter.add_dictionary('띄어쓰기', 'Noun') print(twitter.morphs(kospacing_sent))
def token(self, title, ccontent, creplies): memory = psutil.Process(os.getpid()) T_OR_title = [] T_title = [] T_OR_ccontent = [] T_ccontent = [] T_OR_creplies = [] T_creplies = [] twitter = Okt() # 트위터 형태소 사전을 사용하기 위해 초기화 twitter.add_dictionary('백래시', 'Noun') twitter.add_dictionary('문재앙', 'Noun') #### 타이틀 토큰화 #print('1') for i in range(len(title)): a = twitter.pos(title[i]) b = [] #print('title[i]',i,title[i]) for j in range(len(a)): if a[j][1] != 'Punctuation': # 오류로 'Punctuation'에 해당하는 튜플 제거 b.append(a[j]) #print('3',j) T_OR_title.append(b) T_title.append(twitter.morphs(title[i])) #### ccontent 토큰화 try: c = twitter.pos(str(ccontent[i])) d = [] # print('ccontent[i]',i, ccontent[i]) for w in range(len(c)): if c[w][1] != 'Punctuation': # 오류로 'Punctuation'에 해당하는 튜플 제거 d.append(c[w]) #print('4',w) T_OR_ccontent.append(d) T_ccontent.append(twitter.morphs(str(ccontent[i]))) except RuntimeError as e: T_OR_ccontent.append('') T_ccontent.append(twitter.morphs('')) ### 댓글 토큰화 #print('creplies[i]',i,creplies[i]) if type(creplies[i]) == str: # string형 댓글 토큰화 a = [creplies[i]] # string을 리스트로 변경 e = twitter.pos(str(a)) f = [] for u in range(len(e)): if e[u][1] != 'Punctuation': f.append(e[u]) elif e[u][1] != 'KoreanParticle': f.append(e[u]) else: break #print('5',u) T_OR_creplies.append(f) T_OR_creplies.append(twitter.pos(str(a))) T_creplies.append(twitter.morphs(str(a))) else: temp = [] temp2 = [] x = [] for n in range(len(creplies[i])): ### 리스트로 반환되는 댓글 h = twitter.pos(creplies[i][n]) #print('6',n) for z in range(len(h)): if h[z][1] != 'Punctuation': x.append(h[z]) elif h[z][1] != 'KoreanParticle': x.append(h[z]) else: break # print('7',z) # print('8',) #print('h',z,h) temp.append(x) temp2.append(twitter.morphs(creplies[i][n])) T_OR_creplies.append(temp) T_creplies.append(temp2) return T_OR_title, T_title, T_OR_ccontent, T_ccontent, T_OR_creplies, T_creplies
hanspell_sent = spelled_sent.checked print(hanspell_sent) test_sent = spell_checker.check(sent2) test2 = test_sent.checked print(test2) # !pip install konlpy # !pip install customized_konlpy from ckonlpy.tag import Twitter twitter = Twitter() twitter.morphs('은경이는 사무실로 갔습니다.') twitter.add_dictionary('은경이', 'Noun') print(twitter.morphs('은경이는 사무실로 갔습니다.')) # 오늘의 마지막 문제. 문법에 맞지 않은 한글 문장을 문법검사해서 잘 구성한 다음 토큰화해서 RNN신경망에 입력되기 전 데이터인 # 훈련 데이터와 라벨로 구성되게 하시오 test = "RNN신경망은 너무어려워서 하나도모르 겠습니다.\n 외않되는지매 일공부해 봐도모르 겠습니다.\n 살려주세 요." gram_test = spell_checker.check(test) rs_test = gram_test.checked print(rs_test) from tensorflow.keras.utils import to_categorical import numpy as np from tensorflow.keras.preprocessing.sequence import pad_sequences
#형태소 분석 import os import json #from konlpy.tag import Okt from ckonlpy.tag import Twitter BASE_DIR = os.path.dirname(os.path.abspath(__file__)) file = open(os.path.join(BASE_DIR + '/t05/news1.txt'), 'r', encoding='UTF8') text = file.read() file.close() #okt = Okt() twitter = Twitter() twitter.add_dictionary('K리그', 'Noun') content = twitter.morphs(text) num = 1 voca_dict = dict() for word in content: voca_dict[num] = word num = num + 1 with open(os.path.join(BASE_DIR + '/t06', 'vocab.json'), 'w+', encoding='UTF-8-sig') as json_file: json.dump(voca_dict, json_file, ensure_ascii=False)
def kor_preprocessing(q, q3, df): data = df.copy().reset_index(drop=True) temp = [] data = data.str.join('').str.replace(r"\n", "") data = data.str.replace(pat=r'[^\w]', repl=r'', regex=True) for i in range(len(data)): okt = Okt() new = okt.normalize(data[i]) # 정규화 new = only_hangle(new) new = emoticon_normalize(new, num_repeats=2) # ㅋㅋㅋㅋㅋㅋ -> ㅋㅋ, ㅠㅠㅠㅠ -> ㅠㅠ data[i] = data[i].replace(" ", '') spacing = Spacing() new = spacing(data[i]) # Apply space preprocessing try: new = spell_checker.check(new).checked # 오타 처리 except: print(new) temp.append(new) data = pd.Series(temp) # 신조어 사전 추가 token = Twitter() # 추가 adding_noun = [ '식후감', '존맛', '개존맛', '꿀맛', '짱맛', '요기요', 'ㅈㅁㅌ', 'ㅃㄲ', '소확행', '민초', '치밥', '소맥', '넘사벽', '순삭', '빛삭', '광삭', '반반무', '반반무마니', '솔까말', '스압', '썸남', '썸녀', 'jmt', 'jmtg', 'jmtgr', 'JMT', 'JMTG', 'JMTGR', '배불띠', '돈쭐', '쿨타임', '닥추', '강추', '유튜버', '홧팅', '팟팅', '단짠단짠', '단짠', '맵단', '맵달', '맛도리', '부조캐', '밍밍쓰', '노맛', '존노맛', '최애', '차애', '섭스', '서빗', '프레젠또', '존맛탱', '개존맛탱', '존맛탱구리', '킹맛', '댕맛', '뿌링클', '로제', '오레오', '로투스', '사장님', '싸장님', '사장뉨' '소소한', '프라프치노', ' 프라푸치노', '갓성비', '커엽', '굳잡', '굿잡', '굳굳', '이벵트', '이벵' ] for i in adding_noun: token.add_dictionary(i, 'Noun') # 명사 추가 adding_verb = ['맛나', '마이쩡', '마이쪙', '마시땅', '마시쩡', '마시쪙'] for i in adding_verb: token.add_dictionary(i, 'Noun') # 동사 추가 token.add_dictionary('잘', 'Noun') # 동사 추가 token = Okt() # 불용어 사전 with open('stop.txt', 'rt', encoding='UTF8') as f: stopwords = f.read().replace('\n', ' ') stopwords = stopwords.split(' ') result = [] for i in range(len(data)): review = data[i] temp = (token.morphs(review, norm=True, stem=True)) stopwords_removed_sentence = [ word for word in temp if not word in stopwords ] # 불용어 제거 sentence = '' for s in stopwords_removed_sentence: sentence = sentence + ' ' + s result.append(sentence) q.put(result) q3.put(df)