GyuhoLee

repository cleanup

import re, pickle
from selenium import webdriver
from singer import *
WAIT_TIME = 5
A, B = 700, 900
with open('singer_name.pickle', 'rb') as f:
singer_name = pickle.load(f)
def GetMelonData():
singers = []
driver = webdriver.Chrome('chromedriver.exe')
driver.implicitly_wait(WAIT_TIME)
for name in singer_name[A:B]:
singer = Singer()
singer.name = name
name = name.replace('#', '%23')
name = name.replace('&', '%26')
url = 'https://www.melon.com/search/total/index.htm?q='+ name + '&section=&searchGnbYn=Y&kkoSpl=Y&kkoDpType=&linkOrText=T&ipath=srch_form'
driver.get(url)
driver.implicitly_wait(WAIT_TIME)
tmp = driver.find_elements_by_css_selector('#conts > div.section_atist > div > div.atist_dtl_info > dl > dd:nth-child(4)')[0].text
if len(tmp) > 3:
singer.sex, singer.group = tmp.split(',')
else:
singer.sex, singer.group = '.', '.'
singer.group.strip()
singer.fan = int(driver.find_elements_by_css_selector('#conts > div.section_atist > div > div.atist_dtl_info > div > span > span')[0].text.replace(',', ''))
singers.append(singer)
return singers
with open('singer.pickle', 'rb') as f:
before = pickle.load(f)
print(len(before))
data = GetMelonData()
with open('singer.pickle', 'wb') as f:
pickle.dump(before + data, f)
print("Done")
\ No newline at end of file
......@@ -3,12 +3,11 @@ from selenium import webdriver
from song import *
WAIT_TIME = 5
YEAR = '2021년'
#MONTH = ['01월', '02월']
#MONTH = ['03월', '04월']
MONTH = ['05월', '06월']
YEAR = '2020년'
#MONTH = ['01월', '02월', '03월']
#MONTH = ['04월', '05월', '06월']
#MONTH = ['07월', '08월', '09월']
#MONTH = ['10월', '11월', '12월']
MONTH = ['10월', '11월', '12월']
def GetMelonData():
......
import pickle
from song import *
data = []
for filename in range(1112, 2122, 202):
with open('data/' + str(filename)+'.pickle', 'rb') as f:
tmp = pickle.load(f)
data.extend(tmp)
singers = set()
for d in data:
singers.add(d.singer)
print("size : ", len(singers))
print(list(singers))
#with open('singer_name.pickle', 'wb') as f:
# pickle.dump(list(singers), f)
\ No newline at end of file
import csv, pickle
from singer import *
data = []
with open('./data/singer.pickle', 'rb') as f:
data = pickle.load(f)
f = open('./data/singer.csv', 'w', newline='', encoding='UTF-8')
wr = csv.writer(f)
for singer in data:
wr.writerow(singer.getRow())
f.close()
\ No newline at end of file
import re, csv, pickle
import re, csv, pickle, nltk
from song import *
from PyKomoran import *
from textrank import KeywordSummarizer
#nltk.download('averaged_perceptron_tagger')
def komoran_tokenize(sent):
words = sent.split()
words = [w for w in words if ('/NNP' in w or '/NNG' in w or '/SL' in w)]
for i in range(len(words)):
if words[i].endswith('/SL') and len(words[i]) > 4:
words[i] = words[i][:-3]
words[i] = '/'.join(nltk.pos_tag(nltk.word_tokenize(words[i]))[0])
if words[i].endswith('/NN'):
words[i] += 'P'
words = [w for w in words if '/NNP' in w or '/NNG' in w or '/FW' in w or '/JJ' in w]
return words
data = []
for filename in range(1112, 2122, 202):
with open(str(filename)+'.pickle', 'rb') as f:
with open('data/'+str(filename)+'.pickle', 'rb') as f:
tmp = pickle.load(f)
data.extend(tmp)
f = open('data.csv', 'w', newline='', encoding='UTF-8')
f = open('dataaaa.csv', 'w', newline='', encoding='UTF-8')
wr = csv.writer(f)
komoran = Komoran('STABLE')
......@@ -36,7 +44,7 @@ for i in range(len(data)):
window = -1,
verbose = False
)
if len(sents) != 0:
if len(sents) > 5:
keywords = keyword_extractor.summarize(sents, topk=5)
data[i].keywords = list(map(lambda x : x[0][:x[0].find('/')], keywords))
......
import csv
songs = []
f = open('song.csv', 'r', encoding='utf-8')
rdr = csv.reader(f)
for line in rdr:
songs.append(line)
f = open('data_edge.csv', 'w', newline='', encoding='UTF-8')
wr = csv.writer(f)
for i in range(len(songs)):
for j in range(i + 1, len(songs)):
if songs[i][4] == songs[j][4]:
wr.writerow([i, j])
elif songs[i][0] == songs[j][0] and songs[i][1] == songs[j][1] and int(songs[j][2]) - int(songs[i][2]) <= 5:
wr.writerow([i, j])
\ No newline at end of file
import csv
group = {'솔로' : 1, '그룹' : 2}
sex = {'남성' : 1, '여성' : 2, '혼성' : 3}
genre = dict()
genre_idx = 1
songs = []
f = open('song.csv', 'r', encoding='utf-8')
rdr = csv.reader(f)
for line in rdr:
songs.append(line)
singers = []
f = open('singer.csv', 'r', encoding='utf-8')
rdr = csv.reader(f)
for line in rdr:
singers.append(line)
singers_dict = {}
for data in singers:
singers_dict[data[0]] = [sex[data[1]], group[data[2]], int(data[3])]
f_x = open('data_x.csv', 'w', newline='', encoding='UTF-8')
wr_x = csv.writer(f_x)
f_y = open('data_y.csv', 'w', newline='', encoding='UTF-8')
wr_y = csv.writer(f_y)
for data in songs:
tmp = [data[0], data[1], data[8]]
date = data[7].split('.')
tmp.append((int(data[0]) - int(date[0])) * 12 + int(data[1]) - int(date[1]))
g = data[6].split(',')[0]
if genre.get(g, 0) != 0:
tmp.append(genre[g])
else:
genre[g] = genre_idx
tmp.append(genre_idx)
genre_idx += 1
tmp.extend(singers_dict[data[4]])
wr_x.writerow(tmp)
wr_y.writerow([data[2]])
\ No newline at end of file
class Singer:
def __init__(self):
self.name = ''
self.sex = ''
self.group = ''
self.fan = 0
def getRow(self):
return [self.name, self.sex, self.group, self.fan]
\ No newline at end of file
......@@ -25,7 +25,7 @@ class Song:
self.title.strip()
self.album = re.sub(r"[?'/\"*<>:]", "", self.album)
try:
return [self.year, self.month, self.rank, self.title, self.singer, self.album, self.genre, self.date, self.likes, self.keywords]
return [self.year, self.month, self.rank, self.title, self.singer, self.album, self.genre, self.date, self.likes, self.keywords, self.lyrics]
except:
return [self.year, self.month, self.rank, self.title, self.singer, self.album, self.genre, self.date, self.likes, []]
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
갓츄 (GOT U),남성,그룹,1937
2PM,남성,그룹,22241
엠투엠 (M To M),남성,솔로,4007
효민,여성,솔로,4177
코요태,혼성,그룹,10065
최준영,남성,솔로,92
PRISTIN (프리스틴),여성,그룹,12458
써니힐,여성,그룹,14961
김보아,여성,솔로,909
양요섭,남성,솔로,51578
간종욱,남성,솔로,405
티아라 N4,여성,그룹,1805
조정석,남성,솔로,14406
신화,남성,그룹,42422
긱스 (Geeks),남성,그룹,29865
스윗 콧소로우 (정준하 & 스윗소로우),남성,그룹,271
이영지,여성,솔로,17954
JYJ,남성,그룹,29818
원더걸스,여성,그룹,33950
진민호,남성,솔로,2352
H-유진,남성,솔로,391
정엽,남성,솔로,8815
장미여관,남성,그룹,6182
GRAY (그레이),남성,솔로,77885
Jvcki Wai,여성,솔로,40492
언터쳐블,남성,그룹,4142
예성 (YESUNG),남성,솔로,18932
반하나,여성,솔로,10418
하진 (HAJIN),여성,솔로,2909
하하,남성,솔로,5037
AKMU (악동뮤지션),혼성,그룹,221188
비룡,남성,솔로,2494
정키,남성,솔로,38262
제국의아이들 (ZE:A),남성,그룹,4972
클로버,혼성,그룹,2210
하이라이트 (Highlight),남성,그룹,82189
서영은,여성,솔로,8630
"댄싱게놈 (유재석, JYP)",남성,그룹,2052
키썸 (Kisum),여성,솔로,32158
종현 (JONGHYUN),남성,솔로,96568
이진아,여성,솔로,31367
"상주나 (정준하, 윤상)",남성,그룹,1033
넬 (NELL),남성,그룹,64050
강다니엘,남성,솔로,69431
존박,남성,솔로,27126
더 씨야,여성,그룹,1562
첸 (CHEN),남성,솔로,144103
정세운,남성,솔로,42294
경서예지,여성,그룹,3008
JK 김동욱,남성,솔로,3668
박경,남성,솔로,34343
박우진 (AB6IX),남성,솔로,37515
알리 (ALi),여성,솔로,20990
H.O.T.,남성,그룹,18856
크레파스,여성,그룹,2731
디유닛,여성,그룹,571
히키 (Hickee),여성,솔로,1817
소진 (Sojin),여성,솔로,7028
샤넌,여성,솔로,7751
박정아,여성,솔로,475
제시 (Jessi),여성,솔로,28985
왁스,여성,솔로,6649
길,남성,솔로,8345
Of 비스트,남성,그룹,5142
이하이,여성,솔로,69402
리쌍,남성,그룹,48471
김성규,남성,솔로,57882
MOBB (MINO & BOBBY),남성,그룹,13549
플로우식 (Flowsik),남성,솔로,6030
빅스타,남성,그룹,1184
블루 (BLOO),남성,솔로,31790
우먼파워,여성,그룹,69
하하 X MINO,남성,그룹,2599
현빈,남성,솔로,2177
가희,여성,솔로,570
오윤혜,여성,솔로,1281
하은요셉,남성,그룹,1335
DK,남성,솔로,5195
딘딘,남성,솔로,10379
솔지하니 (EXID),여성,그룹,2450
김호중,남성,솔로,40513
The One (더원),남성,솔로,11446
송하예,여성,솔로,14066
에일리(AILEE),여성,솔로,116827
이상순,남성,솔로,2520
Osshun Gum,남성,솔로,14904
옥주현,여성,솔로,4453
박정현,여성,솔로,33873
파리돼지앵 (정형돈 & 정재형),남성,그룹,259
승리,남성,솔로,32198
이석훈,남성,솔로,19669
이예준,여성,솔로,13509
강승윤,남성,솔로,41790
조성모,남성,솔로,9195
현아,여성,솔로,39887
레드벨벳-아이린&슬기,여성,그룹,14038
PRODUCE 101,남성,그룹,30211
이적,남성,솔로,48734
정준하,남성,솔로,1662
X1 (엑스원),남성,그룹,39988
지오 (G.O),남성,솔로,1434
틴탑,남성,그룹,19077
노홍철,남성,솔로,1164
유재석,남성,솔로,11848
뉴이스트 W,남성,그룹,69985
영탁,남성,솔로,28564
박혜경,여성,솔로,5166
미란이 (Mirani),여성,솔로,13728
SHINee (샤이니),남성,그룹,127149
비투비,남성,그룹,198816
T.O.P,남성,솔로,33303
테이크 (TAKE),남성,그룹,4508
버나드 박,남성,솔로,8567
국.슈 (국프의 핫이슈),여성,그룹,843
펀치넬로 (punchnello),남성,솔로,19036
IZ*ONE (아이즈원),여성,그룹,85020
ASH ISLAND,남성,솔로,67895
제이큐티,여성,그룹,175
럼블피쉬,여성,솔로,7700
MJ (써니사이드),남성,솔로,7706
Woodie Gochild,남성,솔로,8117
간미연,여성,솔로,996
방탄소년단,남성,그룹,766605
지연,여성,솔로,7292
백현 (BAEKHYUN),남성,솔로,238751
한동근,남성,솔로,28897
전효성,여성,솔로,7237
레디 (Reddy),남성,솔로,17346
엄정화,여성,솔로,7790
허영생,남성,솔로,3020
JJ Project,남성,그룹,27164
예지,여성,솔로,10990
보아 (BoA),여성,솔로,46019
휘인 (Whee In),여성,솔로,47412
박보람,여성,솔로,21023
FIX,남성,그룹,154
BLACKPINK,여성,그룹,204360
뉴이스트,남성,그룹,95855
JIN (러블리즈),여성,솔로,6599
황치열,남성,솔로,56699
SE7EN,남성,솔로,2977
f(x),여성,그룹,68903
Ja Mezz,남성,솔로,8788
씨스타19,여성,그룹,4426
Justin Bieber,남성,솔로,65540
김영근,남성,솔로,5621
차지연,여성,솔로,3394
"15& (박지민, 백예린)",여성,그룹,15890
장현승,남성,솔로,12067
마이네임,남성,그룹,2146
강균성 (노을),남성,솔로,2287
핫펠트 (HA:TFELT),여성,솔로,15456
EXO-CBX (첸백시),남성,그룹,153892
숀 (SHAUN),남성,솔로,20502
인피니트,남성,그룹,108268
전미도,여성,솔로,8483
염따,남성,솔로,27203
장재인,여성,솔로,14106
Lasse Lindh,남성,솔로,15234
청하,여성,솔로,97421
pH-1,남성,솔로,61331
우디 (Woody),남성,솔로,4870
한해,남성,솔로,16936
유승우,남성,솔로,25283
적재,남성,솔로,36548
로꼬,남성,솔로,121027
EXID,여성,그룹,58038
머쉬베놈 (MUSHVENOM),남성,솔로,23230
국카스텐,남성,그룹,29923
쿨 (COOL),혼성,그룹,16138
소찬휘,여성,솔로,3939
VIXX (빅스),남성,그룹,70799
씨스타,여성,그룹,70571
전인혁 (야다),남성,솔로,471
서인국,남성,솔로,27691
신지,여성,솔로,2878
노블레스,남성,솔로,1990
김형준,남성,솔로,1620
팬텀,남성,그룹,10422
소녀시대 (GIRLS' GENERATION),여성,그룹,103844
미쓰에이,여성,그룹,21091
부가킹즈,남성,그룹,824
원슈타인,남성,솔로,22456
이효리,여성,솔로,16278
올티 (Olltii),남성,솔로,16290
피에스타,여성,그룹,7752
박명수,남성,솔로,4551
"황태지 (황광희, 태양, 지드래곤)",남성,그룹,11295
형돈이와 대준이,남성,그룹,6952
솔지,여성,솔로,12557
동방신기 (TVXQ!),남성,그룹,38061
김하온 (HAON),남성,솔로,53271
WINNER,남성,그룹,211739
우원재,남성,솔로,58495
펀치 (Punch),여성,솔로,48114
김현정,여성,솔로,4290
HI SUHYUN,여성,그룹,9787
폴킴,남성,솔로,149583
바이브,남성,그룹,38319
허니 패밀리,남성,그룹,787
옥상달빛,여성,그룹,36069
박칼린,여성,솔로,125
트루디 (Truedy),여성,솔로,3132
수지 (SUZY),여성,솔로,46762
임슬옹,남성,솔로,3133
브라이언,남성,솔로,3179
정준하 X ZICO,남성,그룹,1413
한승희,남성,솔로,1702
주헌 (몬스타엑스),남성,솔로,14015
Amber Liu (엠버),여성,솔로,9096
aespa,여성,그룹,18276
김민규 (Young Kay),남성,솔로,5476
클래지콰이,혼성,그룹,14523
빈첸,남성,솔로,57734
백아연,여성,솔로,38514
매드클라운,남성,솔로,63307
김용준,남성,솔로,2740
이루,남성,솔로,1644
케이시 (Kassy),여성,솔로,41083
프라이머리,남성,솔로,67552
지소울 (GSoul),남성,솔로,23138
김동률,남성,솔로,86933
창모 (CHANGMO),남성,솔로,121635
칸토,남성,솔로,6001
처진 달팽이 (유재석 & 이적),남성,그룹,1883
임재현,남성,솔로,10975
정기고,남성,솔로,21090
G-DRAGON,남성,솔로,140239
양세형 X BewhY,남성,그룹,1319
김세정,여성,솔로,47880
이수현,여성,솔로,22462
이문세,남성,솔로,29383
김지수,남성,솔로,4827
박정민,남성,솔로,1455
임재범,남성,솔로,15245
백예린 (Yerin Baek),여성,솔로,146751
영준 (브라운 아이드 소울),남성,솔로,4736
블락비 바스타즈,남성,그룹,30180
EXO-K,남성,그룹,130969
저스디스 (JUSTHIS),남성,솔로,42069
멜로망스,남성,그룹,70465
Pro C (프로씨),남성,그룹,466
AOA,여성,그룹,55173
효린,여성,솔로,22384
그리 (GREE),남성,솔로,5026
B.I,남성,솔로,31776
나인뮤지스,여성,그룹,14844
"Apink BnN (보미,남주)",여성,그룹,13401
민경훈,남성,솔로,21246
킬라그램 (KILLAGRAMZ),남성,솔로,3502
Pinkrush,여성,그룹,1148
술제이 (Sool J),남성,솔로,2908
정진운,남성,솔로,1600
김장훈,남성,솔로,1962
크리스티나,여성,솔로,84
Lil tachi,남성,솔로,9287
김진표,남성,솔로,4642
려욱 (RYEOWOOK),남성,솔로,16496
SUPER JUNIOR (슈퍼주니어),남성,그룹,66047
보이비,남성,솔로,5372
김소리,여성,솔로,215
케이윌,남성,솔로,92944
문문 (MoonMoon),남성,솔로,24844
길구봉구,남성,그룹,21150
미도와 파라솔,혼성,그룹,9299
강지영,여성,솔로,1383
김경희,여성,솔로,3939
MC몽,남성,솔로,60480
가호 (Gaho),남성,솔로,9195
선미,여성,솔로,47458
데프콘,남성,솔로,7136
권진아,여성,솔로,54621
BMK,여성,솔로,3232
스컬,남성,솔로,3984
슬레이트,남성,그룹,7516
Zion.T,남성,솔로,138456
황광희 X 개코,남성,그룹,1621
이창민,남성,솔로,2102
철싸 (노홍철 & 싸이),남성,그룹,251
슈퍼스타K 2,혼성,그룹,23
곽진언,남성,솔로,24532
웬디 (WENDY),여성,솔로,40463
M&N (미료&나르샤),여성,그룹,720
나몰라패밀리JW,남성,솔로,263
신지수,여성,솔로,2631
윤현상,남성,솔로,21632
유영진,남성,솔로,1961
엠씨더맥스 (M.C the MAX),남성,그룹,116274
박화요비,여성,솔로,15268
박진영,남성,솔로,16331
소울다이브,남성,그룹,1881
Justin Timberlake,남성,솔로,11510
김광석,남성,솔로,40990
스피드,남성,그룹,1124
혁오 (HYUKOH),남성,그룹,120290
Make Some Noise,여성,그룹,667
하리,여성,솔로,1150
아이비,여성,솔로,2945
이해리 (다비치),여성,솔로,17327
레이디 제인,여성,솔로,922
은정 (티아라),여성,솔로,3015
에이트,혼성,그룹,5005
환희,남성,솔로,12094
소향,여성,솔로,17020
윤종신,남성,솔로,81080
"Homme (창민, 이현)",남성,그룹,5753
Illson (더블케이),남성,솔로,7547
김민석 (멜로망스),남성,솔로,9432
딕펑스 (DICKPUNKS),남성,그룹,18159
이천원,남성,그룹,1152
홍진영,여성,솔로,25068
V.One,남성,솔로,1563
지나,여성,솔로,4644
쇼콜라,여성,그룹,328
거미,여성,솔로,62223
환불원정대,여성,그룹,16313
방용국,남성,솔로,7405
세븐틴,남성,그룹,200553
2NE1,여성,그룹,55107
애프터스쿨,여성,그룹,4923
김경록 (V.O.S),남성,솔로,1132
Kei (러블리즈),여성,솔로,14323
JAMIE (제이미),여성,솔로,18039
송혜교,여성,솔로,402
베이지,여성,솔로,2880
릴보이 (lIlBOI),남성,솔로,24257
김그림,여성,솔로,3282
유주 (여자친구),여성,솔로,22619
먼데이 키즈 (Monday Kiz),남성,솔로,38659
서은광 (비투비),남성,솔로,51271
영지,여성,솔로,2603
마리오,남성,솔로,562
Junoflo (주노플로),남성,솔로,4896
규현 (KYUHYUN),남성,솔로,64084
조관우,남성,솔로,1712
김보경 (NEON),여성,솔로,12423
돈 스파이크,남성,솔로,356
개코,남성,솔로,25958
DAY6 (데이식스),남성,그룹,107630
버스커 버스커,남성,그룹,68865
맥케이 (McKay),남성,솔로,4705
한경일,남성,솔로,2242
울랄라세션,남성,그룹,10044
남우현,남성,솔로,38987
라디 (Ra. D),남성,솔로,21101
Wanna One (워너원) - 트리플포지션,남성,그룹,24145
FTISLAND (FT아일랜드),남성,그룹,28195
레게 강 같은 평화,남성,그룹,5674
송가인,여성,솔로,21967
이기찬,남성,솔로,3998
장범준,남성,솔로,101561
F-ve Dolls,여성,그룹,846
스윙스,남성,솔로,66704
붐,남성,솔로,468
유아 (오마이걸),여성,솔로,15646
견우 (Kyunwoo),남성,솔로,1183
이수 (엠씨더맥스),남성,솔로,25798
이영현,여성,솔로,5430
기리보이,남성,솔로,163112
솔라 (마마무),여성,솔로,46603
톱밥,남성,솔로,589
마크툽 (MAKTUB),남성,솔로,28911
J.Lee,남성,솔로,7838
이승환,남성,솔로,27070
정용화 (CNBLUE),남성,솔로,15171
Jessica (제시카),여성,솔로,16782
홍대광,남성,솔로,18614
It's,남성,그룹,1887
그루비룸 (GroovyRoom),남성,그룹,43203
이루마,남성,솔로,22765
장희영,여성,솔로,2045
HUS (허밍어반스테레오),남성,솔로,10432
투개월,혼성,그룹,3591
한선화,여성,솔로,1113
라니아,여성,그룹,1303
신현희와김루트,혼성,그룹,12186
KUSH (쿠시),남성,솔로,613
블락비 (Block B),남성,그룹,120747
브라운 아이드 소울,남성,그룹,49706
다이나믹 듀오,남성,그룹,84759
일렉트로보이즈,남성,그룹,1273
어반자카파,혼성,그룹,102612
볼빨간사춘기,여성,솔로,259093
박명수 X 딘딘,남성,그룹,849
태용 (TAEYONG),남성,솔로,18361
The Apple,혼성,그룹,12
산들,남성,솔로,27224
란 (RAN),여성,솔로,2471
쿠기 (Coogie),남성,솔로,24515
수호 (SUHO),남성,솔로,2575
슬기 (SEULGI),여성,솔로,35369
스피카,여성,그룹,5867
B1A4,남성,그룹,51462
윤하 (YOUNHA),여성,솔로,95202
나윤권,남성,솔로,17090
유재환,남성,솔로,6184
지누션,남성,그룹,5540
바비 킴,남성,솔로,6148
샘김 (Sam Kim),남성,솔로,41478
(여자)아이들,여성,그룹,85181
유성은,여성,솔로,21000
찬열 (CHANYEOL),남성,솔로,141811
신효범,여성,솔로,971
전소미,여성,솔로,23874
채동하,남성,솔로,2322
레이디스 코드,여성,그룹,28777
아이유,여성,솔로,736641
GD&TOP,남성,그룹,26213
제이스,여성,솔로,1466
알렉스,남성,솔로,1896
로이킴,남성,솔로,71621
빅마마,여성,그룹,4846
크레용팝,여성,그룹,6664
이비아,여성,솔로,2351
요조,여성,솔로,12536
김은영,여성,솔로,19563
비투비-블루,남성,그룹,41273
사이먼 도미닉,남성,솔로,72330
마이티 마우스,남성,그룹,2364
화사 (Hwa Sa),여성,솔로,60870
베이비소울 (러블리즈),여성,솔로,7015
Supreme Team,남성,그룹,21775
이특 (LEETEUK),남성,솔로,5955
이정아,여성,솔로,1129
임창정,남성,솔로,95165
Eye To Eye,여성,그룹,692
MAN1AC,남성,솔로,690
모모랜드 (MOMOLAND),여성,그룹,15692
김희철,남성,솔로,12438
Dok2,남성,솔로,71679
전상근,남성,솔로,11001
김건모,남성,솔로,17341
포스트맨(Postmen),남성,그룹,13404
JOO,여성,솔로,5181
이재훈 (쿨),남성,솔로,3632
LC9,남성,그룹,108
유재석 X Dok2,남성,그룹,1039
디오 (D.O.),남성,솔로,150413
에이치코드 (H:CODE),남성,솔로,3896
정형돈,남성,솔로,2942
The Quiett,남성,솔로,54090
김동희,여성,솔로,2714
미지,여성,그룹,428
국민의 아들,남성,그룹,16277
포이트리,남성,그룹,257
제니 (JENNIE),여성,솔로,35237
정효빈,여성,솔로,5890
오렌지 캬라멜,여성,그룹,13206
애프터스쿨 BLUE,여성,그룹,505
손승연,여성,솔로,20702
임한별,남성,솔로,14105
Tablo,남성,솔로,18056
김도현,남성,솔로,122
포맨,남성,그룹,48319
잔나비,남성,그룹,109211
레이나 (Raina),여성,솔로,7228
김연우,남성,솔로,35937
이현,남성,솔로,3687
시크릿,여성,그룹,9497
김남주(에이핑크),여성,솔로,16870
C-CLOWN,남성,그룹,4308
Bruno Mars,남성,솔로,93430
NCT DREAM,남성,그룹,141345
니엘,남성,솔로,7700
MC 스나이퍼,남성,솔로,16849
윤도현,남성,솔로,17989
주비스,여성,그룹,447
미스터 파파,남성,그룹,75
"트로이 (범키, 칸토, 재웅, 창우)",남성,그룹,2078
싸이 (PSY),남성,솔로,41175
#Gun,남성,솔로,4191
레드애플,남성,그룹,1401
루피 (Loopy),남성,솔로,31745
공기남,남성,솔로,10840
조이 (JOY),여성,솔로,43223
민아 (걸스데이),여성,솔로,9763
"으뜨거따시 (하하, 자이언티)",남성,그룹,2211
허성현 (Huh!),남성,솔로,5462
에릭남 (Eric Nam),남성,솔로,39710
이승훈,남성,솔로,25277
모트 (Motte),여성,솔로,18499
MASTA WU,남성,솔로,2030
노지훈,남성,솔로,2105
자우림,혼성,그룹,35545
태양,남성,솔로,69278
베이식 (Basick),남성,솔로,11246
에피톤 프로젝트,남성,솔로,41157
인순이,여성,솔로,2191
씨리얼,여성,그룹,236
V,남성,솔로,163198
서인영,여성,솔로,5454
살찐고양이,여성,솔로,733
오종혁,남성,솔로,1204
김재환,남성,솔로,58776
숙희,여성,솔로,5923
소녀시대-태티서 (Girls' Generation-TTS),여성,그룹,37379
2AM,남성,그룹,9007
XIA (준수),남성,솔로,55140
소녀온탑,여성,솔로,2662
소울스타 (SOULSTAR),남성,그룹,7027
인피니트H,남성,그룹,31719
MINO (송민호),남성,솔로,90680
타우,남성,솔로,189
린,여성,솔로,44746
김경호,남성,솔로,12718
나얼,남성,솔로,52399
EXO,남성,그룹,527379
임세준,남성,솔로,12620
B.A.P,남성,그룹,24947
브레이브걸스,여성,그룹,43868
Apink (에이핑크),여성,그룹,139149
황인욱,남성,솔로,9285
Knock,남성,그룹,3981
YB,남성,그룹,16936
이장우,남성,솔로,264
오마이걸 (OH MY GIRL),여성,그룹,119036
하은,남성,솔로,8998
JBJ,남성,그룹,26195
센치한 하하 (하하 & 10cm),남성,그룹,460
김준수,남성,솔로,55140
장기하와 얼굴들,남성,그룹,20816
형용돈죵 (정형돈 & G-DRAGON),남성,그룹,2154
배다해,여성,솔로,1190
이보람,여성,솔로,3995
김완선,여성,솔로,2338
토이,남성,솔로,50498
지민,남성,솔로,137545
AB6IX (에이비식스),남성,그룹,32719
런치 (LUNCH),여성,솔로,2242
헤이즈 (Heize),여성,솔로,152376
가인,여성,솔로,27472
정승환,남성,솔로,99954
양파,여성,솔로,9949
미료,여성,솔로,2772
NCT 127,남성,그룹,138331
원티드,남성,그룹,2572
TWICE (트와이스),여성,그룹,214135
정준영,남성,솔로,20483
S.E.S.,여성,그룹,12657
피기돌스,여성,그룹,213
송지은,여성,솔로,7592
유산슬,남성,솔로,11849
티아라,여성,그룹,20747
배치기,남성,그룹,16357
마이키,남성,솔로,201
이지영 (빅마마),여성,솔로,584
용감한 녀석들,혼성,그룹,537
걸스데이,여성,그룹,53837
DEAN,남성,솔로,159348
정은지,여성,솔로,63690
민현 (뉴이스트),남성,솔로,59721
YDG,남성,솔로,7712
그냥노창,남성,솔로,36619
루나 (LUNA),여성,솔로,10981
아이오아이 (I.O.I),여성,그룹,78096
엠블랙,남성,그룹,5207
메이비 (Maybee),여성,솔로,1837
WIN,남성,그룹,10239
대성,남성,솔로,25918
김나영,여성,솔로,58687
화려강산,여성,그룹,845
BIGBANG,남성,그룹,261922
민서,여성,솔로,16877
레인보우 블랙,여성,그룹,897
프리스타일,남성,그룹,6028
SUPER JUNIOR-D&E,남성,그룹,21600
신지훈,여성,솔로,6833
HYNN (박혜원),여성,솔로,27557
Wanna One (워너원) - 남바완,남성,그룹,15711
양정승,남성,솔로,1801
씨야,여성,그룹,11960
블랙넛 (Black Nut),남성,솔로,39992
별,여성,솔로,7276
달마시안 (DMTN),남성,그룹,732
태일 (블락비),남성,솔로,21790
NS 윤지,여성,솔로,5415
태사비애,여성,그룹,3449
조권,남성,솔로,3801
멜로디데이 (MelodyDay),여성,그룹,6969
SURAN (수란),여성,솔로,39678
애즈원,여성,그룹,10773
2YOON (포미닛 투윤),여성,그룹,971
희진 (GOOD DAY),여성,솔로,1165
육지담,여성,솔로,5417
방예담,남성,솔로,5589
벤,여성,솔로,82786
Raiden,남성,솔로,995
닐로(Nilo),남성,솔로,18389
박봄 (Park Bom),여성,솔로,16160
이수영,여성,솔로,18305
카더가든,남성,솔로,53432
양홍원,남성,솔로,32848
SIXC (6 crazy),남성,그룹,1109
바닷길 (길 & 바다),혼성,그룹,237
유두래곤,남성,솔로,1963
신혜성,남성,솔로,17220
태민 (TAEMIN),남성,솔로,67004
성훈 (브라운 아이드 소울),남성,솔로,2676
7 go up,여성,그룹,1515
MFBTY,혼성,그룹,6581
이승철,남성,솔로,21612
제이레빗(J Rabbit),여성,그룹,50616
플라이 투 더 스카이,남성,그룹,35585
지코 (ZICO),남성,솔로,190505
노라조,남성,그룹,11063
이소라,여성,솔로,37086
아이언,남성,솔로,18447
소녀시대-Oh!GG,여성,그룹,7524
펜타곤,남성,그룹,21542
여자친구 (GFRIEND),여성,그룹,129614
신용재 (2F),남성,솔로,32074
G.A.B (길 & BoA),혼성,그룹,40
식케이 (Sik-K),남성,솔로,48762
임영웅,남성,솔로,84053
이선희,여성,솔로,34825
치타 (CHEETAH),여성,솔로,19563
백지영,여성,솔로,34758
김진호 (SG워너비),남성,솔로,17646
길미,여성,솔로,3610
Ab 에비뉴,여성,그룹,359
트러블메이커,혼성,그룹,7123
제이세라,여성,솔로,8566
GG (박명수 & G-Dragon),남성,그룹,1915
유엔,남성,그룹,2687
김원주 (2F),남성,솔로,2117
이루펀트,남성,그룹,10075
GD X TAEYANG,남성,그룹,26268
하성운,남성,솔로,50846
C JAMM,남성,솔로,54481
양다일,남성,솔로,60902
써니사이드,남성,그룹,1148
박완규,남성,솔로,4684
이설아,여성,솔로,2806
태연 (TAEYEON),여성,솔로,224854
버블 시스터즈,여성,그룹,3555
부활,남성,그룹,13219
장혜진,여성,솔로,7542
2LSON,혼성,그룹,16169
송이한,남성,솔로,3041
제아파이브,남성,그룹,975
신예영,여성,솔로,4939
V.O.S,남성,그룹,14440
니모,여성,솔로,520
헬로비너스,여성,그룹,5997
ITZY (있지),여성,그룹,50746
신보라,여성,솔로,1851
나플라 (nafla),남성,솔로,43206
하우두유둘 (유재석 & 유희열),남성,그룹,553
윤혁(디셈버),남성,솔로,973
윤민수(바이브),남성,솔로,14625
허각,남성,솔로,58778
버즈,남성,그룹,62804
러블리즈,여성,그룹,52175
BewhY (비와이),남성,솔로,88130
"이유 갓지(GOD G) 않은 이유 (박명수, 아이유)",혼성,그룹,9788
선재 (snzae),남성,솔로,3879
테이스티,남성,그룹,738
김태우,남성,솔로,11725
비,남성,솔로,16578
장우혁,남성,솔로,5065
정인,여성,솔로,22321
김현중,남성,솔로,2983
소유 (SOYOU),여성,솔로,29777
스탠딩 에그,남성,그룹,95091
오담률 (김농밀),남성,솔로,7202
유키스,남성,그룹,2447
거머리 (박명수 & 프라이머리),남성,그룹,209
김효은,남성,솔로,15990
가비엔제이,여성,그룹,15122
Wanna One (워너원),남성,그룹,235209
용준형,남성,솔로,40777
린다G,여성,솔로,3501
HIGH4 (하이포),남성,그룹,2645
조용필,남성,솔로,9715
스윗소로우 (SWEET SORROW),남성,그룹,14736
데프콘,남성,솔로,7136
레인보우 픽시,여성,그룹,495
50kg,남성,그룹,106
god,남성,그룹,56583
정준일,남성,솔로,61470
오반 (OVAN),남성,솔로,32666
윤비 (YunB),남성,솔로,3165
Sondia,여성,솔로,6968
나비,여성,솔로,16376
김종국,남성,솔로,11127
허니지 (Honey-G),남성,그룹,1453
뚱스,남성,그룹,353
타이니지,여성,그룹,884
S.M. THE BALLAD,혼성,그룹,5822
최자,남성,솔로,3408
더 포지션,남성,솔로,3557
하동균,남성,솔로,19503
GOT7 (갓세븐),남성,그룹,95026
개리,남성,솔로,38630
보이프렌드,남성,그룹,6699
딥플로우,남성,솔로,9659
40,남성,솔로,30984
지선,여성,솔로,2469
하림,남성,솔로,5826
015B,남성,그룹,8924
김필,남성,솔로,46258
"오대천왕 (정형돈, 밴드 혁오)",남성,그룹,2576
나다 (NADA),여성,솔로,3148
은지원,남성,솔로,20916
스텔라,여성,그룹,5283
윤두준,남성,솔로,35857
코드 쿤스트 (CODE KUNST),남성,솔로,33935
진운,남성,솔로,962
클래지,남성,솔로,319
KATIE,여성,솔로,12359
미스에스,여성,그룹,3753
제아,여성,솔로,3996
일 락,남성,솔로,1335
하현우 (국카스텐),남성,솔로,29828
유나킴,여성,솔로,2675
장덕철,남성,그룹,13660
슬리피,남성,솔로,4257
KCM,남성,솔로,8106
에디킴,남성,솔로,31698
Khundi Panda,남성,솔로,8434
레인보우,여성,그룹,7235
범키,남성,솔로,28191
무한도전,남성,그룹,18954
인크레더블,남성,솔로,2010
CHEEZE (치즈),여성,솔로,85794
아웃사이더,남성,솔로,10898
소지섭,남성,솔로,2870
수퍼비,남성,솔로,48833
San E,남성,솔로,87799
빈지노 (Beenzino),남성,솔로,131598
언프리티 랩스타 2,여성,그룹,982
SHY (손호영),남성,솔로,6081
언니쓰,여성,그룹,11996
애프터스쿨 RED,여성,그룹,382
이승기,남성,솔로,32474
티파니 (TIFFANY),여성,솔로,24265
BILL STAX (빌스택스),남성,솔로,29521
"투하트 (우현, 키)",남성,그룹,20785
손담비,여성,솔로,2307
마야,여성,솔로,2153
윤건,남성,솔로,12004
장미하관 (노홍철 & 장미여관),남성,그룹,181
2BIC(투빅),남성,그룹,17264
브라운아이드걸스,여성,그룹,21169
M.I.B,남성,그룹,2579
임도혁,남성,솔로,2435
순순희,남성,그룹,2236
드렁큰 타이거,남성,솔로,13764
Red Velvet (레드벨벳),여성,그룹,256857
iKON,남성,그룹,124461
박재범,남성,솔로,110512
AOA CREAM,여성,그룹,4154
팔로알토 (Paloalto),남성,솔로,30343
Bro,남성,솔로,3206
터보,남성,그룹,10810
토니 안,남성,솔로,3755
Rohann (이로한),남성,솔로,15273
서태지,남성,솔로,19048
버벌진트,남성,솔로,37147
이진성 (먼데이 키즈),남성,솔로,3405
넉살,남성,솔로,25689
제이워크,남성,그룹,9240
세훈&찬열,남성,그룹,38371
4minute,여성,그룹,15839
디아,여성,솔로,4423
SG 워너비,남성,그룹,55054
성시경,남성,솔로,114273
다비치,여성,그룹,124177
글램,여성,그룹,467
에이프릴 (APRIL),여성,그룹,21605
M시그널,남성,그룹,131
병살 (정준하 & 김C),남성,그룹,68
월하소년 (月下少年),남성,솔로,2485
김재석,남성,솔로,418
장우영,남성,솔로,5268
김범수,남성,솔로,37849
헨리 (HENRY),남성,솔로,29747
마마무 (Mamamoo),여성,그룹,232414
ILLIONAIRE RECORDS,남성,그룹,38247
"싹쓰리 (유두래곤, 린다G, 비룡)",혼성,그룹,39949
마미손,남성,솔로,14233
태완 (Taewan),남성,솔로,2796
강민경 (다비치),여성,솔로,9486
Wanna One (워너원) - 더힐,남성,그룹,17039
쥬얼리,여성,그룹,1833
엔플라잉 (N.Flying),남성,그룹,32149
BOBBY,남성,솔로,67214
소피야 (Sophiya),여성,솔로,3640
앤씨아,여성,솔로,8051
초아,여성,솔로,11239
행주,남성,솔로,10424
뉴챔프,남성,솔로,2328
Crush,남성,솔로,217148
박원,남성,솔로,48692
Lim Kim,여성,솔로,22848
MFBTY,혼성,그룹,6580
JJ,여성,솔로,206
지아,여성,솔로,40805
백청강,남성,솔로,2344
김민지,여성,솔로,24
이우,남성,솔로,5864
더 네임,남성,솔로,2054
10CM,남성,솔로,154723
더 넛츠 (The NuTs),남성,그룹,3064
경서,여성,솔로,4012
Wanna One (워너원) - 린온미,남성,그룹,17710
CNBLUE (씨엔블루),남성,그룹,22147
수펄스,여성,그룹,92
CL,여성,솔로,16446
박효신,남성,솔로,253913
임정희,여성,솔로,7502
윤성기,남성,솔로,234
김조한,남성,솔로,3886
카라,여성,그룹,13912
플라워,남성,그룹,6064
디셈버,남성,그룹,15516
휘성 (Realslow),남성,솔로,35405
JUNIEL(서아),여성,솔로,18900
UV,남성,그룹,4092
젝스키스,남성,그룹,49258
이기광,남성,솔로,35847
변진섭,남성,솔로,4654
윤아 (YOONA),여성,솔로,20628
비스트,남성,그룹,128649
박지윤,여성,솔로,12554
천상지희 다나&선데이,여성,그룹,295
루이 (긱스),남성,솔로,8144
윤미래,여성,솔로,50811
에픽하이 (EPIK HIGH),남성,그룹,107462
달샤벳,여성,그룹,5827
셰인,남성,솔로,280
노을,남성,그룹,42393
나몰라패밀리N,남성,그룹,433
고유진 (플라워),남성,솔로,3009
Kid Milli,남성,솔로,66776
주석,남성,솔로,1934
슈퍼스타K 3,혼성,그룹,250
세븐티핑거스 (하하 & 장기하와 얼굴들),남성,그룹,102
This diff could not be displayed because it is too large.
__name__ = 'textrank'
__author__ = 'GyuhoLee'
__version__ = '0.0.1'
from .summarizer import KeywordSummarizer
from .summarizer import KeysentenceSummarizer
\ No newline at end of file
import numpy as np
from sklearn.preprocessing import normalize
def pagerank(x, df=0.85, max_iter=30, bias=None):
"""
Arguments
---------
x : scipy.sparse.csr_matrix
shape = (n vertex, n vertex)
df : float
Damping factor, 0 < df < 1
max_iter : int
Maximum number of iteration
bias : numpy.ndarray or None
If None, equal bias
Returns
-------
R : numpy.ndarray
PageRank vector. shape = (n vertex, 1)
"""
assert 0 < df < 1
# initialize
A = normalize(x, axis=0, norm='l1')
R = np.ones(A.shape[0]).reshape(-1,1)
# check bias
if bias is None:
bias = (1 - df) * np.ones(A.shape[0]).reshape(-1,1)
else:
bias = bias.reshape(-1,1)
bias = A.shape[0] * bias / bias.sum()
assert bias.shape[0] == A.shape[0]
bias = (1 - df) * bias
# iteration
for _ in range(max_iter):
R = df * (A * R) + bias
return R
\ No newline at end of file
from collections import Counter
import math
import numpy as np
import scipy as sp
from scipy.sparse import csr_matrix
from sklearn.metrics import pairwise_distances
from .utils import scan_vocabulary
from .utils import tokenize_sents
def sent_graph(sents, tokenize=None, min_count=2, min_sim=0.3,
similarity=None, vocab_to_idx=None, verbose=False):
"""
Arguments
---------
sents : list of str
Sentence list
tokenize : callable
tokenize(sent) return list of str
min_count : int
Minimum term frequency
min_sim : float
Minimum similarity between sentences
similarity : callable or str
similarity(s1, s2) returns float
s1 and s2 are list of str.
available similarity = [callable, 'cosine', 'textrank']
vocab_to_idx : dict
Vocabulary to index mapper.
If None, this function scan vocabulary first.
verbose : Boolean
If True, verbose mode on
Returns
-------
sentence similarity graph : scipy.sparse.csr_matrix
shape = (n sents, n sents)
"""
if vocab_to_idx is None:
idx_to_vocab, vocab_to_idx = scan_vocabulary(sents, tokenize, min_count)
else:
idx_to_vocab = [vocab for vocab, _ in sorted(vocab_to_idx.items(), key=lambda x:x[1])]
x = vectorize_sents(sents, tokenize, vocab_to_idx)
if similarity == 'cosine':
x = numpy_cosine_similarity_matrix(x, min_sim, verbose, batch_size=1000)
else:
x = numpy_textrank_similarity_matrix(x, min_sim, verbose, batch_size=1000)
return x
def vectorize_sents(sents, tokenize, vocab_to_idx):
rows, cols, data = [], [], []
for i, sent in enumerate(sents):
counter = Counter(tokenize(sent))
for token, count in counter.items():
j = vocab_to_idx.get(token, -1)
if j == -1:
continue
rows.append(i)
cols.append(j)
data.append(count)
n_rows = len(sents)
n_cols = len(vocab_to_idx)
return csr_matrix((data, (rows, cols)), shape=(n_rows, n_cols))
def numpy_cosine_similarity_matrix(x, min_sim=0.3, verbose=True, batch_size=1000):
n_rows = x.shape[0]
mat = []
for bidx in range(math.ceil(n_rows / batch_size)):
b = int(bidx * batch_size)
e = min(n_rows, int((bidx+1) * batch_size))
psim = 1 - pairwise_distances(x[b:e], x, metric='cosine')
rows, cols = np.where(psim >= min_sim)
data = psim[rows, cols]
mat.append(csr_matrix((data, (rows, cols)), shape=(e-b, n_rows)))
if verbose:
print('\rcalculating cosine sentence similarity {} / {}'.format(b, n_rows), end='')
mat = sp.sparse.vstack(mat)
if verbose:
print('\rcalculating cosine sentence similarity was done with {} sents'.format(n_rows))
return mat
def numpy_textrank_similarity_matrix(x, min_sim=0.3, verbose=True, min_length=1, batch_size=1000):
n_rows, n_cols = x.shape
# Boolean matrix
rows, cols = x.nonzero()
data = np.ones(rows.shape[0])
z = csr_matrix((data, (rows, cols)), shape=(n_rows, n_cols))
# Inverse sentence length
size = np.asarray(x.sum(axis=1)).reshape(-1)
size[np.where(size <= min_length)] = 10000
size = np.log(size)
mat = []
for bidx in range(math.ceil(n_rows / batch_size)):
# slicing
b = int(bidx * batch_size)
e = min(n_rows, int((bidx+1) * batch_size))
# dot product
inner = z[b:e,:] * z.transpose()
# sentence len[i,j] = size[i] + size[j]
norm = size[b:e].reshape(-1,1) + size.reshape(1,-1)
norm = norm ** (-1)
norm[np.where(norm == np.inf)] = 0
# normalize
sim = inner.multiply(norm).tocsr()
rows, cols = (sim >= min_sim).nonzero()
data = np.asarray(sim[rows, cols]).reshape(-1)
# append
mat.append(csr_matrix((data, (rows, cols)), shape=(e-b, n_rows)))
if verbose:
print('\rcalculating textrank sentence similarity {} / {}'.format(b, n_rows), end='')
mat = sp.sparse.vstack(mat)
if verbose:
print('\rcalculating textrank sentence similarity was done with {} sents'.format(n_rows))
return mat
def graph_with_python_sim(tokens, verbose, similarity, min_sim):
if similarity == 'cosine':
similarity = cosine_sent_sim
elif callable(similarity):
similarity = similarity
else:
similarity = textrank_sent_sim
rows, cols, data = [], [], []
n_sents = len(tokens)
for i, tokens_i in enumerate(tokens):
if verbose and i % 1000 == 0:
print('\rconstructing sentence graph {} / {} ...'.format(i, n_sents), end='')
for j, tokens_j in enumerate(tokens):
if i >= j:
continue
sim = similarity(tokens_i, tokens_j)
if sim < min_sim:
continue
rows.append(i)
cols.append(j)
data.append(sim)
if verbose:
print('\rconstructing sentence graph was constructed from {} sents'.format(n_sents))
return csr_matrix((data, (rows, cols)), shape=(n_sents, n_sents))
def textrank_sent_sim(s1, s2):
"""
Arguments
---------
s1, s2 : list of str
Tokenized sentences
Returns
-------
Sentence similarity : float
Non-negative number
"""
n1 = len(s1)
n2 = len(s2)
if (n1 <= 1) or (n2 <= 1):
return 0
common = len(set(s1).intersection(set(s2)))
base = math.log(n1) + math.log(n2)
return common / base
def cosine_sent_sim(s1, s2):
"""
Arguments
---------
s1, s2 : list of str
Tokenized sentences
Returns
-------
Sentence similarity : float
Non-negative number
"""
if (not s1) or (not s2):
return 0
s1 = Counter(s1)
s2 = Counter(s2)
norm1 = math.sqrt(sum(v ** 2 for v in s1.values()))
norm2 = math.sqrt(sum(v ** 2 for v in s2.values()))
prod = 0
for k, v in s1.items():
prod += v * s2.get(k, 0)
return prod / (norm1 * norm2)
\ No newline at end of file
import numpy as np
from .rank import pagerank
from .sentence import sent_graph
from .word import word_graph
class KeywordSummarizer:
"""
Arguments
---------
sents : list of str
Sentence list
tokenize : callable
Tokenize function: tokenize(str) = list of str
min_count : int
Minumum frequency of words will be used to construct sentence graph
window : int
Word cooccurrence window size. Default is -1.
'-1' means there is cooccurrence between two words if the words occur in a sentence
min_cooccurrence : int
Minimum cooccurrence frequency of two words
vocab_to_idx : dict or None
Vocabulary to index mapper
df : float
PageRank damping factor
max_iter : int
Number of PageRank iterations
verbose : Boolean
If True, it shows training progress
"""
def __init__(self, sents=None, tokenize=None, min_count=2,
window=-1, min_cooccurrence=2, vocab_to_idx=None,
df=0.85, max_iter=30, verbose=False):
self.tokenize = tokenize
self.min_count = min_count
self.window = window
self.min_cooccurrence = min_cooccurrence
self.vocab_to_idx = vocab_to_idx
self.df = df
self.max_iter = max_iter
self.verbose = verbose
if sents is not None:
self.train_textrank(sents)
def train_textrank(self, sents, bias=None):
"""
Arguments
---------
sents : list of str
Sentence list
bias : None or numpy.ndarray
PageRank bias term
Returns
-------
None
"""
g, self.idx_to_vocab = word_graph(sents,
self.tokenize, self.min_count,self.window,
self.min_cooccurrence, self.vocab_to_idx, self.verbose)
self.R = pagerank(g, self.df, self.max_iter, bias).reshape(-1)
if self.verbose:
print('trained TextRank. n words = {}'.format(self.R.shape[0]))
def keywords(self, topk=30):
"""
Arguments
---------
topk : int
Number of keywords selected from TextRank
Returns
-------
keywords : list of tuple
Each tuple stands for (word, rank)
"""
if not hasattr(self, 'R'):
raise RuntimeError('Train textrank first or use summarize function')
idxs = self.R.argsort()[-topk:]
keywords = [(self.idx_to_vocab[idx], self.R[idx]) for idx in reversed(idxs)]
return keywords
def summarize(self, sents, topk=30):
"""
Arguments
---------
sents : list of str
Sentence list
topk : int
Number of keywords selected from TextRank
Returns
-------
keywords : list of tuple
Each tuple stands for (word, rank)
"""
self.train_textrank(sents)
return self.keywords(topk)
class KeysentenceSummarizer:
"""
Arguments
---------
sents : list of str
Sentence list
tokenize : callable
Tokenize function: tokenize(str) = list of str
min_count : int
Minumum frequency of words will be used to construct sentence graph
min_sim : float
Minimum similarity between sentences in sentence graph
similarity : str
available similarity = ['cosine', 'textrank']
vocab_to_idx : dict or None
Vocabulary to index mapper
df : float
PageRank damping factor
max_iter : int
Number of PageRank iterations
verbose : Boolean
If True, it shows training progress
"""
def __init__(self, sents=None, tokenize=None, min_count=2,
min_sim=0.3, similarity=None, vocab_to_idx=None,
df=0.85, max_iter=30, verbose=False):
self.tokenize = tokenize
self.min_count = min_count
self.min_sim = min_sim
self.similarity = similarity
self.vocab_to_idx = vocab_to_idx
self.df = df
self.max_iter = max_iter
self.verbose = verbose
if sents is not None:
self.train_textrank(sents)
def train_textrank(self, sents, bias=None):
"""
Arguments
---------
sents : list of str
Sentence list
bias : None or numpy.ndarray
PageRank bias term
Shape must be (n_sents,)
Returns
-------
None
"""
g = sent_graph(sents, self.tokenize, self.min_count,
self.min_sim, self.similarity, self.vocab_to_idx, self.verbose)
self.R = pagerank(g, self.df, self.max_iter, bias).reshape(-1)
if self.verbose:
print('trained TextRank. n sentences = {}'.format(self.R.shape[0]))
def summarize(self, sents, topk=30, bias=None):
"""
Arguments
---------
sents : list of str
Sentence list
topk : int
Number of key-sentences to be selected.
bias : None or numpy.ndarray
PageRank bias term
Shape must be (n_sents,)
Returns
-------
keysents : list of tuple
Each tuple stands for (sentence index, rank, sentence)
Usage
-----
>>> from textrank import KeysentenceSummarizer
>>> summarizer = KeysentenceSummarizer(tokenize = tokenizer, min_sim = 0.5)
>>> keysents = summarizer.summarize(texts, topk=30)
"""
n_sents = len(sents)
if isinstance(bias, np.ndarray):
if bias.shape != (n_sents,):
raise ValueError('The shape of bias must be (n_sents,) but {}'.format(bias.shape))
elif bias is not None:
raise ValueError('The type of bias must be None or numpy.ndarray but the type is {}'.format(type(bias)))
self.train_textrank(sents, bias)
idxs = self.R.argsort()[-topk:]
keysents = [(idx, self.R[idx], sents[idx]) for idx in reversed(idxs)]
return keysents
\ No newline at end of file
from collections import Counter
from scipy.sparse import csr_matrix
import numpy as np
def scan_vocabulary(sents, tokenize=None, min_count=2):
"""
Arguments
---------
sents : list of str
Sentence list
tokenize : callable
tokenize(str) returns list of str
min_count : int
Minumum term frequency
Returns
-------
idx_to_vocab : list of str
Vocabulary list
vocab_to_idx : dict
Vocabulary to index mapper.
"""
counter = Counter(w for sent in sents for w in tokenize(sent))
counter = {w:c for w,c in counter.items() if c >= min_count}
idx_to_vocab = [w for w, _ in sorted(counter.items(), key=lambda x:-x[1])]
vocab_to_idx = {vocab:idx for idx, vocab in enumerate(idx_to_vocab)}
return idx_to_vocab, vocab_to_idx
def tokenize_sents(sents, tokenize):
"""
Arguments
---------
sents : list of str
Sentence list
tokenize : callable
tokenize(sent) returns list of str (word sequence)
Returns
-------
tokenized sentence list : list of list of str
"""
if tokenize is not None:
return [tokenize(sent) for sent in sents]
else:
return sents
def vectorize(tokens, vocab_to_idx):
"""
Arguments
---------
tokens : list of list of str
Tokenzed sentence list
vocab_to_idx : dict
Vocabulary to index mapper
Returns
-------
sentence bow : scipy.sparse.csr_matrix
shape = (n_sents, n_terms)
"""
rows, cols, data = [], [], []
for i, tokens_i in enumerate(tokens):
for t, c in Counter(tokens_i).items():
j = vocab_to_idx.get(t, -1)
if j == -1:
continue
rows.append(i)
cols.append(j)
data.append(c)
n_sents = len(tokens)
n_terms = len(vocab_to_idx)
x = csr_matrix((data, (rows, cols)), shape=(n_sents, n_terms))
return x
\ No newline at end of file
from collections import defaultdict
from scipy.sparse import csr_matrix
from .utils import scan_vocabulary
from .utils import tokenize_sents
def word_graph(sents, tokenize=None, min_count=2, window=2,
min_cooccurrence=2, vocab_to_idx=None, verbose=False):
"""
Arguments
---------
sents : list of str
Sentence list
tokenize : callable
tokenize(str) returns list of str
min_count : int
Minumum term frequency
window : int
Co-occurrence window size
min_cooccurrence : int
Minimum cooccurrence frequency
vocab_to_idx : dict
Vocabulary to index mapper.
If None, this function scan vocabulary first.
verbose : Boolean
If True, verbose mode on
Returns
-------
co-occurrence word graph : scipy.sparse.csr_matrix
idx_to_vocab : list of str
Word list corresponding row and column
"""
if vocab_to_idx is None:
idx_to_vocab, vocab_to_idx = scan_vocabulary(sents, tokenize, min_count)
else:
idx_to_vocab = [vocab for vocab, _ in sorted(vocab_to_idx.items(), key=lambda x:x[1])]
tokens = tokenize_sents(sents, tokenize)
g = cooccurrence(tokens, vocab_to_idx, window, min_cooccurrence, verbose)
return g, idx_to_vocab
def cooccurrence(tokens, vocab_to_idx, window=2, min_cooccurrence=2, verbose=False):
"""
Arguments
---------
tokens : list of list of str
Tokenized sentence list
vocab_to_idx : dict
Vocabulary to index mapper
window : int
Co-occurrence window size
min_cooccurrence : int
Minimum cooccurrence frequency
verbose : Boolean
If True, verbose mode on
Returns
-------
co-occurrence matrix : scipy.sparse.csr_matrix
shape = (n_vocabs, n_vocabs)
"""
counter = defaultdict(int)
for s, tokens_i in enumerate(tokens):
if verbose and s % 1000 == 0:
print('\rword cooccurrence counting {}'.format(s), end='')
vocabs = [vocab_to_idx[w] for w in tokens_i if w in vocab_to_idx]
n = len(vocabs)
for i, v in enumerate(vocabs):
if window <= 0:
b, e = 0, n
else:
b = max(0, i - window)
e = min(i + window, n)
for j in range(b, e):
if i == j:
continue
counter[(v, vocabs[j])] += 1
counter[(vocabs[j], v)] += 1
counter = {k:v for k,v in counter.items() if v >= min_cooccurrence}
n_vocabs = len(vocab_to_idx)
if verbose:
print('\rword cooccurrence counting from {} sents was done'.format(s+1))
return dict_to_mat(counter, n_vocabs, n_vocabs)
def dict_to_mat(d, n_rows, n_cols):
"""
Arguments
---------
d : dict
key : (i,j) tuple
value : float value
Returns
-------
scipy.sparse.csr_matrix
"""
rows, cols, data = [], [], []
for (i, j), v in d.items():
rows.append(i)
cols.append(j)
data.append(v)
return csr_matrix((data, (rows, cols)), shape=(n_rows, n_cols))
\ No newline at end of file