├── .gitignore ├── LICENSE ├── NEMCrawler ├── NEM_spider.py ├── data │ └── stop_words.txt └── text_mining.py ├── README.md └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | venv/ 3 | *.pyc 4 | *.json 5 | *.html 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 汪小花 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /NEMCrawler/NEM_spider.py: -------------------------------------------------------------------------------- 1 | #/usr/bin/env python3 2 | # @Author: GreatV 3 | # @Date: 2017-04-16 4 | # @Update: 2018-01-21 5 | 6 | ''' 7 | 本项目需要用到的网易云音乐 api 8 | 参考 https://github.com/darknessomi/musicbox/blob/master/NEMbox/api.py 9 | ''' 10 | 11 | import requests 12 | import json 13 | from pprint import pprint 14 | 15 | 16 | class NEM_spider(object): 17 | 18 | 19 | def __init__(self): 20 | self.headers = { 21 | 'host': 'music.163.com', 22 | 'Referer': 'http://music.163.com/search/', 23 | 'User-Agent': 24 | ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' 25 | ' (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36') 26 | } 27 | self.cookies = {'appver': '1.5.2'} 28 | 29 | 30 | # Getting playlist (歌单) 31 | def get_playlist_detail(self, playlist_id): 32 | url = 'http://music.163.com/api/playlist/detail' 33 | payload = {'id': playlist_id} 34 | 35 | r = requests.get(url, params = payload, headers = self.headers, 36 | cookies=self.cookies) 37 | 38 | playlist_detail = r.json()['result']['tracks'] 39 | 40 | return playlist_detail 41 | 42 | 43 | def from_playlist_get_song_list(self, playlist_id): 44 | playlist_detail = self.get_playlist_detail(playlist_id) 45 | songlist = [] 46 | for song_detail in playlist_detail: 47 | song = {} 48 | song['id'] = song_detail['id'] 49 | song['name'] = song_detail['name'] 50 | artists_detail = [] 51 | for artist in song_detail['artists']: 52 | artist_detail = {} 53 | artist_detail['name'] = artist['name'] 54 | artist_detail['id'] = artist['id'] 55 | artists_detail.append(artist_detail) 56 | song['artists'] = artists_detail 57 | songlist.append(song) 58 | 59 | return songlist 60 | 61 | 62 | def get_artists_songlist(self, artist_id): 63 | url = 'http://music.163.com/api/artist/{}'.format(artist_id) 64 | 65 | r = requests.get(url, headers=self.headers, cookies=self.cookies) 66 | hotSongs = r.json()['hotSongs'] 67 | 68 | songlist = [] 69 | for hotSong in hotSongs: 70 | song = {} 71 | song['id'] = hotSong['id'] 72 | song['name'] = hotSong['name'] 73 | songlist.append(song) 74 | 75 | return songlist 76 | 77 | 78 | def get_song_lyric(self, song_id): 79 | url = 'http://music.163.com/api/song/lyric' 80 | payload = { 81 | 'os': 'pc', # osx 82 | 'id': song_id, 83 | 'lv': -1, 84 | 'kv': -1, 85 | 'tv': -1 86 | } 87 | 88 | r = requests.get(url, params=payload, headers=self.headers, 89 | cookies=self.cookies) 90 | 91 | result = r.json() 92 | # print(result) 93 | if ('nolyric' in result) or ('uncollected' in result): 94 | return None 95 | elif 'lyric' not in result['lrc']: 96 | return None 97 | else: 98 | return result['lrc']['lyric'] 99 | 100 | 101 | def get_song_comments(self, song_id, offset=0, total='false', limit=100): 102 | url = ('http://music.163.com/api/v1/resource/comments/R_SO_4_{}/' 103 | ''.format(song_id)) 104 | payload = { 105 | 'rid': 'R_SO_4_{}'.format(song_id), 106 | 'offset': offset, 107 | 'total': total, 108 | 'limit': limit 109 | } 110 | 111 | r = requests.get(url, params=payload, headers=self.headers, 112 | cookies=self.cookies) 113 | 114 | 115 | return r.json() 116 | 117 | 118 | def get_total_comments(self, song_id): 119 | comments = self.get_song_comments(song_id)['comments'] 120 | comments_list = [] 121 | offset = 0 122 | while comments: 123 | for comment in comments: 124 | comment_detail = {} 125 | comment_detail['user_name'] = comment['user']['nickname'] 126 | comment_detail['user_id'] = comment['user']['userId'] 127 | comment_detail['content'] = comment['content'] 128 | comment_detail['time'] = comment['time'] 129 | comments_list.append(comment_detail) 130 | 131 | offset = offset + 100 132 | comments = self.get_song_comments(song_id, 133 | offset=offset)['comments'] 134 | 135 | return comments_list 136 | 137 | 138 | def from_playlist_get_artist_id(self, *playlists): 139 | artist_id_list = [] 140 | for playlist_id in playlists: 141 | song_list = self.from_playlist_get_song_list(playlist_id) 142 | for song in song_list: 143 | for artist in song['artists']: 144 | print("Got {}'s id ==> {}".format(artist['name'], 145 | artist['id'])) 146 | # artist_id_dict = {} 147 | # artist_id_dict['name'] = artist['name'] 148 | # artist_id_dict['id'] = artist['id'] 149 | # artist_id_list.append(artist_id_dict) 150 | artist_id_list.append(artist['id']) 151 | 152 | artist_id_list=list(set(artist_id_list)) 153 | return artist_id_list 154 | 155 | 156 | def from_playlist_get_full_lyric_text(self, *playlists): 157 | artist_id_list = self.from_playlist_get_artist_id(playlists) 158 | song_id_list = [] 159 | lyric_list = [] 160 | 161 | for artist_id in artist_id_list: 162 | 163 | print('Processing the work of the artist with id: {}' 164 | ''.format(artist_id)) 165 | 166 | songlist = self.get_artists_songlist(artist_id) 167 | artist_song_id_list = [song['id'] for song in songlist] 168 | song_id_list.extend(artist_song_id_list) 169 | 170 | song_id_list = list(set(song_id_list)) 171 | 172 | for song_id in song_id_list: 173 | 174 | print('Processing the lyric of the song with id: {}' 175 | ''.format(song_id)) 176 | 177 | lyric = self.get_song_lyric(song_id) 178 | # print(lyric) 179 | if lyric is not None: 180 | # pprint(lyric) 181 | lyric_list.append(lyric) 182 | 183 | return lyric_list 184 | 185 | 186 | 187 | 188 | if __name__ == '__main__': 189 | spider = NEM_spider() 190 | # playlist = spider.get_playlist_detail(605415618) 191 | # with open('test_playlist.json', 'w') as f: 192 | # pprint(playlist, f) 193 | 194 | # songlist = spider.from_playlist_get_song_list(605415618) 195 | # with open('test_songlist.json', 'w') as f: 196 | # pprint(songlist, f) 197 | 198 | # songlist = spider.get_artists_songlist(1007170) 199 | # with open('test_artist_songlist1.json', 'w') as f: 200 | # pprint(songlist, f) 201 | 202 | # songlyric = spider.get_song_lyric(31838188) 203 | # with open('test_songlyric1.json', 'w') as f: 204 | # pprint(songlyric, f) 205 | 206 | # songcomments = spider.get_song_comments(31838188) 207 | # with open('test_songcomments.json', 'w') as f: 208 | # pprint(songcomments, f) 209 | 210 | # songcomments = spider.get_song_comments(31838188, offset=4400) 211 | # with open('test_songcomments_total1.json', 'w') as f: 212 | # pprint(songcomments, f) 213 | 214 | # commentslist = spider.get_total_comments(31838188) 215 | # with open('test_commentslist.json', 'w') as f: 216 | # pprint(commentslist, f) 217 | 218 | # artist_id_list = spider.from_playlist_get_artist_id(605415618, 2051837289) 219 | # with open('test_artist_id_list.json', 'w') as f: 220 | # pprint(artist_id_list, f) 221 | 222 | lyriclist = spider.from_playlist_get_full_lyric_text(605415618,2051837289) 223 | with open('data/lyric_list.json', 'w') as f: 224 | json.dump(lyriclist, f) 225 | print('Done!') 226 | -------------------------------------------------------------------------------- /NEMCrawler/data/stop_words.txt: -------------------------------------------------------------------------------- 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 | 0 27 | 1 28 | 2 29 | 3 30 | 4 31 | 5 32 | 6 33 | 7 34 | 8 35 | 9 36 | : 37 | :// 38 | :: 39 | ; 40 | < 41 | = 42 | > 43 | >> 44 | ? 45 | @ 46 | A 47 | Lex 48 | [ 49 | \ 50 | ] 51 | ^ 52 | _ 53 | ` 54 | exp 55 | sub 56 | sup 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 | ②c 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 | 不亦乐乎 175 | 不仅 176 | 不仅...而且 177 | 不仅仅 178 | 不仅仅是 179 | 不会 180 | 不但 181 | 不但...而且 182 | 不光 183 | 不免 184 | 不再 185 | 不力 186 | 不单 187 | 不变 188 | 不只 189 | 不可 190 | 不可开交 191 | 不可抗拒 192 | 不同 193 | 不外 194 | 不外乎 195 | 不够 196 | 不大 197 | 不如 198 | 不妨 199 | 不定 200 | 不对 201 | 不少 202 | 不尽 203 | 不尽然 204 | 不巧 205 | 不已 206 | 不常 207 | 不得 208 | 不得不 209 | 不得了 210 | 不得已 211 | 不必 212 | 不怎么 213 | 不怕 214 | 不惟 215 | 不成 216 | 不拘 217 | 不择手段 218 | 不敢 219 | 不料 220 | 不断 221 | 不日 222 | 不时 223 | 不是 224 | 不曾 225 | 不止 226 | 不止一次 227 | 不比 228 | 不消 229 | 不满 230 | 不然 231 | 不然的话 232 | 不特 233 | 不独 234 | 不由得 235 | 不知不觉 236 | 不管 237 | 不管怎样 238 | 不经意 239 | 不胜 240 | 不能 241 | 不能不 242 | 不至于 243 | 不若 244 | 不要 245 | 不论 246 | 不起 247 | 不足 248 | 不过 249 | 不迭 250 | 不问 251 | 不限 252 | 与 253 | 与其 254 | 与其说 255 | 与否 256 | 与此同时 257 | 专门 258 | 且 259 | 且不说 260 | 且说 261 | 两者 262 | 严格 263 | 严重 264 | 个 265 | 个人 266 | 个别 267 | 中小 268 | 中间 269 | 丰富 270 | 串行 271 | 临 272 | 临到 273 | 为 274 | 为主 275 | 为了 276 | 为什么 277 | 为什麽 278 | 为何 279 | 为止 280 | 为此 281 | 为着 282 | 主张 283 | 主要 284 | 举凡 285 | 举行 286 | 乃 287 | 乃至 288 | 乃至于 289 | 么 290 | 之 291 | 之一 292 | 之前 293 | 之后 294 | 之後 295 | 之所以 296 | 之类 297 | 乌乎 298 | 乎 299 | 乒 300 | 乘 301 | 乘势 302 | 乘机 303 | 乘胜 304 | 乘虚 305 | 乘隙 306 | 九 307 | 也 308 | 也好 309 | 也就是说 310 | 也是 311 | 也罢 312 | 了 313 | 了解 314 | 争取 315 | 二 316 | 二来 317 | 二话不说 318 | 二话没说 319 | 于 320 | 于是 321 | 于是乎 322 | 云云 323 | 云尔 324 | 互 325 | 互相 326 | 五 327 | 些 328 | 交口 329 | 亦 330 | 产生 331 | 亲口 332 | 亲手 333 | 亲眼 334 | 亲自 335 | 亲身 336 | 人 337 | 人人 338 | 人们 339 | 人家 340 | 人民 341 | 什么 342 | 什么样 343 | 什麽 344 | 仅 345 | 仅仅 346 | 今 347 | 今后 348 | 今天 349 | 今年 350 | 今後 351 | 介于 352 | 仍 353 | 仍旧 354 | 仍然 355 | 从 356 | 从不 357 | 从严 358 | 从中 359 | 从事 360 | 从今以后 361 | 从优 362 | 从古到今 363 | 从古至今 364 | 从头 365 | 从宽 366 | 从小 367 | 从新 368 | 从无到有 369 | 从早到晚 370 | 从未 371 | 从来 372 | 从此 373 | 从此以后 374 | 从而 375 | 从轻 376 | 从速 377 | 从重 378 | 他 379 | 他人 380 | 他们 381 | 他是 382 | 他的 383 | 代替 384 | 以 385 | 以上 386 | 以下 387 | 以为 388 | 以便 389 | 以免 390 | 以前 391 | 以及 392 | 以后 393 | 以外 394 | 以後 395 | 以故 396 | 以期 397 | 以来 398 | 以至 399 | 以至于 400 | 以致 401 | 们 402 | 任 403 | 任何 404 | 任凭 405 | 任务 406 | 企图 407 | 伙同 408 | 会 409 | 伟大 410 | 传 411 | 传说 412 | 传闻 413 | 似乎 414 | 似的 415 | 但 416 | 但凡 417 | 但愿 418 | 但是 419 | 何 420 | 何乐而不为 421 | 何以 422 | 何况 423 | 何处 424 | 何妨 425 | 何尝 426 | 何必 427 | 何时 428 | 何止 429 | 何苦 430 | 何须 431 | 余外 432 | 作为 433 | 你 434 | 你们 435 | 你是 436 | 你的 437 | 使 438 | 使得 439 | 使用 440 | 例如 441 | 依 442 | 依据 443 | 依照 444 | 依靠 445 | 便 446 | 便于 447 | 促进 448 | 保持 449 | 保管 450 | 保险 451 | 俺 452 | 俺们 453 | 倍加 454 | 倍感 455 | 倒不如 456 | 倒不如说 457 | 倒是 458 | 倘 459 | 倘使 460 | 倘或 461 | 倘然 462 | 倘若 463 | 借 464 | 借以 465 | 借此 466 | 假使 467 | 假如 468 | 假若 469 | 偏偏 470 | 做到 471 | 偶尔 472 | 偶而 473 | 傥然 474 | 像 475 | 儿 476 | 允许 477 | 元/吨 478 | 充其极 479 | 充其量 480 | 充分 481 | 先不先 482 | 先后 483 | 先後 484 | 先生 485 | 光 486 | 光是 487 | 全体 488 | 全力 489 | 全年 490 | 全然 491 | 全身心 492 | 全部 493 | 全都 494 | 全面 495 | 八 496 | 八成 497 | 公然 498 | 六 499 | 兮 500 | 共 501 | 共同 502 | 共总 503 | 关于 504 | 其 505 | 其一 506 | 其中 507 | 其二 508 | 其他 509 | 其余 510 | 其后 511 | 其它 512 | 其实 513 | 其次 514 | 具体 515 | 具体地说 516 | 具体来说 517 | 具体说来 518 | 具有 519 | 兼之 520 | 内 521 | 再 522 | 再其次 523 | 再则 524 | 再有 525 | 再次 526 | 再者 527 | 再者说 528 | 再说 529 | 冒 530 | 冲 531 | 决不 532 | 决定 533 | 决非 534 | 况且 535 | 准备 536 | 凑巧 537 | 凝神 538 | 几 539 | 几乎 540 | 几度 541 | 几时 542 | 几番 543 | 几经 544 | 凡 545 | 凡是 546 | 凭 547 | 凭借 548 | 出 549 | 出于 550 | 出去 551 | 出来 552 | 出现 553 | 分别 554 | 分头 555 | 分期 556 | 分期分批 557 | 切 558 | 切不可 559 | 切切 560 | 切勿 561 | 切莫 562 | 则 563 | 则甚 564 | 刚 565 | 刚好 566 | 刚巧 567 | 刚才 568 | 初 569 | 别 570 | 别人 571 | 别处 572 | 别是 573 | 别的 574 | 别管 575 | 别说 576 | 到 577 | 到了儿 578 | 到处 579 | 到头 580 | 到头来 581 | 到底 582 | 到目前为止 583 | 前后 584 | 前此 585 | 前者 586 | 前进 587 | 前面 588 | 加上 589 | 加之 590 | 加以 591 | 加入 592 | 加强 593 | 动不动 594 | 动辄 595 | 勃然 596 | 匆匆 597 | 十分 598 | 千 599 | 千万 600 | 千万千万 601 | 半 602 | 单 603 | 单单 604 | 单纯 605 | 即 606 | 即令 607 | 即使 608 | 即便 609 | 即刻 610 | 即如 611 | 即将 612 | 即或 613 | 即是说 614 | 即若 615 | 却 616 | 却不 617 | 历 618 | 原来 619 | 去 620 | 又 621 | 又及 622 | 及 623 | 及其 624 | 及时 625 | 及至 626 | 双方 627 | 反之 628 | 反之亦然 629 | 反之则 630 | 反倒 631 | 反倒是 632 | 反应 633 | 反手 634 | 反映 635 | 反而 636 | 反过来 637 | 反过来说 638 | 取得 639 | 取道 640 | 受到 641 | 变成 642 | 古来 643 | 另 644 | 另一个 645 | 另一方面 646 | 另外 647 | 另悉 648 | 另方面 649 | 另行 650 | 只 651 | 只当 652 | 只怕 653 | 只是 654 | 只有 655 | 只消 656 | 只要 657 | 只限 658 | 叫 659 | 叫做 660 | 召开 661 | 叮咚 662 | 叮当 663 | 可 664 | 可以 665 | 可好 666 | 可是 667 | 可能 668 | 可见 669 | 各 670 | 各个 671 | 各人 672 | 各位 673 | 各地 674 | 各式 675 | 各种 676 | 各级 677 | 各自 678 | 合理 679 | 同 680 | 同一 681 | 同时 682 | 同样 683 | 后 684 | 后来 685 | 后者 686 | 后面 687 | 向 688 | 向使 689 | 向着 690 | 吓 691 | 吗 692 | 否则 693 | 吧 694 | 吧哒 695 | 吱 696 | 呀 697 | 呃 698 | 呆呆地 699 | 呐 700 | 呕 701 | 呗 702 | 呜 703 | 呜呼 704 | 呢 705 | 周围 706 | 呵 707 | 呵呵 708 | 呸 709 | 呼哧 710 | 呼啦 711 | 咋 712 | 和 713 | 咚 714 | 咦 715 | 咧 716 | 咱 717 | 咱们 718 | 咳 719 | 哇 720 | 哈 721 | 哈哈 722 | 哉 723 | 哎 724 | 哎呀 725 | 哎哟 726 | 哗 727 | 哗啦 728 | 哟 729 | 哦 730 | 哩 731 | 哪 732 | 哪个 733 | 哪些 734 | 哪儿 735 | 哪天 736 | 哪年 737 | 哪怕 738 | 哪样 739 | 哪边 740 | 哪里 741 | 哼 742 | 哼唷 743 | 唉 744 | 唯有 745 | 啊 746 | 啊呀 747 | 啊哈 748 | 啊哟 749 | 啐 750 | 啥 751 | 啦 752 | 啪达 753 | 啷当 754 | 喀 755 | 喂 756 | 喏 757 | 喔唷 758 | 喽 759 | 嗡 760 | 嗡嗡 761 | 嗬 762 | 嗯 763 | 嗳 764 | 嘎 765 | 嘎嘎 766 | 嘎登 767 | 嘘 768 | 嘛 769 | 嘻 770 | 嘿 771 | 嘿嘿 772 | 四 773 | 因 774 | 因为 775 | 因了 776 | 因此 777 | 因着 778 | 因而 779 | 固 780 | 固然 781 | 在 782 | 在下 783 | 在于 784 | 地 785 | 均 786 | 坚决 787 | 坚持 788 | 基于 789 | 基本 790 | 基本上 791 | 处在 792 | 处处 793 | 处理 794 | 复杂 795 | 多 796 | 多么 797 | 多亏 798 | 多多 799 | 多多少少 800 | 多多益善 801 | 多少 802 | 多年前 803 | 多年来 804 | 多数 805 | 多次 806 | 够瞧的 807 | 大 808 | 大不了 809 | 大举 810 | 大事 811 | 大体 812 | 大体上 813 | 大凡 814 | 大力 815 | 大多 816 | 大多数 817 | 大大 818 | 大家 819 | 大张旗鼓 820 | 大批 821 | 大抵 822 | 大概 823 | 大略 824 | 大约 825 | 大致 826 | 大都 827 | 大量 828 | 大面儿上 829 | 失去 830 | 奇 831 | 奈 832 | 奋勇 833 | 她 834 | 她们 835 | 她是 836 | 她的 837 | 好 838 | 好在 839 | 好的 840 | 好象 841 | 如 842 | 如上 843 | 如上所述 844 | 如下 845 | 如今 846 | 如何 847 | 如其 848 | 如前所述 849 | 如同 850 | 如常 851 | 如是 852 | 如期 853 | 如果 854 | 如次 855 | 如此 856 | 如此等等 857 | 如若 858 | 始而 859 | 姑且 860 | 存在 861 | 存心 862 | 孰料 863 | 孰知 864 | 宁 865 | 宁可 866 | 宁愿 867 | 宁肯 868 | 它 869 | 它们 870 | 它们的 871 | 它是 872 | 它的 873 | 安全 874 | 完全 875 | 完成 876 | 定 877 | 实现 878 | 实际 879 | 宣布 880 | 容易 881 | 密切 882 | 对 883 | 对于 884 | 对应 885 | 对待 886 | 对方 887 | 对比 888 | 将 889 | 将才 890 | 将要 891 | 将近 892 | 小 893 | 少数 894 | 尔 895 | 尔后 896 | 尔尔 897 | 尔等 898 | 尚且 899 | 尤其 900 | 就 901 | 就地 902 | 就是 903 | 就是了 904 | 就是说 905 | 就此 906 | 就算 907 | 就要 908 | 尽 909 | 尽可能 910 | 尽如人意 911 | 尽心尽力 912 | 尽心竭力 913 | 尽快 914 | 尽早 915 | 尽然 916 | 尽管 917 | 尽管如此 918 | 尽量 919 | 局外 920 | 居然 921 | 届时 922 | 属于 923 | 屡 924 | 屡屡 925 | 屡次 926 | 屡次三番 927 | 岂 928 | 岂但 929 | 岂止 930 | 岂非 931 | 川流不息 932 | 左右 933 | 巨大 934 | 巩固 935 | 差一点 936 | 差不多 937 | 己 938 | 已 939 | 已矣 940 | 已经 941 | 巴 942 | 巴巴 943 | 带 944 | 帮助 945 | 常 946 | 常常 947 | 常言说 948 | 常言说得好 949 | 常言道 950 | 平素 951 | 年复一年 952 | 并 953 | 并不 954 | 并不是 955 | 并且 956 | 并排 957 | 并无 958 | 并没 959 | 并没有 960 | 并肩 961 | 并非 962 | 广大 963 | 广泛 964 | 应当 965 | 应用 966 | 应该 967 | 庶乎 968 | 庶几 969 | 开外 970 | 开始 971 | 开展 972 | 引起 973 | 弗 974 | 弹指之间 975 | 强烈 976 | 强调 977 | 归 978 | 归根到底 979 | 归根结底 980 | 归齐 981 | 当 982 | 当下 983 | 当中 984 | 当儿 985 | 当前 986 | 当即 987 | 当口儿 988 | 当地 989 | 当场 990 | 当头 991 | 当庭 992 | 当时 993 | 当然 994 | 当真 995 | 当着 996 | 形成 997 | 彻夜 998 | 彻底 999 | 彼 1000 | 彼时 1001 | 彼此 1002 | 往 1003 | 往往 1004 | 待 1005 | 待到 1006 | 很 1007 | 很多 1008 | 很少 1009 | 後来 1010 | 後面 1011 | 得 1012 | 得了 1013 | 得出 1014 | 得到 1015 | 得天独厚 1016 | 得起 1017 | 心里 1018 | 必 1019 | 必定 1020 | 必将 1021 | 必然 1022 | 必要 1023 | 必须 1024 | 快 1025 | 快要 1026 | 忽地 1027 | 忽然 1028 | 怎 1029 | 怎么 1030 | 怎么办 1031 | 怎么样 1032 | 怎奈 1033 | 怎样 1034 | 怎麽 1035 | 怕 1036 | 急匆匆 1037 | 怪 1038 | 怪不得 1039 | 总之 1040 | 总是 1041 | 总的来看 1042 | 总的来说 1043 | 总的说来 1044 | 总结 1045 | 总而言之 1046 | 恍然 1047 | 恐怕 1048 | 恰似 1049 | 恰好 1050 | 恰如 1051 | 恰巧 1052 | 恰恰 1053 | 恰恰相反 1054 | 恰逢 1055 | 您 1056 | 您们 1057 | 您是 1058 | 惟其 1059 | 惯常 1060 | 意思 1061 | 愤然 1062 | 愿意 1063 | 慢说 1064 | 成为 1065 | 成年 1066 | 成年累月 1067 | 成心 1068 | 我 1069 | 我们 1070 | 我是 1071 | 我的 1072 | 或 1073 | 或则 1074 | 或多或少 1075 | 或是 1076 | 或曰 1077 | 或者 1078 | 或许 1079 | 战斗 1080 | 截然 1081 | 截至 1082 | 所 1083 | 所以 1084 | 所在 1085 | 所幸 1086 | 所有 1087 | 所谓 1088 | 才 1089 | 才能 1090 | 扑通 1091 | 打 1092 | 打从 1093 | 打开天窗说亮话 1094 | 扩大 1095 | 把 1096 | 抑或 1097 | 抽冷子 1098 | 拦腰 1099 | 拿 1100 | 按 1101 | 按时 1102 | 按期 1103 | 按照 1104 | 按理 1105 | 按说 1106 | 挨个 1107 | 挨家挨户 1108 | 挨次 1109 | 挨着 1110 | 挨门挨户 1111 | 挨门逐户 1112 | 换句话说 1113 | 换言之 1114 | 据 1115 | 据实 1116 | 据悉 1117 | 据我所知 1118 | 据此 1119 | 据称 1120 | 据说 1121 | 掌握 1122 | 接下来 1123 | 接着 1124 | 接著 1125 | 接连不断 1126 | 放量 1127 | 故 1128 | 故意 1129 | 故此 1130 | 故而 1131 | 敞开儿 1132 | 敢 1133 | 敢于 1134 | 敢情 1135 | 数/ 1136 | 整个 1137 | 断然 1138 | 方 1139 | 方便 1140 | 方才 1141 | 方能 1142 | 方面 1143 | 旁人 1144 | 无 1145 | 无宁 1146 | 无法 1147 | 无论 1148 | 既 1149 | 既...又 1150 | 既往 1151 | 既是 1152 | 既然 1153 | 日复一日 1154 | 日渐 1155 | 日益 1156 | 日臻 1157 | 日见 1158 | 时候 1159 | 昂然 1160 | 明显 1161 | 明确 1162 | 是 1163 | 是不是 1164 | 是以 1165 | 是否 1166 | 是的 1167 | 显然 1168 | 显著 1169 | 普通 1170 | 普遍 1171 | 暗中 1172 | 暗地里 1173 | 暗自 1174 | 更 1175 | 更为 1176 | 更加 1177 | 更进一步 1178 | 曾 1179 | 曾经 1180 | 替 1181 | 替代 1182 | 最 1183 | 最后 1184 | 最大 1185 | 最好 1186 | 最後 1187 | 最近 1188 | 最高 1189 | 有 1190 | 有些 1191 | 有关 1192 | 有利 1193 | 有力 1194 | 有及 1195 | 有所 1196 | 有效 1197 | 有时 1198 | 有点 1199 | 有的 1200 | 有的是 1201 | 有着 1202 | 有著 1203 | 望 1204 | 朝 1205 | 朝着 1206 | 末##末 1207 | 本 1208 | 本人 1209 | 本地 1210 | 本着 1211 | 本身 1212 | 权时 1213 | 来 1214 | 来不及 1215 | 来得及 1216 | 来看 1217 | 来着 1218 | 来自 1219 | 来讲 1220 | 来说 1221 | 极 1222 | 极为 1223 | 极了 1224 | 极其 1225 | 极力 1226 | 极大 1227 | 极度 1228 | 极端 1229 | 构成 1230 | 果然 1231 | 果真 1232 | 某 1233 | 某个 1234 | 某些 1235 | 某某 1236 | 根据 1237 | 根本 1238 | 格外 1239 | 梆 1240 | 概 1241 | 次第 1242 | 欢迎 1243 | 欤 1244 | 正值 1245 | 正在 1246 | 正如 1247 | 正巧 1248 | 正常 1249 | 正是 1250 | 此 1251 | 此中 1252 | 此后 1253 | 此地 1254 | 此处 1255 | 此外 1256 | 此时 1257 | 此次 1258 | 此间 1259 | 殆 1260 | 毋宁 1261 | 每 1262 | 每个 1263 | 每天 1264 | 每年 1265 | 每当 1266 | 每时每刻 1267 | 每每 1268 | 每逢 1269 | 比 1270 | 比及 1271 | 比如 1272 | 比如说 1273 | 比方 1274 | 比照 1275 | 比起 1276 | 比较 1277 | 毕竟 1278 | 毫不 1279 | 毫无 1280 | 毫无例外 1281 | 毫无保留地 1282 | 汝 1283 | 沙沙 1284 | 没 1285 | 没奈何 1286 | 没有 1287 | 沿 1288 | 沿着 1289 | 注意 1290 | 活 1291 | 深入 1292 | 清楚 1293 | 满 1294 | 满足 1295 | 漫说 1296 | 焉 1297 | 然 1298 | 然则 1299 | 然后 1300 | 然後 1301 | 然而 1302 | 照 1303 | 照着 1304 | 牢牢 1305 | 特别是 1306 | 特殊 1307 | 特点 1308 | 犹且 1309 | 犹自 1310 | 独 1311 | 独自 1312 | 猛然 1313 | 猛然间 1314 | 率尔 1315 | 率然 1316 | 现代 1317 | 现在 1318 | 理应 1319 | 理当 1320 | 理该 1321 | 瑟瑟 1322 | 甚且 1323 | 甚么 1324 | 甚或 1325 | 甚而 1326 | 甚至 1327 | 甚至于 1328 | 用 1329 | 用来 1330 | 甫 1331 | 甭 1332 | 由 1333 | 由于 1334 | 由是 1335 | 由此 1336 | 由此可见 1337 | 略 1338 | 略为 1339 | 略加 1340 | 略微 1341 | 白 1342 | 白白 1343 | 的 1344 | 的确 1345 | 的话 1346 | 皆可 1347 | 目前 1348 | 直到 1349 | 直接 1350 | 相似 1351 | 相信 1352 | 相反 1353 | 相同 1354 | 相对 1355 | 相对而言 1356 | 相应 1357 | 相当 1358 | 相等 1359 | 省得 1360 | 看 1361 | 看上去 1362 | 看出 1363 | 看到 1364 | 看来 1365 | 看样子 1366 | 看看 1367 | 看见 1368 | 看起来 1369 | 真是 1370 | 真正 1371 | 眨眼 1372 | 着 1373 | 着呢 1374 | 矣 1375 | 矣乎 1376 | 矣哉 1377 | 知道 1378 | 砰 1379 | 确定 1380 | 碰巧 1381 | 社会主义 1382 | 离 1383 | 种 1384 | 积极 1385 | 移动 1386 | 究竟 1387 | 穷年累月 1388 | 突出 1389 | 突然 1390 | 窃 1391 | 立 1392 | 立刻 1393 | 立即 1394 | 立地 1395 | 立时 1396 | 立马 1397 | 竟 1398 | 竟然 1399 | 竟而 1400 | 第 1401 | 第二 1402 | 等 1403 | 等到 1404 | 等等 1405 | 策略地 1406 | 简直 1407 | 简而言之 1408 | 简言之 1409 | 管 1410 | 类如 1411 | 粗 1412 | 精光 1413 | 紧接着 1414 | 累年 1415 | 累次 1416 | 纯 1417 | 纯粹 1418 | 纵 1419 | 纵令 1420 | 纵使 1421 | 纵然 1422 | 练习 1423 | 组成 1424 | 经 1425 | 经常 1426 | 经过 1427 | 结合 1428 | 结果 1429 | 给 1430 | 绝 1431 | 绝不 1432 | 绝对 1433 | 绝非 1434 | 绝顶 1435 | 继之 1436 | 继后 1437 | 继续 1438 | 继而 1439 | 维持 1440 | 综上所述 1441 | 缕缕 1442 | 罢了 1443 | 老 1444 | 老大 1445 | 老是 1446 | 老老实实 1447 | 考虑 1448 | 者 1449 | 而 1450 | 而且 1451 | 而况 1452 | 而又 1453 | 而后 1454 | 而外 1455 | 而已 1456 | 而是 1457 | 而言 1458 | 而论 1459 | 联系 1460 | 联袂 1461 | 背地里 1462 | 背靠背 1463 | 能 1464 | 能否 1465 | 能够 1466 | 腾 1467 | 自 1468 | 自个儿 1469 | 自从 1470 | 自各儿 1471 | 自后 1472 | 自家 1473 | 自己 1474 | 自打 1475 | 自身 1476 | 臭 1477 | 至 1478 | 至于 1479 | 至今 1480 | 至若 1481 | 致 1482 | 般的 1483 | 良好 1484 | 若 1485 | 若夫 1486 | 若是 1487 | 若果 1488 | 若非 1489 | 范围 1490 | 莫 1491 | 莫不 1492 | 莫不然 1493 | 莫如 1494 | 莫若 1495 | 莫非 1496 | 获得 1497 | 藉以 1498 | 虽 1499 | 虽则 1500 | 虽然 1501 | 虽说 1502 | 蛮 1503 | 行为 1504 | 行动 1505 | 表明 1506 | 表示 1507 | 被 1508 | 要 1509 | 要不 1510 | 要不是 1511 | 要不然 1512 | 要么 1513 | 要是 1514 | 要求 1515 | 见 1516 | 规定 1517 | 觉得 1518 | 譬喻 1519 | 譬如 1520 | 认为 1521 | 认真 1522 | 认识 1523 | 让 1524 | 许多 1525 | 论 1526 | 论说 1527 | 设使 1528 | 设或 1529 | 设若 1530 | 诚如 1531 | 诚然 1532 | 话说 1533 | 该 1534 | 该当 1535 | 说明 1536 | 说来 1537 | 说说 1538 | 请勿 1539 | 诸 1540 | 诸位 1541 | 诸如 1542 | 谁 1543 | 谁人 1544 | 谁料 1545 | 谁知 1546 | 谨 1547 | 豁然 1548 | 贼死 1549 | 赖以 1550 | 赶 1551 | 赶快 1552 | 赶早不赶晚 1553 | 起 1554 | 起先 1555 | 起初 1556 | 起头 1557 | 起来 1558 | 起见 1559 | 起首 1560 | 趁 1561 | 趁便 1562 | 趁势 1563 | 趁早 1564 | 趁机 1565 | 趁热 1566 | 趁着 1567 | 越是 1568 | 距 1569 | 跟 1570 | 路经 1571 | 转动 1572 | 转变 1573 | 转贴 1574 | 轰然 1575 | 较 1576 | 较为 1577 | 较之 1578 | 较比 1579 | 边 1580 | 达到 1581 | 达旦 1582 | 迄 1583 | 迅速 1584 | 过 1585 | 过于 1586 | 过去 1587 | 过来 1588 | 运用 1589 | 近 1590 | 近几年来 1591 | 近年来 1592 | 近来 1593 | 还 1594 | 还是 1595 | 还有 1596 | 还要 1597 | 这 1598 | 这一来 1599 | 这个 1600 | 这么 1601 | 这么些 1602 | 这么样 1603 | 这么点儿 1604 | 这些 1605 | 这会儿 1606 | 这儿 1607 | 这就是说 1608 | 这时 1609 | 这样 1610 | 这次 1611 | 这点 1612 | 这种 1613 | 这般 1614 | 这边 1615 | 这里 1616 | 这麽 1617 | 进入 1618 | 进去 1619 | 进来 1620 | 进步 1621 | 进而 1622 | 进行 1623 | 连 1624 | 连同 1625 | 连声 1626 | 连日 1627 | 连日来 1628 | 连袂 1629 | 连连 1630 | 迟早 1631 | 迫于 1632 | 适应 1633 | 适当 1634 | 适用 1635 | 逐步 1636 | 逐渐 1637 | 通常 1638 | 通过 1639 | 造成 1640 | 逢 1641 | 遇到 1642 | 遭到 1643 | 遵循 1644 | 遵照 1645 | 避免 1646 | 那 1647 | 那个 1648 | 那么 1649 | 那么些 1650 | 那么样 1651 | 那些 1652 | 那会儿 1653 | 那儿 1654 | 那时 1655 | 那末 1656 | 那样 1657 | 那般 1658 | 那边 1659 | 那里 1660 | 那麽 1661 | 部分 1662 | 都 1663 | 鄙人 1664 | 采取 1665 | 里面 1666 | 重大 1667 | 重新 1668 | 重要 1669 | 鉴于 1670 | 针对 1671 | 长期以来 1672 | 长此下去 1673 | 长线 1674 | 长话短说 1675 | 问题 1676 | 间或 1677 | 防止 1678 | 阿 1679 | 附近 1680 | 陈年 1681 | 限制 1682 | 陡然 1683 | 除 1684 | 除了 1685 | 除却 1686 | 除去 1687 | 除外 1688 | 除开 1689 | 除此 1690 | 除此之外 1691 | 除此以外 1692 | 除此而外 1693 | 除非 1694 | 随 1695 | 随后 1696 | 随时 1697 | 随着 1698 | 随著 1699 | 隔夜 1700 | 隔日 1701 | 难得 1702 | 难怪 1703 | 难说 1704 | 难道 1705 | 难道说 1706 | 集中 1707 | 零 1708 | 需要 1709 | 非但 1710 | 非常 1711 | 非徒 1712 | 非得 1713 | 非特 1714 | 非独 1715 | 靠 1716 | 顶多 1717 | 顷 1718 | 顷刻 1719 | 顷刻之间 1720 | 顷刻间 1721 | 顺 1722 | 顺着 1723 | 顿时 1724 | 颇 1725 | 风雨无阻 1726 | 饱 1727 | 首先 1728 | 马上 1729 | 高低 1730 | 高兴 1731 | 默然 1732 | 默默地 1733 | 齐 1734 | ︿ 1735 | ! 1736 | # 1737 | $ 1738 | % 1739 | & 1740 | ' 1741 | ( 1742 | ) 1743 | )÷(1- 1744 | )、 1745 | * 1746 | + 1747 | +ξ 1748 | ++ 1749 | , 1750 | ,也 1751 | - 1752 | -β 1753 | -- 1754 | -[*]- 1755 | . 1756 | / 1757 | 0 1758 | 0:2 1759 | 1 1760 | 1. 1761 | 12% 1762 | 2 1763 | 2.3% 1764 | 3 1765 | 4 1766 | 5 1767 | 5:0 1768 | 6 1769 | 7 1770 | 8 1771 | 9 1772 | : 1773 | ; 1774 | < 1775 | <± 1776 | <Δ 1777 | <λ 1778 | <φ 1779 | << 1780 | = 1781 | =″ 1782 | =☆ 1783 | =( 1784 | =- 1785 | =[ 1786 | ={ 1787 | > 1788 | >λ 1789 | ? 1790 | @ 1791 | A 1792 | LI 1793 | R.L. 1794 | ZXFITL 1795 | [ 1796 | [①①] 1797 | [①②] 1798 | [①③] 1799 | [①④] 1800 | [①⑤] 1801 | [①⑥] 1802 | [①⑦] 1803 | [①⑧] 1804 | [①⑨] 1805 | [①A] 1806 | [①B] 1807 | [①C] 1808 | [①D] 1809 | [①E] 1810 | [①] 1811 | [①a] 1812 | [①c] 1813 | [①d] 1814 | [①e] 1815 | [①f] 1816 | [①g] 1817 | [①h] 1818 | [①i] 1819 | [①o] 1820 | [② 1821 | [②①] 1822 | [②②] 1823 | [②③] 1824 | [②④ 1825 | [②⑤] 1826 | [②⑥] 1827 | [②⑦] 1828 | [②⑧] 1829 | [②⑩] 1830 | [②B] 1831 | [②G] 1832 | [②] 1833 | [②a] 1834 | [②b] 1835 | [②c] 1836 | [②d] 1837 | [②e] 1838 | [②f] 1839 | [②g] 1840 | [②h] 1841 | [②i] 1842 | [②j] 1843 | [③①] 1844 | [③⑩] 1845 | [③F] 1846 | [③] 1847 | [③a] 1848 | [③b] 1849 | [③c] 1850 | [③d] 1851 | [③e] 1852 | [③g] 1853 | [③h] 1854 | [④] 1855 | [④a] 1856 | [④b] 1857 | [④c] 1858 | [④d] 1859 | [④e] 1860 | [⑤] 1861 | [⑤]] 1862 | [⑤a] 1863 | [⑤b] 1864 | [⑤d] 1865 | [⑤e] 1866 | [⑤f] 1867 | [⑥] 1868 | [⑦] 1869 | [⑧] 1870 | [⑨] 1871 | [⑩] 1872 | [*] 1873 | [- 1874 | [] 1875 | ] 1876 | ]∧′=[ 1877 | ][ 1878 | _ 1879 | a] 1880 | b] 1881 | c] 1882 | e] 1883 | f] 1884 | ng昉 1885 | { 1886 | {- 1887 | | 1888 | } 1889 | }> 1890 | ~ 1891 | ~± 1892 | ~+ 1893 | ¥ 1894 | -------------------------------------------------------------------------------- /NEMCrawler/text_mining.py: -------------------------------------------------------------------------------- 1 | import json 2 | import jieba 3 | import re 4 | from collections import Counter 5 | from pyecharts.charts import Bar, Pie 6 | import pyecharts.options as opts 7 | from pprint import pprint 8 | 9 | 10 | # 格式化文本,去除无关信息 11 | def format_content(content): 12 | content = content.replace(u'\xa0', u' ') 13 | content = re.sub(r'\[.*?\]','',content) 14 | content = re.sub(r'\s*作曲.*\n','',content) 15 | content = re.sub(r'\s*作词.*\n','',content) 16 | content = re.sub(r'.*:','',content) 17 | content = re.sub(r'.*:','',content) 18 | content = content.replace('\n', ' ') 19 | return content 20 | 21 | 22 | # 分词 23 | def word_segmentation(content, stop_words): 24 | 25 | # 使用 jieba 分词对文本进行分词处理 26 | jieba.enable_parallel() 27 | seg_list = jieba.cut(content, cut_all=False) 28 | 29 | seg_list = list(seg_list) 30 | 31 | # 去除停用词 32 | word_list = [] 33 | for word in seg_list: 34 | if word not in stop_words: 35 | word_list.append(word) 36 | 37 | # 过滤遗漏词、空格 38 | user_dict = [' ', '哒'] 39 | filter_space = lambda w: w not in user_dict 40 | word_list = list(filter(filter_space, word_list)) 41 | 42 | return word_list 43 | 44 | # 词频统计 45 | # 返回前 top_N 个值,如果不指定则返回所有值 46 | def word_frequency(word_list, *top_N): 47 | if top_N: 48 | counter = Counter(word_list).most_common(top_N[0]) 49 | else: 50 | counter = Counter(word_list).most_common() 51 | 52 | return counter 53 | 54 | 55 | def plot_chart(counter, chart_type='Bar'): 56 | 57 | items = [item[0] for item in counter] 58 | values = [item[1] for item in counter] 59 | 60 | if chart_type == 'Bar': 61 | # chart = Bar('词频统计') 62 | # chart.add('词频', items, values, is_more_utils=True) 63 | chart = ( 64 | Bar() 65 | .add_xaxis(items) 66 | .add_yaxis('词频', values) 67 | .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 68 | .set_global_opts(title_opts=opts.TitleOpts(title='词频统计')) 69 | ) 70 | else: 71 | # chart = Pie('词频统计') 72 | # chart.add('词频', items, values, is_label_show=True, is_more_utils=True) 73 | chart = ( 74 | Pie() 75 | .add_xaxis(items) 76 | .add_yaxis('词频', values) 77 | .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) 78 | .set_global_opts(title_opts=opts.TitleOpts(title='词频统计')) 79 | ) 80 | 81 | chart.render() 82 | 83 | 84 | 85 | def main(): 86 | with open('data/lyric_list.json') as f: 87 | data = json.load(f) 88 | 89 | # 停用词表来自: 90 | # https://github.com/XuJin1992/ChineseTextClassifier 91 | with open('data/stop_words.txt') as f: 92 | stop_words = f.read().split('\n') 93 | 94 | # 此处仅选择一首歌 95 | lyric = data[1] 96 | lyric = format_content(lyric) 97 | 98 | seg_list = word_segmentation(lyric, stop_words) 99 | 100 | counter = word_frequency(seg_list, 10) 101 | 102 | # plot_chart(counter, 'Pie') 103 | plot_chart(counter) 104 | 105 | # pprint(counter) 106 | # pprint(type(stop_words)) 107 | 108 | 109 | if __name__ == '__main__': 110 | main() -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **新版即将到来。。。** 2 | 3 | ![](https://i.loli.net/2018/01/23/5a672e59bbfab.png) 4 | 5 | ![](https://i.loli.net/2018/01/23/5a672e63457b7.png) 6 | 7 | ## Introduction 8 | 9 | 看见有人写了一篇[我用Python分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么](https://ask.hellobi.com/blog/spuerwdk/6336),觉得挺好玩的,于是就想自己也实现一下。于是本作品就诞生了。 10 | 11 | ## 爬虫 12 | 13 | 爬虫部分主要是调用已有的 API。这部分的工作可以参考[NetEase-MusicBox](https://github.com/darknessomi/musicbox),该作品作者实现了网易云音乐的命令行版,我用了一下还不错。主要参考了该作者的[api.py](https://github.com/darknessomi/musicbox/blob/master/NEMbox/api.py)部分。 14 | 15 | ![Screenshot3.png](https://i.loli.net/2017/12/28/5a44fdcfc0ba9.png) 16 | 17 | ## 文件处理 18 | 19 | 该部分主要的工作是将所有歌词写入一个文件,同时每个作者的所有歌词也放入一个文件,以备后面的分析之用。 20 | 21 | ![Screenshot4.png](https://i.loli.net/2017/12/28/5a44fdcfdffae.png) 22 | 23 | 本次获取的歌词大概 26000 行。 24 | 25 | ## 文本分析 26 | 27 | 分词用的是[“结巴”中文分词](https://github.com/fxsjy/jieba)。 28 | 29 | 我首先选取了一位歌手作为代表分析了一下词频,如下所示: 30 | 31 | ![shisanfigure_2.png](https://i.loli.net/2017/12/28/5a44fdcf52893.png) 32 | 33 | ![figure_bar01.png](https://i.loli.net/2017/12/28/5a44fdcf44e0e.png) 34 | 35 | ![figure_pie01.png](https://i.loli.net/2017/12/28/5a44fdcf85627.png) 36 | 37 | 做了一个词云: 38 | 39 | ![shisanfigure_1.png](https://i.loli.net/2017/12/28/5a44fdcf7d383.png) 40 | 41 | 然后。把所有的歌词都分析了一下,得到了如下饼状图: 42 | 43 | ![fm3.png](https://i.loli.net/2017/12/28/5a44fdcf7efac.png) 44 | 45 | 还做了一个词云,如下所示: 46 | 47 | ![fm0.png](https://i.loli.net/2017/12/28/5a44fdcf7cca2.png) 48 | 49 | ## 接下来的工作 50 | 51 | - 情绪分析 52 | - 云音乐的评论很精彩,可以做一下评论,看看有什么发现 53 | 54 | ## 如何使用 55 | 56 | ``` 57 | git clone https://github.com/GreatV/CloudMusic-Crawler.git 58 | 59 | cd CloudMusic-Crawler 60 | 61 | python3 -m venv venv 62 | 63 | source venv/bin/activate 64 | 65 | pip install -r requirements.txt 66 | 67 | cd NEMCrawler 68 | 69 | python NEM_spider.py 70 | 71 | python text_mining.py 72 | 73 | firefox render.html 74 | ``` 75 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | jieba==0.39 2 | pyecharts==1.2.0 3 | requests==2.22.0 4 | --------------------------------------------------------------------------------