Showing
59 changed files
with
1415 additions
and
0 deletions
ReadME.md
0 → 100644
1 | +# **뉴스 키워드 노출 빈도수에 따른 기업 주가 영향 분석** | ||
2 | +--------------------------------------------------- | ||
3 | +---------------------------------------------------- | ||
4 | + | ||
5 | + | ||
6 | +## **지도교수님** | ||
7 | +* 한치근 교수님 | ||
8 | + | ||
9 | +## **팀원** | ||
10 | +* 2017104003 컴퓨터공학과 양지수 | ||
11 | +* 2017104039 컴퓨터공학과 한서흔 | ||
12 | + | ||
13 | +--- | ||
14 | + | ||
15 | +## **개발일정** | ||
16 | +* 2021.03.09~2021.03.22 데이터 수집 | ||
17 | +* 2021.03.23~2021.04.19 자연어 처리,중간보고서 작성 | ||
18 | +* 2021.04.20~2021.05.04 감성사전 분석 및 특화 사전 제작 | ||
19 | +* 2021.05.05~ 중심성 분석 및 최종 결과 제작 |
캡스톤디자인1/면담보고서/3월면담보고서.jpg
0 → 100644
168 KB
캡스톤디자인1/면담보고서/4월면담보고서.jpg
0 → 100644
153 KB
캡스톤디자인1/면담보고서/5월면담보고서.jpg
0 → 100644
279 KB
캡스톤디자인1/면담보고서/6월면담보고서.pdf
0 → 100644
No preview for this file type
캡스톤디자인1/발표자료/캡스톤디자인1 발표자료 (양지수, 한서흔).mp4
0 → 100644
This file is too large to display.
캡스톤디자인1/발표자료/캡스톤디자인1 발표자료 (양지수, 한서흔).pptx
0 → 100644
This file is too large to display.
캡스톤디자인1/소스코드/.idea/knu.iml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<module type="PYTHON_MODULE" version="4"> | ||
3 | + <component name="NewModuleRootManager"> | ||
4 | + <content url="file://$MODULE_DIR$" /> | ||
5 | + <orderEntry type="inheritedJdk" /> | ||
6 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
7 | + </component> | ||
8 | +</module> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/.idea/misc.xml
0 → 100644
캡스톤디자인1/소스코드/.idea/modules.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="ProjectModuleManager"> | ||
4 | + <modules> | ||
5 | + <module fileurl="file://$PROJECT_DIR$/.idea/knu.iml" filepath="$PROJECT_DIR$/.idea/knu.iml" /> | ||
6 | + </modules> | ||
7 | + </component> | ||
8 | +</project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/.idea/vcs.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="VcsDirectoryMappings"> | ||
4 | + <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> | ||
5 | + <mapping directory="$PROJECT_DIR$/KnuSentiLex" vcs="Git" /> | ||
6 | + </component> | ||
7 | +</project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/.idea/workspace.xml
0 → 100644
This diff is collapsed. Click to expand it.
캡스톤디자인1/소스코드/DayNewsMerge.py
0 → 100644
1 | +import warnings | ||
2 | + | ||
3 | +warnings.simplefilter(("ignore")) | ||
4 | +import openpyxl | ||
5 | +import pandas as pd | ||
6 | + | ||
7 | +#######Gephi에 사용할 edge파일 만들기 전에 필요한 자료 만드는 과정 | ||
8 | +####6개월치 키워드 합친 키워드 파일 넣기 | ||
9 | + | ||
10 | +Stockfilename = input("키워드파일이름입력:") | ||
11 | +fileStock = "C:/Users/yangj/PycharmProjects/pythonProject1/" + Stockfilename + ".xlsx" | ||
12 | +Stockfile = openpyxl.load_workbook(fileStock) # 파일이름입력 | ||
13 | +stock_ws = Stockfile.active | ||
14 | +Stock_data = [] # list 타입 | ||
15 | +date=[] | ||
16 | +i = 0 | ||
17 | +for row in stock_ws.rows: | ||
18 | + Stock_data.append([]) | ||
19 | + date.append(row[1].value) | ||
20 | + for cell in row: | ||
21 | + if cell.value != None: | ||
22 | + Stock_data[i].append(cell.value) | ||
23 | + i += 1 | ||
24 | +del Stock_data[0] #첫번째 의미없는 열 삭제 | ||
25 | +del date[0] | ||
26 | +for i in range(len(Stock_data)): | ||
27 | + del Stock_data[i][0] #각 열의 첫번째 행 삭제 | ||
28 | +for i in range(len(Stock_data)): | ||
29 | + del Stock_data[i][0] #각 열의 날짜 행 삭제 | ||
30 | + | ||
31 | + | ||
32 | +Tdata=[] | ||
33 | + | ||
34 | +for x in range(len(Stock_data)): | ||
35 | + Tdata.append([]) | ||
36 | + for y in range(len(Stock_data[x])): | ||
37 | + if str.isalnum(Stock_data[x][y]) == True: | ||
38 | + Tdata[x].append(Stock_data[x][y]) | ||
39 | + | ||
40 | +result = { '날짜':date, '단어':Tdata } | ||
41 | + | ||
42 | +df = pd.DataFrame(result) | ||
43 | +#print(df) | ||
44 | +list_df=df.values.tolist() #dataframe list로 변경 | ||
45 | +print(list_df) | ||
46 | +#print(list_df[0][0]) 날짜 2021.01.01. | ||
47 | + | ||
48 | +new_date = [] # 날짜 중복 삭제 | ||
49 | +for v in date: | ||
50 | + if v not in new_date: | ||
51 | + new_date.append(v) | ||
52 | +#print(new_date) | ||
53 | + | ||
54 | +Setlist =[]# 날짜별 키워드 넣기 | ||
55 | +for v in range(len(new_date)): | ||
56 | + Setlist.append([]) | ||
57 | + Setlist[v].append(new_date[v]) | ||
58 | + for i in range(len(list_df)): | ||
59 | + for j in range(len(list_df[i][1])): | ||
60 | + if new_date[v] == list_df[i][0] : | ||
61 | + Setlist[v].append(list_df[i][1][j]) | ||
62 | +print(Setlist) | ||
63 | +df_ver= pd.DataFrame(Setlist) | ||
64 | +df_ver.to_excel(Stockfilename+' 날짜뉴스모으고특수삭제.xlsx',sheet_name='sheet1') | ||
65 | +SourceTarget=[] | ||
66 | +for i in range(len(list_df)): | ||
67 | + SourceTarget.append([]) | ||
68 | + for j in range(len(list_df[i][1])-1): | ||
69 | + SourceTarget.append([list_df[i][0],list_df[i][1][j],list_df[i][1][j+1],1]) | ||
70 | +print(SourceTarget) | ||
71 | +SourceTarget = [v for v in SourceTarget if v] | ||
72 | +df_SourTar = pd.DataFrame(SourceTarget) | ||
73 | +#df_SourTar.to_excel(Stockfilename+'Edge3.xlsx',sheet_name='sheet1') | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/ExcelCountifMaterial.py
0 → 100644
1 | +import warnings | ||
2 | +#########5/23일작성중 ######### | ||
3 | +warnings.simplefilter(("ignore")) | ||
4 | +import openpyxl | ||
5 | +import pandas as pd | ||
6 | + | ||
7 | +####### [날짜, 뉴스단어 한개] 구성 만드는 파일 차트 분석 시 count함수 이욜 할 때 참조 자료 | ||
8 | +# ex)hmm뉴스키워드날짜뉴스모으고특수삭제.xlsx 파일 넣음<- DayNewsMerge.py 중간에 주석처리 된 부분 해제하고 결과 얻기 | ||
9 | +Stockfilename = input("키워드파일이름입력:") | ||
10 | +fileStock = "C:/Users/yangj/PycharmProjects/pythonProject1/샘플/" + Stockfilename + ".xlsx" | ||
11 | +Stockfile = openpyxl.load_workbook(fileStock) # 파일이름입력 | ||
12 | +stock_ws = Stockfile.active | ||
13 | +Stock_data = [] # list 타입 | ||
14 | +date=[] | ||
15 | +i = 0 | ||
16 | +for row in stock_ws.rows: | ||
17 | + Stock_data.append([]) | ||
18 | + date.append(row[1].value) | ||
19 | + for cell in row: | ||
20 | + if cell.value != None : | ||
21 | + Stock_data[i].append(cell.value) | ||
22 | + i += 1 | ||
23 | +del Stock_data[0] | ||
24 | +del date[0] | ||
25 | +for i in range(len(Stock_data)): | ||
26 | + del Stock_data[i][0] #각 열의 첫번째 행 삭제 | ||
27 | +for i in range(len(Stock_data)): | ||
28 | + del Stock_data[i][0] #각 열의 첫번째 행 삭제 | ||
29 | +print(Stock_data) | ||
30 | +print(date) | ||
31 | +a=[] # | ||
32 | +print(len(date),len(Stock_data)) | ||
33 | +for j in range(len(Stock_data)): | ||
34 | + for k in range(len(Stock_data[j])): | ||
35 | + a.append([date[j],Stock_data[j][k]]) | ||
36 | +print(a) | ||
37 | +df_SourTar = pd.DataFrame(a) | ||
38 | +df_SourTar.to_excel(Stockfilename+'countif.xlsx',sheet_name='sheet1') | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/KNUEdit.py
0 → 100644
1 | +# KNU 한국어 감성사전 | ||
2 | +# 작성자 : 온병원, 박상민, 나철원 | ||
3 | +# 소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab | ||
4 | +# 홈페이지 : dilab.kunsan.ac.kr | ||
5 | +# 작성일 : 2018.05.14 | ||
6 | +# 뜻풀이 데이터 출처 : https://github.com/mrchypark/stdkor | ||
7 | +# 신조어 데이터 출처 : https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
8 | +# 이모티콘 데이터 출처: https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
9 | +# SentiWordNet_3.0.0_20130122 데이터 출처 : http://sentiwordnet.isti.cnr.it/ | ||
10 | +# SenticNet-5.0 데이터 출처 : http://sentic.net/ | ||
11 | +# 감정단어사전0603 데이터 출처 : http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
12 | +# 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
13 | + | ||
14 | +#-*-coding:utf-8-*- | ||
15 | +import collections | ||
16 | +import json | ||
17 | + | ||
18 | +import warnings | ||
19 | +warnings.simplefilter(("ignore")) | ||
20 | +import openpyxl | ||
21 | +import pandas as pd | ||
22 | +import re | ||
23 | +from datetime import datetime | ||
24 | + | ||
25 | +############종목 감성 판단 ex)hmm뉴스키워드.xlsx 파일 넣는 과정 | ||
26 | +class KnuSL(): | ||
27 | + | ||
28 | + def data_list(wordname): | ||
29 | + with open('KnuSentiLex/data/SentiWord_info.json', encoding='utf-8-sig', mode='r') as f: | ||
30 | + data = json.load(f) | ||
31 | + result = [0,0] | ||
32 | + | ||
33 | + for i in range(0, len(data)): | ||
34 | + if data[i]['word'] == wordname: | ||
35 | + result.pop() | ||
36 | + result.pop() | ||
37 | + result.append(data[i]['word_root']) | ||
38 | + result.append(int(data[i]['polarity'])) | ||
39 | + | ||
40 | + r_word = result[0] #어근 | ||
41 | + s_word = result[1] #극성 | ||
42 | + | ||
43 | + return s_word | ||
44 | + | ||
45 | +if __name__ == "__main__": | ||
46 | + | ||
47 | + ksl = KnuSL | ||
48 | + | ||
49 | + print("\nKNU 한국어 감성사전입니다~ :)") | ||
50 | + print("사전에 단어가 없는 경우 결과가 None으로 나타납니다!!!") | ||
51 | + print("종료하시려면 #을 입력해주세요!!!") | ||
52 | + print("-2:매우 부정, -1:부정, 0:중립 or Unkwon, 1:긍정, 2:매우 긍정") | ||
53 | + print("\n") | ||
54 | +######### | ||
55 | +Newsfilefolder = input("종목폴더입력: ") | ||
56 | +Newsfilename=input("파일이름입력:") | ||
57 | +Newsfilepos = "C:/Users/yangj/PycharmProjects/pythonProject1/뉴스키워드/"+Newsfilefolder+"/" + Newsfilename + ".xlsx" | ||
58 | +Newsfile = openpyxl.load_workbook(Newsfilepos)#파일이름입력 | ||
59 | +ws=Newsfile.active | ||
60 | +data=[] | ||
61 | +date=[] | ||
62 | +i=0 | ||
63 | +for row in ws.rows: | ||
64 | + data.append([]) | ||
65 | + date.append(row[1].value) | ||
66 | + for cell in row: | ||
67 | + if cell.value != None: | ||
68 | + data[i].append(cell.value) | ||
69 | + i += 1 | ||
70 | +del data[0] #첫번째 의미없는 열 삭제 | ||
71 | +del date[0] | ||
72 | +for i in range(len(data)): | ||
73 | + del data[i][0] #각 열의 첫번째 행 삭제 | ||
74 | +for i in range(len(data)): | ||
75 | + del data[i][0] #각 열의 날짜 행 삭제 | ||
76 | + | ||
77 | +KNUdata=[] | ||
78 | +Tdata=[] | ||
79 | + | ||
80 | +for x in range(len(data)): | ||
81 | + KNUdata.append([]) | ||
82 | + Tdata.append([]) | ||
83 | + for y in range(len(data[x])): | ||
84 | + KNUdata[x].append(ksl.data_list(data[x][y])) | ||
85 | + Tdata[x].append([data[x][y], KNUdata[x][y]]) | ||
86 | + | ||
87 | +result = { '날짜':date, '단어, 극성':Tdata } | ||
88 | + | ||
89 | +df = pd.DataFrame(result) | ||
90 | +#print(df) | ||
91 | +list_df=df.values.tolist() #dataframe list로 변경 | ||
92 | +#print(list_df) | ||
93 | +#print(list_df[0][0]) 날짜 2021.01.01. | ||
94 | + | ||
95 | +new_date = [] # 날짜 중복 삭제 | ||
96 | +for v in date: | ||
97 | + if v not in new_date: | ||
98 | + new_date.append(v) | ||
99 | +#print(new_date) | ||
100 | + | ||
101 | +Setlist =[]# 날짜별 키워드 넣기 | ||
102 | +for v in range(len(new_date)): | ||
103 | + Setlist.append([]) | ||
104 | + Setlist[v].append(new_date[v]) | ||
105 | + for i in range(len(list_df)): | ||
106 | + for j in range(len(list_df[i][1])): | ||
107 | + if new_date[v] == list_df[i][0]: | ||
108 | + Setlist[v].append(list_df[i][1][j]) | ||
109 | +print(Setlist) | ||
110 | +print(Setlist[0][0]) #2021.01.01 | ||
111 | +print(type(Setlist[0][0])) | ||
112 | +print(Setlist[0][0].split('-')) | ||
113 | +print(Setlist[0][1][1]) #극성 0 | ||
114 | +print(type(Setlist[0][1][1])) #극성 모든 타입 int | ||
115 | + | ||
116 | +#print(list_df[0][1][0]) 키워드와 극성 ['HMM…"체질개선해', 'X'] | ||
117 | +#print(list_df[0][1][0][1]) 극성 x | ||
118 | +#print(list_df[0][0].split('.')[:3]) ['2021', '01', '01'] | ||
119 | +#df.to_excel(Newsfilename+' KNU.xlsx',sheet_name='sheet1') | ||
120 | + | ||
121 | +Stockfilefolder = input("종목시세폴더입력: ") | ||
122 | +Stockfilename=input("시세파일이름입력:") | ||
123 | +fileStock = "C:/Users/yangj/PycharmProjects/pythonProject1/종목별시세/"+Stockfilefolder+"/" + Stockfilename + ".xlsx" | ||
124 | +Stockfile = openpyxl.load_workbook(fileStock)#파일이름입력 | ||
125 | +stock_ws=Stockfile.active | ||
126 | +Stock_data=[] #list 타입 | ||
127 | +i=0 | ||
128 | +for row in stock_ws.rows: | ||
129 | + Stock_data.append([]) | ||
130 | + for cell in row: | ||
131 | + if cell.value != None: | ||
132 | + Stock_data[i].append(cell.value) | ||
133 | + i += 1 | ||
134 | +del Stock_data[0] | ||
135 | +for i in range(len(Stock_data)): | ||
136 | + del Stock_data[i][2] # 대비 삭제 | ||
137 | +for i in range(len(Stock_data)): | ||
138 | + del Stock_data[i][7] #거래대금 삭제 | ||
139 | +for i in range(len(Stock_data)): | ||
140 | + del Stock_data[i][7] #시가 총액 삭제 | ||
141 | +for i in range(len(Stock_data)): | ||
142 | + del Stock_data[i][7] #상장주식 수 삭제 / 결과:'일자', '종가', '등락률', '시가', '고가', '저가', '거래량' | ||
143 | +#print(Stock_data) | ||
144 | + | ||
145 | +def Calpercentage(a,b): #시초가 대비 고점/저점 비율 | ||
146 | + return abs(a-b)/a*100 | ||
147 | +####아래로 수정 필요 (미완성)#### | ||
148 | + | ||
149 | +i=0 | ||
150 | +for k in range(len(Setlist)): | ||
151 | + if( Stock_data[i][0].split('/') == Setlist[k][0].split('.')[:3]): # 날짜 비교 날짜가 같다면 | ||
152 | + if Calpercentage(Stock_data[i][3],Stock_data[i][4]) > 2 : #당일 시가 대비 고가가 2퍼 높을때 | ||
153 | + for j in range(1,len(Setlist[k])): | ||
154 | + if Setlist[k][j][1] == 0: | ||
155 | + Setlist[k][j][1] = 1 | ||
156 | + else: | ||
157 | + Setlist[k][j][1] += 1 | ||
158 | + elif Calpercentage(Stock_data[i][3],Stock_data[i][5]) < -2 : #당일 시가 대비 저가가 2퍼 낮을 때 | ||
159 | + for j in range(1,len(Setlist[k])): | ||
160 | + if Setlist[k][j][1] == 0: | ||
161 | + Setlist[k][j][1] = -1 | ||
162 | + else: | ||
163 | + Setlist[k][j][1] -= 1 | ||
164 | + else: | ||
165 | + if Stock_data[i+1][2] > 0: # 다음날 주가 등락률이 양수면 | ||
166 | + for j in range(1,len(Setlist[k])): #어제뉴스는 호재 취급 | ||
167 | + if Setlist[k][j][1] == 0: | ||
168 | + Setlist[k][j][1] = 1 | ||
169 | + else: | ||
170 | + Setlist[k][j][1] += 1 | ||
171 | + elif Stock_data[i+1][2] < 0: | ||
172 | + for j in range(1,len(Setlist[k])): # 음수면 어제 뉴스는 악재 취급 | ||
173 | + if Setlist[k][j][1] == 0: | ||
174 | + Setlist[k][j][1] = -1 | ||
175 | + else: | ||
176 | + Setlist[k][j][1] -= 1 | ||
177 | + i += 1 | ||
178 | + | ||
179 | + else: | ||
180 | + if Calpercentage(Stock_data[i][3], Stock_data[i][4]) > 2: # 당일 시가 대비 고가가 2퍼 높을때 | ||
181 | + for j in range(1, len(Setlist[k])): | ||
182 | + if Setlist[k][j][1] == 0: | ||
183 | + Setlist[k][j][1] = 1 | ||
184 | + else: | ||
185 | + Setlist[k][j][1] += 1 | ||
186 | + elif Calpercentage(Stock_data[i][3], Stock_data[i][5]) < -2: # 당일 시가 대비 저가가 2퍼 낮을 때 | ||
187 | + for j in range(1, len(Setlist[k])): | ||
188 | + if Setlist[k][j][1] == 0: | ||
189 | + Setlist[k][j][1] = -1 | ||
190 | + else: | ||
191 | + Setlist[k][j][1] -= 1 | ||
192 | + else: | ||
193 | + if Stock_data[i + 1][2] > 0: # 다음날 주가 등락률이 양수면 | ||
194 | + for j in range(1, len(Setlist[k])): # 어제뉴스는 호재 취급 | ||
195 | + if Setlist[k][j][1] == 0: | ||
196 | + Setlist[k][j][1] = 1 | ||
197 | + else: | ||
198 | + Setlist[k][j][1] += 1 | ||
199 | + elif Stock_data[i + 1][2] < 0: | ||
200 | + for j in range(1, len(Setlist[k])): # 음수면 어제 뉴스는 악재 취급 | ||
201 | + if Setlist[k][j][1] == 0: | ||
202 | + Setlist[k][j][1] = -1 | ||
203 | + else: | ||
204 | + Setlist[k][j][1] -= 1 | ||
205 | + | ||
206 | + i += 1 | ||
207 | + #<이거 삭제서 hmm한번 더 돌려보기 | ||
208 | + | ||
209 | +print(Setlist) | ||
210 | + | ||
211 | +#df_Setlist = pd.DataFrame(Setlist) | ||
212 | +#df_Setlist.to_excel(Stockfilename+' KNU_New.xlsx',sheet_name='sheet1') | ||
213 | + | ||
214 | +Setlist_w = [] | ||
215 | +for i in range(len(Setlist)): | ||
216 | + Setlist_w.append([]) | ||
217 | + for j in range(1, len(Setlist[i])): | ||
218 | + Setlist_w[i].append(Setlist[i][j][0]) # 극성 제외 단어만 추출 | ||
219 | + | ||
220 | +counter = {} | ||
221 | +for i in range(len(Setlist_w)): | ||
222 | + counter[i] = collections.Counter(Setlist_w[i]) # 누적치 | ||
223 | + | ||
224 | +for i in range(len(Setlist_w)): | ||
225 | + Setlist_w[i] = list(zip(counter[i].keys(), counter[i].values())) # 튜플 리스트화 [(값, 값)] | ||
226 | + | ||
227 | +Plist = [] | ||
228 | +for i in range(len(Setlist_w)): | ||
229 | + Plist.append([]) | ||
230 | + for j in range(len(Setlist_w[i])): | ||
231 | + Plist[i].append(list(Setlist_w[i][j])) # 튜플 -> 리스트화 [[값, 값]] | ||
232 | + | ||
233 | +for i in range(len(Plist)): | ||
234 | + for j in range(len(Plist[i])): | ||
235 | + Plist[i][j][1] = 0 # 극성 0으로 초기화 | ||
236 | + | ||
237 | +for i in range(len(Setlist)): | ||
238 | + for j in range(1, len(Setlist[i])): | ||
239 | + for h in range(len(Plist[i])): | ||
240 | + if Setlist[i][j][0] == Plist[i][h][0]: | ||
241 | + Plist[i][h][1] += Setlist[i][j][1] #누적치 | ||
242 | +vert_p=[] #수직 중복 삭제 | ||
243 | +for i in range(len(Plist)): | ||
244 | + for j in range(len(Plist[i])): | ||
245 | + vert_p.append(Plist[i][j]) #단어만 넣기 | ||
246 | +#print(vert_p) | ||
247 | +vert_p.sort(key=lambda x:x[0]) #단어 기준으로 정렬 | ||
248 | +for i in range(len(vert_p)-2): #단어 비교해서 같으면 누적 다르면 값 바꾸기 | ||
249 | + for j in range(i+1,len(vert_p)): | ||
250 | + if vert_p[i][0] == vert_p[j][0]: | ||
251 | + vert_p[i][1]+=vert_p[j][1] | ||
252 | + vert_p[j]=['0',0] | ||
253 | +print(vert_p) | ||
254 | +vert_p=[i for i in vert_p if not '0' in i] #'0'들어간 열 제거 | ||
255 | +df_ver= pd.DataFrame(vert_p) | ||
256 | +df_ver.to_excel(Stockfilename+' KNU_New_Vdic2.xlsx',sheet_name='sheet1') | ||
257 | + | ||
258 | +####키워드파일 월별로 돌려서 그 나온 결과 파일들을 합쳐서 Merge_dictionay.py에 넣어서 사전 만들기 #### | ||
259 | + | ||
260 | + |
캡스톤디자인1/소스코드/KnuSentiLex/README.md
0 → 100644
1 | +KNU 한국어 감성사전 | ||
2 | + | ||
3 | + | ||
4 | +작성자 : 온병원, 박상민, 나철원 | ||
5 | +작성일 : 2018.05.11 | ||
6 | +소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab | ||
7 | +홈페이지 : http://dilab.kunsan.ac.kr/ | ||
8 | + | ||
9 | + | ||
10 | +<> 개요 | ||
11 | +- 음식, 여행지, 영화, 음악, 자동차, 스마트폰, 강의, 컴퓨터 등 특정 도메인에서 사용되는 긍부정어보다는 인간의 보편적인 기본 감정 표현을 나타내는 긍부정어로 구성된다. 보편적인 긍정 표현으로는 ‘감동받다’, ‘가치 있다’, ‘감사하다’와 보편적인 부정 표현으로는 ‘그저 그렇다’, ‘도저히 ~수 없다’, ‘열 받다’ 등을 둘 수 있다. | ||
12 | +- 각 도메인의 감성사전을 빠르게 구축하기 위한 기초 자료로 활용하기 위해 개발되었음 | ||
13 | +- 본 한국어 감성사전은 다음과 같은 소스로부터 통합되어 개발되었음 | ||
14 | + (1) 국립국어원 표준국어대사전의 뜻풀이(glosses) 분석을 통한 긍부정 추출(이 방법을 통해 대부분의 긍부정어 추출) | ||
15 | + (2) 김은영(2004)의 긍부정어 목록 | ||
16 | + (3) SentiWordNet 및 SenticNet-5.0에서 주로 사용되는 긍부정어 번역 | ||
17 | + (4) 최근 온라인에서 많이 사용되는 축약어 및 긍부정 이모티콘 목록 | ||
18 | +- 총 14,843개의 1-gram, 2-gram, 관용구, 문형, 축약어, 이모티콘 등에 대한 긍정, 중립, 부정 판별 및 정도(degree)값 계산 | ||
19 | + | ||
20 | + | ||
21 | +<> 특징 | ||
22 | +- 표준국어대사전을 구성하는 각 단어의 뜻풀이를 분석하여 긍부정어를 추출하였음 | ||
23 | +- 1-gram, 2-gram, n-gram(어구, 문형), 축약어, 이모티콘 등의 다양한 종류의 긍부정어 포함 | ||
24 | +- 영화, 음악, 자동차 등 어떤 도메인에도 사용될 수 있는 보편적인 긍부정어로 구성 | ||
25 | + | ||
26 | + | ||
27 | +<> 한국어 감성사전 개발 방법 | ||
28 | +- 표준국어대사전을 구성하는 형용사, 부사, 동사, 명사의 모든 뜻풀이에 대한 긍정, 중립, 부정으로 분류하기 위해 Bi-LSTM 딥 러닝 모델 사용 | ||
29 | +- Bi-LSTM 모델은 각 뜻풀이의 확률 값을 계산하여 최종적으로 300,000개에 달하는 뜻풀이를 긍정, 중립, 부정으로 분류하며, 긍정으로 분류된 뜻풀이 그룹에서 top-2500 긍정어 추출하며, 비슷한 방식으로 top-2500 부정어 추출 (상위 2,500개의 뜻풀이만을 대상으로 긍부정어를 찾는 이유는 2,500개 이상 넘어가면 기추출된 긍부정어들이 반복적으로 추출되기 때문) | ||
30 | +- 최소 3명의 평가자들이 각 단어의 긍정, 중립, 부정을 판별하고, 이의가 있을 경우 토론을 통해 합의를 이루는 방식 사용 (voting 방식) | ||
31 | +- 각 단어의 긍부정 판별은 (1) 매우 부정 (2) 부정 (3) 중립 (4) 긍정 (5) 매우 긍정 등 리커트 척도를 이용하여 평가자들의 합의를 통해 선택 | ||
32 | + | ||
33 | + | ||
34 | +<> 긍부정어 통계 | ||
35 | +----------------------- | ||
36 | + 긍부정어 : 단어개수 | ||
37 | +----------------------- | ||
38 | + 1-gram 긍부정어 : 6,223 | ||
39 | + 2-gram 긍부정어 : 7,861 | ||
40 | + 긍부정 어구 : 278 | ||
41 | + 긍부정 문형 : 253 | ||
42 | + 긍부정 축약어 : 174 | ||
43 | + 긍부정 이모티콘 : 54 | ||
44 | +----------------------- | ||
45 | + 1-gram 긍부정어 : 6,451 | ||
46 | + 2-gram 긍부정어 : 8,135 | ||
47 | + 3-gram 긍부정어 : 226 | ||
48 | + 4-gram 긍부정어 : 20 | ||
49 | + 5-gram 긍부정어 : 5 | ||
50 | + 6-gram 긍부정어 : 3 | ||
51 | + 7-gram 긍부정어 : 2 | ||
52 | + 8-gram 긍부정어 : 1 | ||
53 | +----------------------- | ||
54 | + 매우 긍정 : 2,597 | ||
55 | + 긍 정 : 2,266 | ||
56 | + 중 립 : 154 | ||
57 | + 부 정 : 5,029 | ||
58 | + 매우 부정 : 4,797 | ||
59 | + | ||
60 | + | ||
61 | +<> 사용 방법 | ||
62 | +- knusl.py파일 실행 | ||
63 | +- 단어 입력을 통해 해당 단어의 행태소 및 극성 정도값 출력 | ||
64 | + | ||
65 | + | ||
66 | +<> 참고문헌 | ||
67 | +[1] 표준국어대사전 뜻풀이, https://github.com/mrchypark/stdkor | ||
68 | +[2] 긍부정 축약어, https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
69 | +[3] 긍부정 이모티콘, https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
70 | +[4] SentiWordNet_3.0.0_20130122, http://sentiwordnet.isti.cnr.it/ | ||
71 | +[5] SenticNet-5.0, http://sentic.net/ | ||
72 | +[6] 감정단어사전0603, http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
73 | +[7] 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
74 | +[8] 트위터 형태소 분석기, https://github.com/twitter/twitter-korean-text | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/KnuSentiLex/ReadMe.txt
0 → 100644
1 | +KNU 한국어 감성사전 | ||
2 | + | ||
3 | + | ||
4 | +작성자 : 온병원, 박상민, 나철원 | ||
5 | +작성일 : 2018.05.11 | ||
6 | +소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab | ||
7 | +홈페이지 : http://dilab.kunsan.ac.kr/ | ||
8 | + | ||
9 | + | ||
10 | +<> 개요 | ||
11 | +- 음식, 여행지, 영화, 음악, 자동차, 스마트폰, 강의, 컴퓨터 등 특정 도메인에서 사용되는 긍부정어보다는 인간의 보편적인 기본 감정 표현을 나타내는 긍부정어로 구성된다. 보편적인 긍정 표현으로는 ‘감동받다’, ‘가치 있다’, ‘감사하다’와 보편적인 부정 표현으로는 ‘그저 그렇다’, ‘도저히 ~수 없다’, ‘열 받다’ 등을 둘 수 있다. | ||
12 | +- 각 도메인의 감성사전을 빠르게 구축하기 위한 기초 자료로 활용하기 위해 개발되었음 | ||
13 | +- 본 한국어 감성사전은 다음과 같은 소스로부터 통합되어 개발되었음 | ||
14 | + (1) 국립국어원 표준국어대사전의 뜻풀이(glosses) 분석을 통한 긍부정 추출(이 방법을 통해 대부분의 긍부정어 추출) | ||
15 | + (2) 김은영(2004)의 긍부정어 목록 | ||
16 | + (3) SentiWordNet 및 SenticNet-5.0에서 주로 사용되는 긍부정어 번역 | ||
17 | + (4) 최근 온라인에서 많이 사용되는 축약어 및 긍부정 이모티콘 목록 | ||
18 | +- 총 14,843개의 1-gram, 2-gram, 관용구, 문형, 축약어, 이모티콘 등에 대한 긍정, 중립, 부정 판별 및 정도(degree)값 계산 | ||
19 | + | ||
20 | + | ||
21 | +<> 특징 | ||
22 | +- 표준국어대사전을 구성하는 각 단어의 뜻풀이를 분석하여 긍부정어를 추출하였음 | ||
23 | +- 1-gram, 2-gram, n-gram(어구, 문형), 축약어, 이모티콘 등의 다양한 종류의 긍부정어 포함 | ||
24 | +- 영화, 음악, 자동차 등 어떤 도메인에도 사용될 수 있는 보편적인 긍부정어로 구성 | ||
25 | + | ||
26 | + | ||
27 | +<> 한국어 감성사전 개발 방법 | ||
28 | +- 표준국어대사전을 구성하는 형용사, 부사, 동사, 명사의 모든 뜻풀이에 대한 긍정, 중립, 부정으로 분류하기 위해 Bi-LSTM 딥 러닝 모델 사용 | ||
29 | +- Bi-LSTM 모델은 각 뜻풀이의 확률 값을 계산하여 최종적으로 300,000개에 달하는 뜻풀이를 긍정, 중립, 부정으로 분류하며, 긍정으로 분류된 뜻풀이 그룹에서 top-2500 긍정어 추출하며, 비슷한 방식으로 top-2500 부정어 추출 (상위 2,500개의 뜻풀이만을 대상으로 긍부정어를 찾는 이유는 2,500개 이상 넘어가면 기추출된 긍부정어들이 반복적으로 추출되기 때문) | ||
30 | +- 최소 3명의 평가자들이 각 단어의 긍정, 중립, 부정을 판별하고, 이의가 있을 경우 토론을 통해 합의를 이루는 방식 사용 (voting 방식) | ||
31 | +- 각 단어의 긍부정 판별은 (1) 매우 부정 (2) 부정 (3) 중립 (4) 긍정 (5) 매우 긍정 등 리커트 척도를 이용하여 평가자들의 합의를 통해 선택 | ||
32 | + | ||
33 | + | ||
34 | +<> 긍부정어 통계 | ||
35 | +--------------------------- | ||
36 | + 긍부정어 : 단어개수 | ||
37 | +--------------------------- | ||
38 | + 1-gram 긍부정어 : 6,223 | ||
39 | + 2-gram 긍부정어 : 7,861 | ||
40 | + 긍부정 어구 : 278 | ||
41 | + 긍부정 문형 : 253 | ||
42 | + 긍부정 축약어 : 174 | ||
43 | + 긍부정 이모티콘 : 54 | ||
44 | +--------------------------- | ||
45 | + 1-gram 긍부정어 : 6,451 | ||
46 | + 2-gram 긍부정어 : 8,135 | ||
47 | + 3-gram 긍부정어 : 226 | ||
48 | + 4-gram 긍부정어 : 20 | ||
49 | + 5-gram 긍부정어 : 5 | ||
50 | + 6-gram 긍부정어 : 3 | ||
51 | + 7-gram 긍부정어 : 2 | ||
52 | + 8-gram 긍부정어 : 1 | ||
53 | +--------------------------- | ||
54 | + 매우 긍정 : 2,597 | ||
55 | + 긍 정 : 2,266 | ||
56 | + 중 립 : 154 | ||
57 | + 부 정 : 5,029 | ||
58 | + 매우 부정 : 4,797 | ||
59 | + | ||
60 | + | ||
61 | +<> 사용 방법 | ||
62 | +- knusl.py 파일과 SentiWord_info.json 파일을 동일한 위치에 위치시키고 knusl.py파일 실행 | ||
63 | +- 단어 입력을 통해 해당 단어의 행태소 및 극성 정도값 출력 | ||
64 | + | ||
65 | + | ||
66 | +<> 참고문헌 | ||
67 | +[1] 표준국어대사전 뜻풀이, https://github.com/mrchypark/stdkor | ||
68 | +[2] 긍부정 축약어, https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
69 | +[3] 긍부정 이모티콘, https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
70 | +[4] SentiWordNet_3.0.0_20130122, http://sentiwordnet.isti.cnr.it/ | ||
71 | +[5] SenticNet-5.0, http://sentic.net/ | ||
72 | +[6] 감정단어사전0603, http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
73 | +[7] 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
74 | +[8] 트위터 형태소 분석기, https://github.com/twitter/twitter-korean-text | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/KnuSentiLex/SentiWord_Dict.txt
0 → 100644
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
캡스톤디자인1/소스코드/KnuSentiLex/knusl.py
0 → 100644
1 | +# KNU 한국어 감성사전 | ||
2 | +# 작성자 : 온병원, 박상민, 나철원 | ||
3 | +# 소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab | ||
4 | +# 홈페이지 : dilab.kunsan.ac.kr | ||
5 | +# 작성일 : 2018.05.14 | ||
6 | +# 뜻풀이 데이터 출처 : https://github.com/mrchypark/stdkor | ||
7 | +# 신조어 데이터 출처 : https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
8 | +# 이모티콘 데이터 출처: https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
9 | +# SentiWordNet_3.0.0_20130122 데이터 출처 : http://sentiwordnet.isti.cnr.it/ | ||
10 | +# SenticNet-5.0 데이터 출처 : http://sentic.net/ | ||
11 | +# 감정단어사전0603 데이터 출처 : http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
12 | +# 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
13 | + | ||
14 | + | ||
15 | +#-*-coding:utf-8-*- | ||
16 | + | ||
17 | +import json | ||
18 | + | ||
19 | +class KnuSL(): | ||
20 | + | ||
21 | + def data_list(wordname): | ||
22 | + with open('data/SentiWord_info.json', encoding='utf-8-sig', mode='r') as f: | ||
23 | + data = json.load(f) | ||
24 | + result = ['None','None'] | ||
25 | + for i in range(0, len(data)): | ||
26 | + if data[i]['word'] == wordname: | ||
27 | + result.pop() | ||
28 | + result.pop() | ||
29 | + result.append(data[i]['word_root']) | ||
30 | + result.append(data[i]['polarity']) | ||
31 | + | ||
32 | + r_word = result[0] | ||
33 | + s_word = result[1] | ||
34 | + | ||
35 | + print('어근 : ' + r_word) | ||
36 | + print('극성 : ' + s_word) | ||
37 | + | ||
38 | + | ||
39 | + return r_word, s_word | ||
40 | + | ||
41 | +if __name__ == "__main__": | ||
42 | + | ||
43 | + ksl = KnuSL | ||
44 | + | ||
45 | + print("\nKNU 한국어 감성사전입니다~ :)") | ||
46 | + print("사전에 단어가 없는 경우 결과가 None으로 나타납니다!!!") | ||
47 | + print("종료하시려면 #을 입력해주세요!!!") | ||
48 | + print("-2:매우 부정, -1:부정, 0:중립 or Unkwon, 1:긍정, 2:매우 긍정") | ||
49 | + print("\n") | ||
50 | + | ||
51 | + while(True): | ||
52 | + wordname = input("word : ") | ||
53 | + wordname = wordname.strip(" ") | ||
54 | + if wordname != "#": | ||
55 | + print(ksl.data_list(wordname)) | ||
56 | + print("\n") | ||
57 | + | ||
58 | + | ||
59 | + elif wordname == "#": | ||
60 | + print("\n이용해주셔서 감사합니다~ :)") | ||
61 | + break |
캡스톤디자인1/소스코드/KnuSentiLex/neg_pol_word.txt
0 → 100644
This diff could not be displayed because it is too large.
1 | +출처 | ||
2 | + | ||
3 | +1) 표준국어대사전 뜻풀이 | ||
4 | +-> https://github.com/mrchypark/stdkor | ||
5 | +2) 신조어 | ||
6 | +-> https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
7 | +3) 이모티콘 | ||
8 | +-> https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
9 | +4) SentiWordNet_3.0.0_20130122 | ||
10 | +-> http://sentiwordnet.isti.cnr.it/ | ||
11 | +5) SenticNet-5.0 | ||
12 | +-> http://sentic.net/ | ||
13 | +6) 감정단어사전0603 | ||
14 | +-> http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
15 | +7) 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
16 | + | ||
17 | + | ||
18 | +단어 수 : 154 | ||
19 | +극성 : 중립 or Unknown | ||
20 | + | ||
21 | +:p | ||
22 | +8-) | ||
23 | +B-) | ||
24 | +가까스로 | ||
25 | +가라앉다 | ||
26 | +가라앉지 않은 | ||
27 | +가르침을 받아 | ||
28 | +가리지 않고 | ||
29 | +감싸고 달래다 | ||
30 | +강구하다 | ||
31 | +개회하다 | ||
32 | +격동시키다 | ||
33 | +격하다 | ||
34 | +고부라지거나 | ||
35 | +고부라지거나 비틀어지며 | ||
36 | +골똘하게 | ||
37 | +공격하다 | ||
38 | +공적의 | ||
39 | +교관하다 | ||
40 | +굳은 | ||
41 | +굳은 상태로 | ||
42 | +굽히지 않는 | ||
43 | +권세를 꺾다 | ||
44 | +긁어 | ||
45 | +긴절하다 | ||
46 | +긴절히 | ||
47 | +뉘우치다 | ||
48 | +뉘우침 | ||
49 | +능청스럽게 | ||
50 | +능청스럽게 굴다 | ||
51 | +더 필요한 | ||
52 | +더들다 | ||
53 | +더듬는 | ||
54 | +더듬는 모양 | ||
55 | +덮어 주다 | ||
56 | +도도하게 | ||
57 | +도도하게 행동하다 | ||
58 | +떠들썩하게 | ||
59 | +뜨겁다 | ||
60 | +뜻이 강하다 | ||
61 | +마는 둥 | ||
62 | +마음대로 | ||
63 | +마음대로 하다 | ||
64 | +매우 조심스러움 | ||
65 | +매우 조심스럽게 | ||
66 | +머리가 | ||
67 | +모양 | ||
68 | +몹시 희다 | ||
69 | +못 | ||
70 | +미덥지 | ||
71 | +밀려나지 않고 | ||
72 | +바닥이 훤하게 | ||
73 | +바라거나 | ||
74 | +바라거나 탐내는 | ||
75 | +바라는 | ||
76 | +바람이 없고 | ||
77 | +박복함 | ||
78 | +발열과 | ||
79 | +발열이 | ||
80 | +배우는 | ||
81 | +배워지고 | ||
82 | +버릇 | ||
83 | +버젓하지 | ||
84 | +벅차다 | ||
85 | +번드럽게 | ||
86 | +번드럽다 | ||
87 | +번지르르하게 | ||
88 | +번지르르하게 나다 | ||
89 | +벌을 | ||
90 | +벌을 주다 | ||
91 | +벙글거리며 | ||
92 | +보고 싶거나 | ||
93 | +부르르 | ||
94 | +부르르하다 | ||
95 | +분발하여 | ||
96 | +분발하여 일어날 | ||
97 | +붓거나 부풀었던 것이 줄어들어 본래의 모습대로 되다 | ||
98 | +사고가 | ||
99 | +사정을 살피다 | ||
100 | +삼연히 | ||
101 | +성 | ||
102 | +성을 | ||
103 | +성이 | ||
104 | +성하고 | ||
105 | +성하고 쇠함을 | ||
106 | +소동을 | ||
107 | +수고가 | ||
108 | +수고가 되는 | ||
109 | +수더분하거나 | ||
110 | +수더분하게 | ||
111 | +수줍다 | ||
112 | +수줍음만 | ||
113 | +수줍음만 타는 | ||
114 | +순종하는 모양 | ||
115 | +시간이 더 | ||
116 | +쓰러뜨리다 | ||
117 | +앙큼하다 | ||
118 | +억척스럽고 | ||
119 | +역사적인 | ||
120 | +예사롭게 | ||
121 | +오점 | ||
122 | +우스운 말이나 | ||
123 | +울리는 힘이 | ||
124 | +웃기는 우스운 | ||
125 | +웃기려고 | ||
126 | +웃기려고 일부러 | ||
127 | +원하다 | ||
128 | +윽윽거리다 | ||
129 | +윽윽대다 | ||
130 | +윽윽하다 | ||
131 | +익살 소설 | ||
132 | +익살궂다 | ||
133 | +익살극 | ||
134 | +익살맞다 | ||
135 | +익살배기 | ||
136 | +익살스럽게 | ||
137 | +익살스럽게 꾸민 | ||
138 | +익살스럽게 대답함 | ||
139 | +익살스럽다 | ||
140 | +익살스레 | ||
141 | +익살을 | ||
142 | +익살을 많이 | ||
143 | +익살을 부리는 | ||
144 | +익살쟁이 | ||
145 | +일부러 우스운 | ||
146 | +자기에게 유리하도록 | ||
147 | +잘못을 깨치고 | ||
148 | +절실하게 | ||
149 | +절실하다 | ||
150 | +존속하다 | ||
151 | +종횡무진 | ||
152 | +좇다 | ||
153 | +줄 만하다 | ||
154 | +중간에서 화해하거나 | ||
155 | +질기다 | ||
156 | +탈이 없다 | ||
157 | +탐내는 | ||
158 | +피 | ||
159 | +필요하고 절실하게 | ||
160 | +필요하고 절실하다 | ||
161 | +행동하기가 | ||
162 | +행동하기가 조심스럽고 | ||
163 | +행동하는 | ||
164 | +혹하여 달뜬 | ||
165 | +혹하여 달뜸 | ||
166 | +희롱질하다 | ||
167 | +희희덕거리다 | ||
168 | +희희덕대다 | ||
169 | +힁허케 | ||
170 | +히들거리다 | ||
171 | +히들히들 | ||
172 | +히들히들하다 | ||
173 | +힘쓰다 | ||
174 | +반신반의하다 |
캡스톤디자인1/소스코드/KnuSentiLex/pos_pol_word.txt
0 → 100644
This diff is collapsed. Click to expand it.
캡스톤디자인1/소스코드/KnuSentiLex/src/knusl.py
0 → 100644
1 | +# KNU 한국어 감성사전 | ||
2 | +# 작성자 : 온병원, 박상민, 나철원 | ||
3 | +# 소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab | ||
4 | +# 홈페이지 : dilab.kunsan.ac.kr | ||
5 | +# 작성일 : 2018.05.14 | ||
6 | +# 뜻풀이 데이터 출처 : https://github.com/mrchypark/stdkor | ||
7 | +# 신조어 데이터 출처 : https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
8 | +# 이모티콘 데이터 출처: https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
9 | +# SentiWordNet_3.0.0_20130122 데이터 출처 : http://sentiwordnet.isti.cnr.it/ | ||
10 | +# SenticNet-5.0 데이터 출처 : http://sentic.net/ | ||
11 | +# 감정단어사전0603 데이터 출처 : http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
12 | +# 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
13 | + | ||
14 | + | ||
15 | +#-*-coding:utf-8-*- | ||
16 | + | ||
17 | +import json | ||
18 | + | ||
19 | +class KnuSL(): | ||
20 | + | ||
21 | + def data_list(wordname): | ||
22 | + with open('../data/SentiWord_info2.json', encoding='utf-8-sig', mode='r') as f: | ||
23 | + data = json.load(f) | ||
24 | + result = ['None','None'] | ||
25 | + for i in range(0, len(data)): | ||
26 | + if data[i]['word'] == wordname: | ||
27 | + result.pop() | ||
28 | + result.pop() | ||
29 | + result.append(data[i]['word_root']) | ||
30 | + result.append(data[i]['polarity']) | ||
31 | + | ||
32 | + r_word = result[0] | ||
33 | + s_word = result[1] | ||
34 | + | ||
35 | + print('어근 : ' + r_word) | ||
36 | + print('극성 : ' + s_word) | ||
37 | + | ||
38 | + | ||
39 | + return r_word, s_word | ||
40 | + | ||
41 | +if __name__ == "__main__": | ||
42 | + | ||
43 | + ksl = KnuSL | ||
44 | + | ||
45 | + print("\nKNU 한국어 감성사전입니다~ :)") | ||
46 | + print("사전에 단어가 없는 경우 결과가 None으로 나타납니다!!!") | ||
47 | + print("종료하시려면 #을 입력해주세요!!!") | ||
48 | + print("-2:매우 부정, -1:부정, 0:중립 or Unkwon, 1:긍정, 2:매우 긍정") | ||
49 | + print("\n") | ||
50 | + | ||
51 | + while(True): | ||
52 | + wordname = input("word : ") | ||
53 | + wordname = wordname.strip(" ") | ||
54 | + if wordname != "#": | ||
55 | + print(ksl.data_list(wordname)) | ||
56 | + print("\n") | ||
57 | + | ||
58 | + | ||
59 | + elif wordname == "#": | ||
60 | + print("\n이용해주셔서 감사합니다~ :)") | ||
61 | + break |
캡스톤디자인1/소스코드/MergeDictionary.py
0 → 100644
1 | +import warnings | ||
2 | + | ||
3 | +warnings.simplefilter(("ignore")) | ||
4 | +import openpyxl | ||
5 | +import pandas as pd | ||
6 | + | ||
7 | +# 000_KNU_New_Vdic2.xlsx 파일 넣기 | ||
8 | + | ||
9 | +Stockfilefolder = input("종목시세폴더입력: ") | ||
10 | +Stockfilename = input("시세파일이름입력:") | ||
11 | +fileStock = "C:/Users/yangj/PycharmProjects/pythonProject1/뉴스키워드/" + Stockfilefolder + "/" + Stockfilename + ".xlsx" | ||
12 | +Stockfile = openpyxl.load_workbook(fileStock) # 파일이름입력 | ||
13 | +stock_ws = Stockfile.active | ||
14 | +Stock_data = [] # list 타입 | ||
15 | +i = 0 | ||
16 | +for row in stock_ws.rows: | ||
17 | + Stock_data.append([]) | ||
18 | + for cell in row: | ||
19 | + if cell.value != None: | ||
20 | + Stock_data[i].append(cell.value) | ||
21 | + i += 1 | ||
22 | +del Stock_data[0] | ||
23 | +for i in range(len(Stock_data)): | ||
24 | + del Stock_data[i][0] | ||
25 | +#print(Stock_data) | ||
26 | + | ||
27 | + | ||
28 | +vert_p = [] # 수직 중복 삭제 | ||
29 | +for i in range(len(Stock_data)): | ||
30 | + vert_p.append([]) | ||
31 | + for j in range(len(Stock_data[i])): | ||
32 | + vert_p[i].append(Stock_data[i][j]) # 단어만 넣기 | ||
33 | +print(vert_p) | ||
34 | + | ||
35 | +vert_p.sort(key=lambda x: x[0]) # 단어 기준으로 정렬 | ||
36 | +for i in range(len(vert_p) - 2): # 단어 비교해서 같으면 누적, 다르면 값 바꾸기 | ||
37 | + for j in range(i + 1, len(vert_p)): | ||
38 | + if vert_p[i][0] == vert_p[j][0] : | ||
39 | + vert_p[i][1] += vert_p[j][1] | ||
40 | + vert_p[j] = ['0', 0] | ||
41 | + if str.isalnum(vert_p[i][0]) == False: | ||
42 | + vert_p[i] =['0', 0] | ||
43 | + | ||
44 | +vert_p = [i for i in vert_p if not '0' in i] # '0'들어간 열 제거 | ||
45 | +df_ver = pd.DataFrame(vert_p) | ||
46 | +df_ver.to_excel(Stockfilename + ' Stock_dictionary2.xlsx', sheet_name='sheet1') | ||
47 | +####사전 완성#### |
캡스톤디자인1/소스코드/SentiWord_Dict.txt
0 → 100644
This diff could not be displayed because it is too large.
캡스톤디자인1/소스코드/crawlling.py
0 → 100644
1 | +import warnings | ||
2 | +warnings.simplefilter(("ignore")) | ||
3 | +import konlpy | ||
4 | +from konlpy.tag import * | ||
5 | +import openpyxl | ||
6 | +import pandas as pd | ||
7 | +from math import log10 | ||
8 | + | ||
9 | +#형태소분석라이브러리 | ||
10 | +#okt = Okt() | ||
11 | +hannanum = Hannanum() | ||
12 | +#filename= input("분석할 파일이름 입력:") #파일명 | ||
13 | +filefolder = input("종목폴더입력: ") | ||
14 | +filename=input("파일이름입력:") | ||
15 | +filepos = "C:/Users/yangj/PycharmProjects/pythonProject1/뉴스크롤링/"+filefolder+"/" + filename + ".xlsx" | ||
16 | +kfile = openpyxl.load_workbook(filepos)#파일이름입력 | ||
17 | +sheet=kfile.worksheets[0]#sheet1에 있는 데이터 가죠오기 | ||
18 | +#print(sheet) | ||
19 | +data=[] | ||
20 | +for row in sheet.rows: #data에 크롤링한 뉴스 제목들 저장 | ||
21 | + data.append( | ||
22 | + row[1].value | ||
23 | + ) | ||
24 | +#print(data) | ||
25 | +#print(type(data[1])) #str | ||
26 | +#newData=[] | ||
27 | +newData2=[] | ||
28 | +#for i in range(len(data)): | ||
29 | +# newData.append(okt.nouns(data[i])) #명사만 추출okt | ||
30 | +#print(newData) | ||
31 | +for i in range(len(data)-1): | ||
32 | + newData2.append(hannanum.nouns(data[i+1])) #명사만 추출hannanum가 okt보다 성능좋음 | ||
33 | +#print(newData2) | ||
34 | +#print(type(newData2))#newData2 데이터 형식은 list | ||
35 | +#df= pd.DataFrame.from_records(newData2)#newData2 dataframe으로 변환 | ||
36 | +#df.to_excel(filename+'_명사추출'+'.xlsx') #파일명의 엑셀로 변환 | ||
37 | + | ||
38 | +# -- TF-IDF function | ||
39 | + | ||
40 | +def f(t, d): | ||
41 | + # d is document == tokens | ||
42 | + return d.count(t) | ||
43 | + | ||
44 | +def tf(t, d): | ||
45 | + # d is document == tokens | ||
46 | + return 0.5 + 0.5*f(t,d)/max([f(w,d) for w in d]) | ||
47 | + | ||
48 | +def idf(t, D): | ||
49 | + # D is documents == document list | ||
50 | + numerator = len(D) | ||
51 | + denominator = 1 + len([ True for d in D if t in d]) | ||
52 | + return log10(numerator/denominator) | ||
53 | + | ||
54 | +def tfidf(t, d, D): | ||
55 | + return tf(t,d)*idf(t, D) | ||
56 | + | ||
57 | +def tfidfScorer(D): | ||
58 | + result = [] | ||
59 | + for d in D: | ||
60 | + result.append([(t, tfidf(t, d, D)) for t in d] ) | ||
61 | + return result | ||
62 | + | ||
63 | +#newData2는 명사추출을 통해 분리되어있음 | ||
64 | + | ||
65 | +if __name__ == '__main__': | ||
66 | + corpus=[] | ||
67 | + for i in range(len(newData2)): | ||
68 | + corpus.append(newData2[i]) | ||
69 | + TfIf=[] #결과저장 | ||
70 | + for i, result in enumerate(tfidfScorer(corpus)): | ||
71 | + print('====== document[%d] ======' % i) | ||
72 | + print(result) | ||
73 | + | ||
74 | + #TfIf.append(result) | ||
75 | + | ||
76 | +#df= pd.DataFrame.from_records(TfIf)#TfIf dataframe으로 변환 | ||
77 | +#df.to_excel(filename+'_가중치추출'+'.xlsx') | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
캡스톤디자인1/소스코드/data/SentiWord_info.json
0 → 100644
This diff could not be displayed because it is too large.
캡스톤디자인1/소스코드/knusl.py
0 → 100644
1 | +# KNU 한국어 감성사전 | ||
2 | +# 작성자 : 온병원, 박상민, 나철원 | ||
3 | +# 소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab | ||
4 | +# 홈페이지 : dilab.kunsan.ac.kr | ||
5 | +# 작성일 : 2018.05.14 | ||
6 | +# 뜻풀이 데이터 출처 : https://github.com/mrchypark/stdkor | ||
7 | +# 신조어 데이터 출처 : https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
8 | +# 이모티콘 데이터 출처: https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
9 | +# SentiWordNet_3.0.0_20130122 데이터 출처 : http://sentiwordnet.isti.cnr.it/ | ||
10 | +# SenticNet-5.0 데이터 출처 : http://sentic.net/ | ||
11 | +# 감정단어사전0603 데이터 출처 : http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
12 | +# 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
13 | + | ||
14 | + | ||
15 | +#-*-coding:utf-8-*- | ||
16 | + | ||
17 | +import json | ||
18 | + | ||
19 | +class KnuSL(): | ||
20 | + | ||
21 | + def data_list(wordname): | ||
22 | + with open('data/SentiWord_info.json', encoding='utf-8-sig', mode='r') as f: | ||
23 | + data = json.load(f) | ||
24 | + result = ['None','None'] | ||
25 | + for i in range(0, len(data)): | ||
26 | + if data[i]['word'] == wordname: | ||
27 | + result.pop() | ||
28 | + result.pop() | ||
29 | + result.append(data[i]['word_root']) | ||
30 | + result.append(data[i]['polarity']) | ||
31 | + | ||
32 | + r_word = result[0] | ||
33 | + s_word = result[1] | ||
34 | + | ||
35 | + print('어근 : ' + r_word) | ||
36 | + print('극성 : ' + s_word) | ||
37 | + | ||
38 | + | ||
39 | + return r_word, s_word | ||
40 | + | ||
41 | +if __name__ == "__main__": | ||
42 | + | ||
43 | + ksl = KnuSL | ||
44 | + | ||
45 | + print("\nKNU 한국어 감성사전입니다~ :)") | ||
46 | + print("사전에 단어가 없는 경우 결과가 None으로 나타납니다!!!") | ||
47 | + print("종료하시려면 #을 입력해주세요!!!") | ||
48 | + print("-2:매우 부정, -1:부정, 0:중립 or Unkwon, 1:긍정, 2:매우 긍정") | ||
49 | + print("\n") | ||
50 | + | ||
51 | + while(True): | ||
52 | + wordname = input("word : ") | ||
53 | + wordname = wordname.strip(" ") | ||
54 | + if wordname != "#": | ||
55 | + print(ksl.data_list(wordname)) | ||
56 | + print("\n") | ||
57 | + | ||
58 | + | ||
59 | + elif wordname == "#": | ||
60 | + print("\n이용해주셔서 감사합니다~ :)") | ||
61 | + break |
캡스톤디자인1/소스코드/kospiCompare.py
0 → 100644
1 | +# -*-coding:utf-8-*- | ||
2 | +import collections | ||
3 | +import json | ||
4 | + | ||
5 | +import warnings | ||
6 | + | ||
7 | +warnings.simplefilter(("ignore")) | ||
8 | +import openpyxl | ||
9 | +import pandas as pd | ||
10 | +import re | ||
11 | +from datetime import datetime | ||
12 | + | ||
13 | +########코스피 감성 판단 | ||
14 | +class KnuSL(): | ||
15 | + | ||
16 | + def data_list(wordname): | ||
17 | + with open('KnuSentiLex/data/SentiWord_info.json', encoding='utf-8-sig', mode='r') as f: | ||
18 | + data = json.load(f) | ||
19 | + result = [0, 0] | ||
20 | + | ||
21 | + for i in range(0, len(data)): | ||
22 | + if data[i]['word'] == wordname: | ||
23 | + result.pop() | ||
24 | + result.pop() | ||
25 | + result.append(data[i]['word_root']) | ||
26 | + result.append(int(data[i]['polarity'])) | ||
27 | + | ||
28 | + r_word = result[0] # 어근 | ||
29 | + s_word = result[1] # 극성 | ||
30 | + | ||
31 | + return s_word | ||
32 | + | ||
33 | + | ||
34 | +if __name__ == "__main__": | ||
35 | + ksl = KnuSL | ||
36 | + | ||
37 | + print("\nKNU 한국어 감성사전입니다~ :)") | ||
38 | + print("사전에 단어가 없는 경우 결과가 None으로 나타납니다!!!") | ||
39 | + print("종료하시려면 #을 입력해주세요!!!") | ||
40 | + print("-2:매우 부정, -1:부정, 0:중립 or Unkwon, 1:긍정, 2:매우 긍정") | ||
41 | + print("\n") | ||
42 | +######### | ||
43 | +Newsfilefolder = input("종목폴더입력: ") | ||
44 | +Newsfilename = input("파일이름입력:") | ||
45 | +Newsfilepos = "C:/Users/yangj/PycharmProjects/pythonProject1/뉴스키워드/" + Newsfilefolder + "/" + Newsfilename + ".xlsx" | ||
46 | +Newsfile = openpyxl.load_workbook(Newsfilepos) # 파일이름입력 | ||
47 | +ws = Newsfile.active | ||
48 | +data = [] | ||
49 | +date = [] | ||
50 | +i = 0 | ||
51 | +for row in ws.rows: | ||
52 | + data.append([]) | ||
53 | + date.append(row[1].value) | ||
54 | + for cell in row: | ||
55 | + if cell.value != None: | ||
56 | + data[i].append(cell.value) | ||
57 | + i += 1 | ||
58 | +del data[0] # 첫번째 의미없는 열 삭제 | ||
59 | +del date[0] | ||
60 | +for i in range(len(data)): | ||
61 | + del data[i][0] # 각 열의 첫번째 행 삭제 | ||
62 | +for i in range(len(data)): | ||
63 | + del data[i][0] # 각 열의 날짜 행 삭제 | ||
64 | + | ||
65 | +KNUdata = [] | ||
66 | +Tdata = [] | ||
67 | + | ||
68 | +for x in range(len(data)): | ||
69 | + KNUdata.append([]) | ||
70 | + Tdata.append([]) | ||
71 | + for y in range(len(data[x])): | ||
72 | + KNUdata[x].append(ksl.data_list(data[x][y])) | ||
73 | + Tdata[x].append([data[x][y], KNUdata[x][y]]) | ||
74 | + | ||
75 | +result = {'날짜': date, '단어, 극성': Tdata} | ||
76 | + | ||
77 | +df = pd.DataFrame(result) | ||
78 | + | ||
79 | +list_df = df.values.tolist() # dataframe list로 변경 | ||
80 | +new_date = [] # 날짜 중복 삭제 | ||
81 | +for v in date: | ||
82 | + if v not in new_date: | ||
83 | + new_date.append(v) | ||
84 | +# print(new_date) | ||
85 | + | ||
86 | +Setlist = [] # 날짜별 키워드 넣기 | ||
87 | +for v in range(len(new_date)): | ||
88 | + Setlist.append([]) | ||
89 | + Setlist[v].append(new_date[v]) | ||
90 | + for i in range(len(list_df)): | ||
91 | + for j in range(len(list_df[i][1])): | ||
92 | + if new_date[v] == list_df[i][0]: | ||
93 | + Setlist[v].append(list_df[i][1][j]) | ||
94 | + | ||
95 | +Stockfilefolder = input("종목시세폴더입력: ") | ||
96 | +Stockfilename = input("시세파일이름입력:") | ||
97 | +fileStock = "C:/Users/yangj/PycharmProjects/pythonProject1/종목별시세/" + Stockfilefolder + "/" + Stockfilename + ".xlsx" | ||
98 | +Stockfile = openpyxl.load_workbook(fileStock) # 파일이름입력 | ||
99 | +stock_ws = Stockfile.active | ||
100 | +Stock_data = [] # list 타입 | ||
101 | +i = 0 | ||
102 | +for row in stock_ws.rows: | ||
103 | + Stock_data.append([]) | ||
104 | + for cell in row: | ||
105 | + if cell.value != None: | ||
106 | + Stock_data[i].append(cell.value) | ||
107 | + i += 1 | ||
108 | +del Stock_data[0] | ||
109 | +for i in range(len(Stock_data)): | ||
110 | + del Stock_data[i][2] # 대비 삭제 | ||
111 | +for i in range(len(Stock_data)): | ||
112 | + del Stock_data[i][7] # 거래대금 삭제 | ||
113 | +for i in range(len(Stock_data)): | ||
114 | + del Stock_data[i][7] # 시가 총액 삭제 | ||
115 | + | ||
116 | + | ||
117 | +i = 0 | ||
118 | +for k in range(len(Setlist)): | ||
119 | + if (Stock_data[i][0].split('/') == Setlist[k][0].split('.')[:3]): # 날짜 비교 날짜가 같다면 | ||
120 | + if Stock_data[i][2] > 0: # 코스피 등락이 양수 | ||
121 | + for j in range(1, len(Setlist[k])): | ||
122 | + if Setlist[k][j][1] == 0: | ||
123 | + Setlist[k][j][1] = 1 | ||
124 | + else: | ||
125 | + Setlist[k][j][1] += 1 | ||
126 | + elif Stock_data[i][2] < 0: | ||
127 | + for j in range(1, len(Setlist[k])): # 음수면 어제 뉴스는 악재 취급 | ||
128 | + if Setlist[k][j][1] == 0: | ||
129 | + Setlist[k][j][1] = -1 | ||
130 | + else: | ||
131 | + Setlist[k][j][1] -= 1 | ||
132 | + i += 1 | ||
133 | + else: | ||
134 | + if Stock_data[i+1][2] > 0: # 다음날 주가 등락률이 양수면 | ||
135 | + for j in range(1, len(Setlist[k])): # 어제뉴스는 호재 취급 | ||
136 | + if Setlist[k][j][1] == 0: | ||
137 | + Setlist[k][j][1] = 1 | ||
138 | + else: | ||
139 | + Setlist[k][j][1] += 1 | ||
140 | + elif Stock_data[i+1][2] < 0: | ||
141 | + for j in range(1, len(Setlist[k])): # 음수면 어제 뉴스는 악재 취급 | ||
142 | + if Setlist[k][j][1] == 0: | ||
143 | + Setlist[k][j][1] = -1 | ||
144 | + else: | ||
145 | + Setlist[k][j][1] -= 1 | ||
146 | + | ||
147 | +Setlist_w = [] | ||
148 | +for i in range(len(Setlist)): | ||
149 | + Setlist_w.append([]) | ||
150 | + for j in range(1, len(Setlist[i])): | ||
151 | + Setlist_w[i].append(Setlist[i][j][0]) # 극성 제외 단어만 추출 | ||
152 | + | ||
153 | +counter = {} | ||
154 | +for i in range(len(Setlist_w)): | ||
155 | + counter[i] = collections.Counter(Setlist_w[i]) # 누적치 | ||
156 | + | ||
157 | +for i in range(len(Setlist_w)): | ||
158 | + Setlist_w[i] = list(zip(counter[i].keys(), counter[i].values())) # 튜플 리스트화 [(값, 값)] | ||
159 | + | ||
160 | +Plist = [] | ||
161 | +for i in range(len(Setlist_w)): | ||
162 | + Plist.append([]) | ||
163 | + for j in range(len(Setlist_w[i])): | ||
164 | + Plist[i].append(list(Setlist_w[i][j])) # 튜플 -> 리스트화 [[값, 값]] | ||
165 | + | ||
166 | +for i in range(len(Plist)): | ||
167 | + for j in range(len(Plist[i])): | ||
168 | + Plist[i][j][1] = 0 # 극성 0으로 초기화 | ||
169 | + | ||
170 | +for i in range(len(Setlist)): | ||
171 | + for j in range(1, len(Setlist[i])): | ||
172 | + for h in range(len(Plist[i])): | ||
173 | + if Setlist[i][j][0] == Plist[i][h][0]: | ||
174 | + Plist[i][h][1] += Setlist[i][j][1] # 누적치 | ||
175 | +vert_p = [] # 수직 중복 삭제 | ||
176 | +for i in range(len(Plist)): | ||
177 | + for j in range(len(Plist[i])): | ||
178 | + vert_p.append(Plist[i][j]) # 단어만 넣기 | ||
179 | +# print(vert_p) | ||
180 | +vert_p.sort(key=lambda x: x[0]) # 단어 기준으로 정렬 | ||
181 | +for i in range(len(vert_p) - 2): # 단어 비교해서 같으면 누적 다르면 값 바꾸기 | ||
182 | + for j in range(i + 1, len(vert_p)): | ||
183 | + if vert_p[i][0] == vert_p[j][0]: | ||
184 | + vert_p[i][1] += vert_p[j][1] | ||
185 | + vert_p[j] = ['0', 0] | ||
186 | + | ||
187 | +vert_p = [i for i in vert_p if not '0' in i] # '0'들어간 열 제거 | ||
188 | +df_ver = pd.DataFrame(vert_p) | ||
189 | +df_ver.to_excel(Stockfilename + ' KNU_New_vdic2.xlsx', sheet_name='sheet1') |
캡스톤디자인1/소스코드/neg_pol_word.txt
0 → 100644
This diff could not be displayed because it is too large.
캡스톤디자인1/소스코드/obj_unknown_pol_word.txt
0 → 100644
1 | +출처 | ||
2 | + | ||
3 | +1) 표준국어대사전 뜻풀이 | ||
4 | +-> https://github.com/mrchypark/stdkor | ||
5 | +2) 신조어 | ||
6 | +-> https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D | ||
7 | +3) 이모티콘 | ||
8 | +-> https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98 | ||
9 | +4) SentiWordNet_3.0.0_20130122 | ||
10 | +-> http://sentiwordnet.isti.cnr.it/ | ||
11 | +5) SenticNet-5.0 | ||
12 | +-> http://sentic.net/ | ||
13 | +6) 감정단어사전0603 | ||
14 | +-> http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91 | ||
15 | +7) 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원 | ||
16 | + | ||
17 | + | ||
18 | +단어 수 : 154 | ||
19 | +극성 : 중립 or Unknown | ||
20 | + | ||
21 | +:p | ||
22 | +8-) | ||
23 | +B-) | ||
24 | +가까스로 | ||
25 | +가라앉다 | ||
26 | +가라앉지 않은 | ||
27 | +가르침을 받아 | ||
28 | +가리지 않고 | ||
29 | +감싸고 달래다 | ||
30 | +강구하다 | ||
31 | +개회하다 | ||
32 | +격동시키다 | ||
33 | +격하다 | ||
34 | +고부라지거나 | ||
35 | +고부라지거나 비틀어지며 | ||
36 | +골똘하게 | ||
37 | +공격하다 | ||
38 | +공적의 | ||
39 | +교관하다 | ||
40 | +굳은 | ||
41 | +굳은 상태로 | ||
42 | +굽히지 않는 | ||
43 | +권세를 꺾다 | ||
44 | +긁어 | ||
45 | +긴절하다 | ||
46 | +긴절히 | ||
47 | +뉘우치다 | ||
48 | +뉘우침 | ||
49 | +능청스럽게 | ||
50 | +능청스럽게 굴다 | ||
51 | +더 필요한 | ||
52 | +더들다 | ||
53 | +더듬는 | ||
54 | +더듬는 모양 | ||
55 | +덮어 주다 | ||
56 | +도도하게 | ||
57 | +도도하게 행동하다 | ||
58 | +떠들썩하게 | ||
59 | +뜨겁다 | ||
60 | +뜻이 강하다 | ||
61 | +마는 둥 | ||
62 | +마음대로 | ||
63 | +마음대로 하다 | ||
64 | +매우 조심스러움 | ||
65 | +매우 조심스럽게 | ||
66 | +머리가 | ||
67 | +모양 | ||
68 | +몹시 희다 | ||
69 | +못 | ||
70 | +미덥지 | ||
71 | +밀려나지 않고 | ||
72 | +바닥이 훤하게 | ||
73 | +바라거나 | ||
74 | +바라거나 탐내는 | ||
75 | +바라는 | ||
76 | +바람이 없고 | ||
77 | +박복함 | ||
78 | +발열과 | ||
79 | +발열이 | ||
80 | +배우는 | ||
81 | +배워지고 | ||
82 | +버릇 | ||
83 | +버젓하지 | ||
84 | +벅차다 | ||
85 | +번드럽게 | ||
86 | +번드럽다 | ||
87 | +번지르르하게 | ||
88 | +번지르르하게 나다 | ||
89 | +벌을 | ||
90 | +벌을 주다 | ||
91 | +벙글거리며 | ||
92 | +보고 싶거나 | ||
93 | +부르르 | ||
94 | +부르르하다 | ||
95 | +분발하여 | ||
96 | +분발하여 일어날 | ||
97 | +붓거나 부풀었던 것이 줄어들어 본래의 모습대로 되다 | ||
98 | +사고가 | ||
99 | +사정을 살피다 | ||
100 | +삼연히 | ||
101 | +성 | ||
102 | +성을 | ||
103 | +성이 | ||
104 | +성하고 | ||
105 | +성하고 쇠함을 | ||
106 | +소동을 | ||
107 | +수고가 | ||
108 | +수고가 되는 | ||
109 | +수더분하거나 | ||
110 | +수더분하게 | ||
111 | +수줍다 | ||
112 | +수줍음만 | ||
113 | +수줍음만 타는 | ||
114 | +순종하는 모양 | ||
115 | +시간이 더 | ||
116 | +쓰러뜨리다 | ||
117 | +앙큼하다 | ||
118 | +억척스럽고 | ||
119 | +역사적인 | ||
120 | +예사롭게 | ||
121 | +오점 | ||
122 | +우스운 말이나 | ||
123 | +울리는 힘이 | ||
124 | +웃기는 우스운 | ||
125 | +웃기려고 | ||
126 | +웃기려고 일부러 | ||
127 | +원하다 | ||
128 | +윽윽거리다 | ||
129 | +윽윽대다 | ||
130 | +윽윽하다 | ||
131 | +익살 소설 | ||
132 | +익살궂다 | ||
133 | +익살극 | ||
134 | +익살맞다 | ||
135 | +익살배기 | ||
136 | +익살스럽게 | ||
137 | +익살스럽게 꾸민 | ||
138 | +익살스럽게 대답함 | ||
139 | +익살스럽다 | ||
140 | +익살스레 | ||
141 | +익살을 | ||
142 | +익살을 많이 | ||
143 | +익살을 부리는 | ||
144 | +익살쟁이 | ||
145 | +일부러 우스운 | ||
146 | +자기에게 유리하도록 | ||
147 | +잘못을 깨치고 | ||
148 | +절실하게 | ||
149 | +절실하다 | ||
150 | +존속하다 | ||
151 | +종횡무진 | ||
152 | +좇다 | ||
153 | +줄 만하다 | ||
154 | +중간에서 화해하거나 | ||
155 | +질기다 | ||
156 | +탈이 없다 | ||
157 | +탐내는 | ||
158 | +피 | ||
159 | +필요하고 절실하게 | ||
160 | +필요하고 절실하다 | ||
161 | +행동하기가 | ||
162 | +행동하기가 조심스럽고 | ||
163 | +행동하는 | ||
164 | +혹하여 달뜬 | ||
165 | +혹하여 달뜸 | ||
166 | +희롱질하다 | ||
167 | +희희덕거리다 | ||
168 | +희희덕대다 | ||
169 | +힁허케 | ||
170 | +히들거리다 | ||
171 | +히들히들 | ||
172 | +히들히들하다 | ||
173 | +힘쓰다 | ||
174 | +반신반의하다 |
캡스톤디자인1/소스코드/pos_pol_word.txt
0 → 100644
This diff is collapsed. Click to expand it.
캡스톤디자인1/진행보고서/10주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/10주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/11주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/11주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/12주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/12주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/13주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/13주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/14주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/14주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/2주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/2주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/3주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/3주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/5주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/5주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/6주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/6주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/7주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/7주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/9주차주간보고서(양지수_2017104003).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/9주차주간보고서(한서흔_2017104039).hwp
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/기초보고서.docx
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/중간보고서 (양지수, 한서흔).pdf
0 → 100644
No preview for this file type
캡스톤디자인1/진행보고서/최종보고서 (양지수, 한서흔).docx
0 → 100644
No preview for this file type
-
Please register or login to post a comment