jeongsoo commited on
Commit
a5b44fe
ยท
1 Parent(s): 4dc04d4

Initial commit

Browse files
Files changed (4) hide show
  1. app.py.env +1 -0
  2. child_mind_data.json +168 -0
  3. data/emotions_data.json +64 -0
  4. streamlit_app.py +89 -0
app.py.env ADDED
@@ -0,0 +1 @@
 
 
1
+ PYTHONUNBUFFERED=true
child_mind_data.json ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {"word": "ํ•™๊ต"},
3
+ {"word": "์„ ์ƒ๋‹˜"},
4
+ {"word": "์นœ๊ตฌ"},
5
+ {"word": "์ˆ™์ œ"},
6
+ {"word": "์ฑ…"},
7
+ {"word": "๊ณต๋ถ€"},
8
+ {"word": "์šด๋™์žฅ"},
9
+ {"word": "๋†€์ด"},
10
+ {"word": "์ ์‹ฌ"},
11
+ {"word": "์‰ฌ๋Š”์‹œ๊ฐ„"},
12
+ {"word": "์ง‘"},
13
+ {"word": "๊ฐ€์กฑ"},
14
+ {"word": "์—„๋งˆ"},
15
+ {"word": "์•„๋น "},
16
+ {"word": "ํ˜•"},
17
+ {"word": "๋ˆ„๋‚˜"},
18
+ {"word": "๋™์ƒ"},
19
+ {"word": "ํ• ๋จธ๋‹ˆ"},
20
+ {"word": "ํ• ์•„๋ฒ„์ง€"},
21
+ {"word": "๋ฐฅ"},
22
+ {"word": "๋นต"},
23
+ {"word": "์šฐ์œ "},
24
+ {"word": "๊ณผ์ž"},
25
+ {"word": "์žฅ๋‚œ๊ฐ"},
26
+ {"word": "์ธํ˜•"},
27
+ {"word": "๊ฒŒ์ž„"},
28
+ {"word": "์ถ•๊ตฌ"},
29
+ {"word": "๋†๊ตฌ"},
30
+ {"word": "์ˆ˜์˜"},
31
+ {"word": "ํ”ผ์•„๋…ธ"},
32
+ {"word": "๊ธฐํƒ€"},
33
+ {"word": "๊ฐ•์•„์ง€"},
34
+ {"word": "๊ณ ์–‘์ด"},
35
+ {"word": "์ƒˆ"},
36
+ {"word": "๋ฌผ๊ณ ๊ธฐ"},
37
+ {"word": "ํ•ด"},
38
+ {"word": "๋น„"},
39
+ {"word": "๋ฐ”๋žŒ"},
40
+ {"word": "๋ˆˆ"},
41
+ {"word": "๋ด„"},
42
+ {"word": "์—ฌ๋ฆ„"},
43
+ {"word": "๊ฐ€์„"},
44
+ {"word": "๊ฒจ์šธ"},
45
+ {"word": "ํฌ๋‹ค"},
46
+ {"word": "์ž‘๋‹ค"},
47
+ {"word": "๋งŽ๋‹ค"},
48
+ {"word": "์ ๋‹ค"},
49
+ {"word": "๋น ๋ฅด๋‹ค"},
50
+ {"word": "๋А๋ฆฌ๋‹ค"},
51
+ {"word": "์žฌ๋ฏธ์žˆ๋‹ค"},
52
+ {"word": "์–ด๋ ต๋‹ค"},
53
+ {"word": "์‰ฝ๋‹ค"},
54
+ {"word": "์˜ˆ์˜๋‹ค"},
55
+ {"word": "๋ฉ‹์žˆ๋‹ค"},
56
+ {"word": "์ข‹๋‹ค"},
57
+ {"word": "๋‚˜์˜๋‹ค"},
58
+ {"word": "์Šฌํ”„๋‹ค"},
59
+ {"word": "๊ธฐ์˜๋‹ค"},
60
+ {"word": "๋œจ๊ฒ๋‹ค"},
61
+ {"word": "์ฐจ๊ฐ‘๋‹ค"},
62
+ {"word": "๋ฌด๊ฒ๋‹ค"},
63
+ {"word": "๊ฐ€๋ณ๋‹ค"},
64
+ {"word": "๊ฐ€๋‹ค"},
65
+ {"word": "์˜ค๋‹ค"},
66
+ {"word": "๋จน๋‹ค"},
67
+ {"word": "๋งˆ์‹œ๋‹ค"},
68
+ {"word": "์ž๋‹ค"},
69
+ {"word": "์ผ์–ด๋‚˜๋‹ค"},
70
+ {"word": "๋†€๋‹ค"},
71
+ {"word": "๊ณต๋ถ€ํ•˜๋‹ค"},
72
+ {"word": "์ฝ๋‹ค"},
73
+ {"word": "์“ฐ๋‹ค"},
74
+ {"word": "๊ทธ๋ฆฌ๋‹ค"},
75
+ {"word": "๋งŒ๋“ค๋‹ค"},
76
+ {"word": "๋ณด๋‹ค"},
77
+ {"word": "๋“ฃ๋‹ค"},
78
+ {"word": "๋งํ•˜๋‹ค"},
79
+ {"word": "์›ƒ๋‹ค"},
80
+ {"word": "์šธ๋‹ค"},
81
+ {"word": "๋›ฐ๋‹ค"},
82
+ {"word": "๋˜์ง€๋‹ค"},
83
+ {"word": "์žก๋‹ค"},
84
+ {"word": "์ƒ๊ฐํ•˜๋‹ค"},
85
+ {"word": "์•Œ๋‹ค"},
86
+ {"word": "๋ชจ๋ฅด๋‹ค"},
87
+ {"word": "์ข‹์•„ํ•˜๋‹ค"},
88
+ {"word": "์‹ซ์–ดํ•˜๋‹ค"},
89
+ {"word": "๊ตญ์–ด"},
90
+ {"word": "์ˆ˜ํ•™"},
91
+ {"word": "์˜์–ด"},
92
+ {"word": "๊ณผํ•™"},
93
+ {"word": "์‚ฌํšŒ"},
94
+ {"word": "์Œ์•…"},
95
+ {"word": "๋ฏธ์ˆ "},
96
+ {"word": "์ฒด์œก"},
97
+ {"word": "์ˆซ์ž"},
98
+ {"word": "๋”ํ•˜๊ธฐ"},
99
+ {"word": "๋นผ๊ธฐ"},
100
+ {"word": "๊ณฑํ•˜๊ธฐ"},
101
+ {"word": "๋‚˜๋ˆ„๊ธฐ"},
102
+ {"word": "๋ถ„์ˆ˜"},
103
+ {"word": "๋„ํ˜•"},
104
+ {"word": "์ƒ‰๊น”"},
105
+ {"word": "์—ญ์‚ฌ"},
106
+ {"word": "๋‚˜๋ผ"},
107
+ {"word": "์‹๋ฌผ"},
108
+ {"word": "๋™๋ฌผ"},
109
+ {"word": "์†Œ๋ฆฌ"},
110
+ {"word": "๋ฐœํ‘œ"},
111
+ {"word": "ํ† ๋ก "},
112
+ {"word": "์‹คํ—˜"},
113
+ {"word": "์‹œํ—˜"},
114
+ {"word": "ํ‰๊ฐ€"},
115
+ {"word": "ํ–‰๋ณต"},
116
+ {"word": "์Šฌํ””"},
117
+ {"word": "๋ถ„๋…ธ"},
118
+ {"word": "๋‘๋ ค์›€"},
119
+ {"word": "๋†€๋žŒ"},
120
+ {"word": "์ฆ๊ฑฐ์›€"},
121
+ {"word": "์งœ์ฆ"},
122
+ {"word": "์งˆํˆฌ"},
123
+ {"word": "์‹œ๊ฐ„"},
124
+ {"word": "๊ณต๊ฐ„"},
125
+ {"word": "๊ทœ์น™"},
126
+ {"word": "์•ฝ์†"},
127
+ {"word": "๋…ธ๋ ฅ"},
128
+ {"word": "๊ฒฐ๊ณผ"},
129
+ {"word": "์ด์œ "},
130
+ {"word": "๋ฐฉ๋ฒ•"},
131
+ {"word": "์ค‘์š”ํ•˜๋‹ค"},
132
+ {"word": "๊ถŒ๋ฆฌ"},
133
+ {"word": "์˜๋ฌด"},
134
+ {"word": "ํ…”๋ ˆ๋น„์ „"},
135
+ {"word": "์ปดํ“จํ„ฐ"},
136
+ {"word": "ํœด๋Œ€ํฐ"},
137
+ {"word": "๋ˆ"},
138
+ {"word": "์šฉ๋ˆ"},
139
+ {"word": "์„ ๋ฌผ"},
140
+ {"word": "์˜ท"},
141
+ {"word": "์‹ ๋ฐœ"},
142
+ {"word": "๋ถ€๋“œ๋Ÿฝ๋‹ค"},
143
+ {"word": "๊ท€์—ฝ๋‹ค"},
144
+ {"word": "๋ฉ‹์ง€๋‹ค"},
145
+ {"word": "์กฐ์šฉํ•˜๋‹ค"},
146
+ {"word": "ํฌ๊ฒŒ"},
147
+ {"word": "์ž‘๊ฒŒ"},
148
+ {"word": "๋นจ๋ฆฌ"},
149
+ {"word": "์ฒœ์ฒœํžˆ"},
150
+ {"word": "์ž์ฃผ"},
151
+ {"word": "๊ฐ€๋”"},
152
+ {"word": "ํ•ญ์ƒ"},
153
+ {"word": "๋ณดํ†ต"},
154
+ {"word": "๊ฐ‘์ž๊ธฐ"},
155
+ {"word": "๊ทธ๋ฆฌ๊ณ "},
156
+ {"word": "๊ทธ๋Ÿฌ๋‚˜"},
157
+ {"word": "๊ทธ๋ž˜์„œ"},
158
+ {"word": "์™œ๋ƒํ•˜๋ฉด"},
159
+ {"word": "~์€"},
160
+ {"word": "~๋Š”"},
161
+ {"word": "~์ด"},
162
+ {"word": "~๊ฐ€"},
163
+ {"word": "~์„"},
164
+ {"word": "~๋ฅผ"},
165
+ {"word": "~์—๊ฒŒ"},
166
+ {"word": "~์™€"},
167
+ {"word": "~๊ณผ"}
168
+ ]
data/emotions_data.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {"word": "๊ธฐ์จ"},
3
+ {"word": "ํ–‰๋ณต"},
4
+ {"word": "๋งŒ์กฑ"},
5
+ {"word": "ํฌ์—ด"},
6
+ {"word": "์ฆ๊ฑฐ์›€"},
7
+ {"word": "ํ™˜ํฌ"},
8
+ {"word": "๊ฐ์‚ฌ"},
9
+ {"word": "์‚ฌ๋ž‘"},
10
+ {"word": "๊ทธ๋ฆฌ์›€"},
11
+ {"word": "์„ค๋ ˜"},
12
+ {"word": "์• ์ •"},
13
+ {"word": "๊ฐ๋™"},
14
+ {"word": "ํ‰ํ™”"},
15
+ {"word": "์•ˆ์ •"},
16
+ {"word": "ํŽธ์•ˆํ•จ"},
17
+ {"word": "๊ณ ์š”"},
18
+ {"word": "์Šฌํ””"},
19
+ {"word": "์šฐ์šธ"},
20
+ {"word": "๊ทธ๋ฆฌ์›€"},
21
+ {"word": "์™ธ๋กœ์›€"},
22
+ {"word": "์‹ค๋ง"},
23
+ {"word": "์ƒ์‹ค๊ฐ"},
24
+ {"word": "ํ›„ํšŒ"},
25
+ {"word": "๊ณตํ—ˆํ•จ"},
26
+ {"word": "์ ˆ๋ง"},
27
+ {"word": "๋ถ„๋…ธ"},
28
+ {"word": "์งœ์ฆ"},
29
+ {"word": "ํ™”๋‚จ"},
30
+ {"word": "๊ฒฉ๋ถ„"},
31
+ {"word": "๋ถˆ๋งŒ"},
32
+ {"word": "์›๋ง"},
33
+ {"word": "๋ฏธ์›€"},
34
+ {"word": "์งˆํˆฌ"},
35
+ {"word": "์‹œ๊ธฐ์‹ฌ"},
36
+ {"word": "์ฆ์˜ค"},
37
+ {"word": "๋‘๋ ค์›€"},
38
+ {"word": "๋ถˆ์•ˆ"},
39
+ {"word": "๊ฑฑ์ •"},
40
+ {"word": "๊ณตํฌ"},
41
+ {"word": "๊ฒฝ๊ณ„์‹ฌ"},
42
+ {"word": "๊ฒ๋‚จ"},
43
+ {"word": "๋‹นํ™ฉ"},
44
+ {"word": "๋†€๋žŒ"},
45
+ {"word": "๊ฒฝ์•…"},
46
+ {"word": "์ถฉ๊ฒฉ"},
47
+ {"word": "ํ˜ผ๋ž€"},
48
+ {"word": "๋‹นํ˜น๊ฐ"},
49
+ {"word": "์ˆ˜์น˜์‹ฌ"},
50
+ {"word": "๋ถ€๋„๋Ÿฌ์›€"},
51
+ {"word": "์ฐฝํ”ผํ•จ"},
52
+ {"word": "์ฃ„์ฑ…๊ฐ"},
53
+ {"word": "ํ›„ํšŒ"},
54
+ {"word": "์ž์ฑ…"},
55
+ {"word": "ํ˜์˜ค"},
56
+ {"word": "์—ญ๊ฒจ์›€"},
57
+ {"word": "์‹ซ์Œ"},
58
+ {"word": "๊ฑฐ๋ถ€๊ฐ"},
59
+ {"word": "๊ธฐ๋Œ€"},
60
+ {"word": "ํฌ๋ง"},
61
+ {"word": "๊ฐˆ๋ง"},
62
+ {"word": "์—ด๋ง"},
63
+ {"word": "๋™๊ฒฝ"}
64
+ ]
streamlit_app.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import streamlit as st
3
+ import json
4
+ import os
5
+ import uuid
6
+ import glob
7
+ from datetime import datetime
8
+ import numpy as np
9
+ import platform
10
+ import networkx as nx
11
+ import plotly.graph_objects as go
12
+ from sklearn.metrics.pairwise import cosine_similarity
13
+ import plotly
14
+ import matplotlib.pyplot as plt
15
+ import matplotlib.font_manager as fm
16
+ from sklearn.manifold import TSNE
17
+ import warnings
18
+ warnings.filterwarnings('ignore')
19
+
20
+ # ํŽ˜์ด์ง€ ์„ค์ •
21
+ st.set_page_config(
22
+ page_title="ํ•œ๊ตญ์–ด ๋‹จ์–ด ์˜๋ฏธ ๋„คํŠธ์›Œํฌ ์‹œ๊ฐํ™”",
23
+ page_icon="๐Ÿ”ค",
24
+ layout="wide"
25
+ )
26
+
27
+ # ํด๋” ๊ฒฝ๋กœ ์„ค์ •
28
+ DATA_FOLDER = 'data'
29
+ UPLOAD_FOLDER = 'uploads'
30
+
31
+ # ํด๋” ์ƒ์„ฑ
32
+ if not os.path.exists(UPLOAD_FOLDER):
33
+ os.makedirs(UPLOAD_FOLDER)
34
+
35
+ # ์„ธ์…˜ ์ƒํƒœ ์ดˆ๊ธฐํ™”
36
+ if 'model' not in st.session_state:
37
+ st.session_state.model = None
38
+
39
+ if 'embeddings_cache' not in st.session_state:
40
+ st.session_state.embeddings_cache = {}
41
+
42
+ if 'graph_cache' not in st.session_state:
43
+ st.session_state.graph_cache = {}
44
+
45
+ if 'data_files' not in st.session_state:
46
+ st.session_state.data_files = {}
47
+
48
+ if 'selected_files' not in st.session_state:
49
+ st.session_state.selected_files = []
50
+
51
+ if 'threshold' not in st.session_state:
52
+ st.session_state.threshold = 0.7
53
+
54
+ # --- ํ•œ๊ธ€ ํฐํŠธ ์„ค์ • ํ•จ์ˆ˜ ---
55
+ def set_korean_font():
56
+ """
57
+ ํ˜„์žฌ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ํ•œ๊ธ€ ํฐํŠธ๋ฅผ matplotlib ๋ฐ Plotly์šฉ์œผ๋กœ ์„ค์ • ์‹œ๋„ํ•˜๊ณ ,
58
+ Plotly์—์„œ ์‚ฌ์šฉํ•  ํฐํŠธ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
59
+ """
60
+ system_name = platform.system()
61
+ plotly_font_name = None # Plotly์—์„œ ์‚ฌ์šฉํ•  ํฐํŠธ ์ด๋ฆ„
62
+
63
+ # Matplotlib ํฐํŠธ ์„ค์ •
64
+ if system_name == "Windows":
65
+ font_name = "Malgun Gothic"
66
+ plotly_font_name = "Malgun Gothic"
67
+ elif system_name == "Darwin": # MacOS
68
+ font_name = "AppleGothic"
69
+ plotly_font_name = "AppleGothic"
70
+ elif system_name == "Linux":
71
+ # Linux์—์„œ ์„ ํ˜ธํ•˜๋Š” ํ•œ๊ธ€ ํฐํŠธ ๊ฒฝ๋กœ ๋˜๋Š” ์ด๋ฆ„ ์„ค์ •
72
+ font_path = "/usr/share/fonts/truetype/nanum/NanumGothic.ttf"
73
+ plotly_font_name_linux = "NanumGothic" # Plotly๋Š” ํฐํŠธ '์ด๋ฆ„'์„ ์ฃผ๋กœ ์‚ฌ์šฉ
74
+
75
+ if os.path.exists(font_path):
76
+ font_name = fm.FontProperties(fname=font_path).get_name()
77
+ plotly_font_name = plotly_font_name_linux
78
+ else:
79
+ # ์‹œ์Šคํ…œ์—์„œ 'Nanum' ํฌํ•จ ํฐํŠธ ์ฐพ๊ธฐ ์‹œ๋„
80
+ try:
81
+ available_fonts = [f.name for f in fm.fontManager.ttflist]
82
+ nanum_fonts = [name for name in available_fonts if 'Nanum' in name]
83
+ if nanum_fonts:
84
+ font_name = nanum_fonts[0]
85
+ # Plotly์—์„œ ์‚ฌ์šฉํ•  ์ด๋ฆ„๋„ ๋น„์Šทํ•˜๊ฒŒ ์„ค์ • (์ •ํ™•ํ•œ ์ด๋ฆ„์€ ์‹œ์Šคํ…œ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ)
86
+ plotly_font_name = font_name if 'Nanum' in font_name else plotly_font_name_linux
87
+ else:
88
+ # ๋‹ค๋ฅธ OS ํฐํŠธ ์‹œ๋„
89
+ if "Malgun Gothic"