├── CNN-LSTM ├── data │ ├── stopwords.txt │ └── test_data.txt ├── log │ └── file.md ├── main.py └── model │ └── file.md ├── README.md └── TextCNN ├── dataset ├── data │ └── file.md └── stopwords.txt ├── main.py ├── results ├── ConfusionMatrix.png ├── acc.png └── loss.png ├── saved_dict └── file.md └── utils.py /CNN-LSTM/data/stopwords.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 | able 26 | about 27 | above 28 | according 29 | accordingly 30 | across 31 | actually 32 | after 33 | afterwards 34 | again 35 | against 36 | ain't 37 | all 38 | allow 39 | allows 40 | almost 41 | alone 42 | along 43 | already 44 | also 45 | although 46 | always 47 | am 48 | among 49 | amongst 50 | an 51 | and 52 | another 53 | any 54 | anybody 55 | anyhow 56 | anyone 57 | anything 58 | anyway 59 | anyways 60 | anywhere 61 | apart 62 | appear 63 | appreciate 64 | appropriate 65 | are 66 | aren't 67 | around 68 | as 69 | a's 70 | aside 71 | ask 72 | asking 73 | associated 74 | at 75 | available 76 | away 77 | awfully 78 | be 79 | became 80 | because 81 | become 82 | becomes 83 | becoming 84 | been 85 | before 86 | beforehand 87 | behind 88 | being 89 | believe 90 | below 91 | beside 92 | besides 93 | best 94 | better 95 | between 96 | beyond 97 | both 98 | brief 99 | but 100 | by 101 | came 102 | can 103 | cannot 104 | cant 105 | can't 106 | cause 107 | causes 108 | certain 109 | certainly 110 | changes 111 | clearly 112 | c'mon 113 | co 114 | com 115 | come 116 | comes 117 | concerning 118 | consequently 119 | consider 120 | considering 121 | contain 122 | containing 123 | contains 124 | corresponding 125 | could 126 | couldn't 127 | course 128 | c's 129 | currently 130 | definitely 131 | described 132 | despite 133 | did 134 | didn't 135 | different 136 | do 137 | does 138 | doesn't 139 | doing 140 | done 141 | don't 142 | down 143 | downwards 144 | during 145 | each 146 | edu 147 | eg 148 | eight 149 | either 150 | else 151 | elsewhere 152 | enough 153 | entirely 154 | especially 155 | et 156 | etc 157 | even 158 | ever 159 | every 160 | everybody 161 | everyone 162 | everything 163 | everywhere 164 | ex 165 | exactly 166 | example 167 | except 168 | far 169 | few 170 | fifth 171 | first 172 | five 173 | followed 174 | following 175 | follows 176 | for 177 | former 178 | formerly 179 | forth 180 | four 181 | from 182 | further 183 | furthermore 184 | get 185 | gets 186 | getting 187 | given 188 | gives 189 | go 190 | goes 191 | going 192 | gone 193 | got 194 | gotten 195 | greetings 196 | had 197 | hadn't 198 | happens 199 | hardly 200 | has 201 | hasn't 202 | have 203 | haven't 204 | having 205 | he 206 | hello 207 | help 208 | hence 209 | her 210 | here 211 | hereafter 212 | hereby 213 | herein 214 | here's 215 | hereupon 216 | hers 217 | herself 218 | he's 219 | hi 220 | him 221 | himself 222 | his 223 | hither 224 | hopefully 225 | how 226 | howbeit 227 | however 228 | i'd 229 | ie 230 | if 231 | ignored 232 | i'll 233 | i'm 234 | immediate 235 | in 236 | inasmuch 237 | inc 238 | indeed 239 | indicate 240 | indicated 241 | indicates 242 | inner 243 | insofar 244 | instead 245 | into 246 | inward 247 | is 248 | isn't 249 | it 250 | it'd 251 | it'll 252 | its 253 | it's 254 | itself 255 | i've 256 | just 257 | keep 258 | keeps 259 | kept 260 | know 261 | known 262 | knows 263 | last 264 | lately 265 | later 266 | latter 267 | latterly 268 | least 269 | less 270 | lest 271 | let 272 | let's 273 | like 274 | liked 275 | likely 276 | little 277 | look 278 | looking 279 | looks 280 | ltd 281 | mainly 282 | many 283 | may 284 | maybe 285 | me 286 | mean 287 | meanwhile 288 | merely 289 | might 290 | more 291 | moreover 292 | most 293 | mostly 294 | much 295 | must 296 | my 297 | myself 298 | name 299 | namely 300 | nd 301 | near 302 | nearly 303 | necessary 304 | need 305 | needs 306 | neither 307 | never 308 | nevertheless 309 | new 310 | next 311 | nine 312 | no 313 | nobody 314 | non 315 | none 316 | noone 317 | nor 318 | normally 319 | not 320 | nothing 321 | novel 322 | now 323 | nowhere 324 | obviously 325 | of 326 | off 327 | often 328 | oh 329 | ok 330 | okay 331 | old 332 | on 333 | once 334 | one 335 | ones 336 | only 337 | onto 338 | or 339 | other 340 | others 341 | otherwise 342 | ought 343 | our 344 | ours 345 | ourselves 346 | out 347 | outside 348 | over 349 | overall 350 | own 351 | particular 352 | particularly 353 | per 354 | perhaps 355 | placed 356 | please 357 | plus 358 | possible 359 | presumably 360 | probably 361 | provides 362 | que 363 | quite 364 | qv 365 | rather 366 | rd 367 | re 368 | really 369 | reasonably 370 | regarding 371 | regardless 372 | regards 373 | relatively 374 | respectively 375 | right 376 | said 377 | same 378 | saw 379 | say 380 | saying 381 | says 382 | second 383 | secondly 384 | see 385 | seeing 386 | seem 387 | seemed 388 | seeming 389 | seems 390 | seen 391 | self 392 | selves 393 | sensible 394 | sent 395 | serious 396 | seriously 397 | seven 398 | several 399 | shall 400 | she 401 | should 402 | shouldn't 403 | since 404 | six 405 | so 406 | some 407 | somebody 408 | somehow 409 | someone 410 | something 411 | sometime 412 | sometimes 413 | somewhat 414 | somewhere 415 | soon 416 | sorry 417 | specified 418 | specify 419 | specifying 420 | still 421 | sub 422 | such 423 | sup 424 | sure 425 | take 426 | taken 427 | tell 428 | tends 429 | th 430 | than 431 | thank 432 | thanks 433 | thanx 434 | that 435 | thats 436 | that's 437 | the 438 | their 439 | theirs 440 | them 441 | themselves 442 | then 443 | thence 444 | there 445 | thereafter 446 | thereby 447 | therefore 448 | therein 449 | theres 450 | there's 451 | thereupon 452 | these 453 | they 454 | they'd 455 | they'll 456 | they're 457 | they've 458 | think 459 | third 460 | this 461 | thorough 462 | thoroughly 463 | those 464 | though 465 | three 466 | through 467 | throughout 468 | thru 469 | thus 470 | to 471 | together 472 | too 473 | took 474 | toward 475 | towards 476 | tried 477 | tries 478 | truly 479 | try 480 | trying 481 | t's 482 | twice 483 | two 484 | un 485 | under 486 | unfortunately 487 | unless 488 | unlikely 489 | until 490 | unto 491 | up 492 | upon 493 | us 494 | use 495 | used 496 | useful 497 | uses 498 | using 499 | usually 500 | value 501 | various 502 | very 503 | via 504 | viz 505 | vs 506 | want 507 | wants 508 | was 509 | wasn't 510 | way 511 | we 512 | we'd 513 | welcome 514 | well 515 | we'll 516 | went 517 | were 518 | we're 519 | weren't 520 | we've 521 | what 522 | whatever 523 | what's 524 | when 525 | whence 526 | whenever 527 | where 528 | whereafter 529 | whereas 530 | whereby 531 | wherein 532 | where's 533 | whereupon 534 | wherever 535 | whether 536 | which 537 | while 538 | whither 539 | who 540 | whoever 541 | whole 542 | whom 543 | who's 544 | whose 545 | why 546 | will 547 | willing 548 | wish 549 | with 550 | within 551 | without 552 | wonder 553 | won't 554 | would 555 | wouldn't 556 | yes 557 | yet 558 | you 559 | you'd 560 | you'll 561 | your 562 | you're 563 | yours 564 | yourself 565 | yourselves 566 | you've 567 | zero 568 | zt 569 | ZT 570 | zz 571 | ZZ 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 | -------------------------------------------------------------------------------- /CNN-LSTM/data/test_data.txt: -------------------------------------------------------------------------------- 1 | 6寸全面屏手机哪款好? 2 | 预算2500元配什么电脑好? 3 | 火炮遇上坦克怎么办?消灭它! 4 | 俄罗斯为何誓死保护叙利亚?背后阴谋被揭开,利益比你想象的还大 5 | 完美还原魏蜀吴战局《汉王纷争》洛阳决战记 6 | 俄罗斯名画家组团开启“画敦煌”传承丝路友谊 7 | 上联 : 冬去残妆随雪化,怎么对下联? 8 | 白敬亭!你这芳心纵火犯、少女心打火机! 9 | 20年硬汉功夫明星,吴京张晋都火了,这次让他火一把! 10 | 5.7翁美玲诞辰日,忆阿翁(2018) 11 | 哪个女明星穿婚纱好看? 12 | 大s怀胎三次均是未满三月曝光 一次为救妹妹小s 13 | 安以轩现身北京机场,一双红鞋吸引 全场的镜头 14 | 保剑锋3岁儿子近照,长相惹争议,网友:何珈好基因太强大 15 | 贵州|贵阳花溪大学城篮球协会交流赛圆满落幕 16 | 想吃整颗“苹果”巴菲特:没勇气用iPhone X 17 | 已经过了学习语言的黄金时期,还能学好英语吗? 18 | 「获奖喜报」厉害了,创新初中贲之泉老师优质课比赛一等奖 19 | 杭州民办初中自主招生 首次增设现学现做环节 20 | 双师课堂解决了什么? 21 | 印度真的很落后吗?真实的印度是什么样的? 22 | 美国打伊拉克为什么没有拿走一滴石油呢? 23 | 土壤肥力越喂越瘦,化肥农药对土壤的危害不敢直视! 24 | 王者荣耀玩家炫耀账号ID,网友跟风一起晒,看到后面笑喷了! 25 | 上联。山西山东太行山。下联? 26 | 上联:泰山黄山赵本山,如何对下联? 27 | 王子文晒聊天记录,半夜要助理陪她睡觉,工作室辟谣助理是女的 28 | 昆凌和别人穿情侣装,周杰伦评论衣服怪怪的,醋意十足 29 | 郭麒麟是通过什么方式变成现在这么帅气的? 30 | 闫云达宣布退社,接二连三有人出走,你怎么看? 31 | 网传朱婷下赛季将回国落户天津参加排超联赛,与李莹盈双剑合璧,对此你期待吗? 32 | 突发!2亿被银行“强行划走”10亿短融马上到期!450亿盾安危机关键时刻到了 33 | 如何在 imToken 上轻松获取 Dai 34 | 欧元有大麻烦了!重要国家意大利再次群龙无首,跌出新低! 35 | 农险业务屡屡违规 人保财险收6张监管处罚书 36 | 泛微OA办公系统成功签约广西农垦房地产开发有限公司 37 | 新车买来时规定添加92#汽油,那加95#汽油有什么影响? 38 | 注重乘坐空间配置超前,WEY VV6不仅中看更中用 39 | 三冲高端的奇瑞看其logo演化 40 | 充满盛夏的味道,5月上市新车荟萃 41 | 起亚正在销售的普通混合动力车型几乎完全一样,扭矩以及内饰 42 | MG6手动顶配能换斑马系统吗? 43 | 大空间自主SUV强烈推荐 外观时尚大气 配置丰富空间灵活 价格实在 44 | 江苏省五年制专转本考生提醒:成功=艰苦劳动+正确方法+少说空话 45 | 阜南田集镇杨老小学,东岳小学,任庙小学组织三校联考活动 46 | 我儿子被河北工业大学录取了,请问这所学校怎么样? 47 | 美军如何断定1944年日本已军力枯竭? 48 | 为了保护海洋环境,这个国家竟然决定搬运海底珊瑚?! 49 | 盘点柳州最值得去的汽车营地(一)——柳城红马山景区自驾车营地 50 | 旅居丨确认过眼神,这就是我想去的临安…… 51 | 回龙圩发放惠农补贴“明白条”晒出“明白账” 52 | 永年农产品批发市场行情分析2018年4.30日-5.6日 53 | HyperX电竞学院登陆同济大学,顶级电竞外设等你体验 54 | 讲道理,为什么战舰世界不加入电竞圈? 55 | 天津的一座老厂房里,竟上演着现场版的四大发明?带上娃去看看喽~ 56 | 你心目中的伟人是谁? 57 | 你有看过三遍以上的电视剧吗? 58 | 有戏!FF91抵达中国,股价缩水39倍的乐视“翻身在即”? 59 | 郑州开建2.5万套青年人才公寓,项目地址曝光,这些人可申请入住 60 | 这款自主车投诉的很多,可是买车的也很多,难道是因为9万起售价 61 | 最近想入手辆摩托车,什么牌子比较好? 62 | 保时捷帕拉梅拉遥控打不开车门,简单修复节省一大笔钱 63 | 看你们还敢不敢滥用远光灯?电子眼抓拍一次罚100扣1分 64 | 媒体老炮试驾宝马440i玩把轰鸣与激情 带你重返18岁! 65 | 数学启蒙千万不要忘记空间思维,这7个训练方法一定收藏! 66 | 这些一旦错过,就要等明年了 67 | 海南黄花梨的鬼脸纹是如何形成的? 68 | KIO发布关于呼请各界向克钦邦被困难民提供援助的声明 69 | 夏威夷火山突破口9个岩浆喷射达23层楼高 70 | 穿越火线:这把枪比AN94精度还要高,现如今见不到玩家用了 71 | 堡垒之夜:PVE每日任务:摧毁任务地点大全 72 | 定了 73 | 中国女性爱旗袍 旗袍文化节上展风采 74 | 对联:心花,烟花,昙花一现? 75 | 《极限挑战》第四季是不打算请嘉宾了吗?为了加强素人参与感! 76 | 谢娜产后复出,接纳新人,一段话观众感动落泪 77 | 中国广播策划第一人——曹恩敷 78 | 乡村教师江一燕现身捞金,难道跟学生上课也穿这样吗? 79 | 陈冠希花式晒女儿露小心机,网友看到这照片忍不住笑了,这很冠希 80 | 邓莎儿子的大名被曝光,再添一个线索引发网友猜测邓莎的老公是谁 81 | 刘国梁虽没当中国乒乓球总教练,但依然关注中国乒乓球并隔空指导,你怎么看? 82 | 新华社专访朱婷:中国球迷让我自豪 女排精神激励进步 83 | 势不可挡 西部双雄抢到赛点 84 | 追逐创新与极致 CMC Markets万元国际旅行大礼等你拿 85 | 廖英强被证监会处罚1.2亿,你怎么看? 86 | 股神来了也不行,不与俗同的中国股市 87 | 武进不锈:实控人之一提议新分红方案 拟10派3.16元 88 | 老人的房产过户给孙子如何办理手续 89 | 东风日产天籁换代 增配不加价 90 | 驾照车辆齐脱审,莫怪交警不轻罚 91 | 为什么现在人事招聘时,一定要看学历,不看工作经验呢? 92 | “新父母智慧学堂”公益巡讲再次走进南京江宁 93 | 职场不顺,听听规划师有啥高见 94 | 以色列暗杀叙利亚7名“国家英雄”的行为该如何定性? 95 | 全国首家!政府牵头、村民以旧居入股,欲打造“中原民宿第一镇” 96 | 中国游客一出境,就会被越南小贩团团的围住 97 | 梅德韦杰夫对普京来说有多重要? 98 | 让农民共享产业红利 99 | 堡垒之夜PVE每日任务攻略:摧毁物品任务地点大全 100 | Steam好评率99%:VR音游《节奏光剑》杀入畅销周榜 101 | 上联:盛世千秋伟业,下联怎么对? 102 | 江西分宜:千年古村韵悠长 103 | 王思聪高调炫富,没想到却惹出了一号大人物!立马就认怂了 104 | 2017年本地最高收视节目 105 | 没有御用摄影师,蒋欣露出苦瓜脸? 106 | 四川男篮新赛季能卷土重来横扫辽宁夺冠吗? 107 | 许昕是不是当今乒乓球界打法观赏性最高的球员? 108 | 选股是选最可能涨?错!选的是大众认为最不可能涨的! 109 | 李大霄:技术解盘——中期上行已无悬念 110 | 一签或赚10万的独角兽来了!药明康德今日上市,没中签的还可以关注这些股票 111 | 我和一个炒房客待了一天 112 | 茶山交警大队召开重点车辆企业约谈工作会议 113 | 深圳大数据培训公司哪家好?选哪家? 114 | INXX联创毛利云:潮牌之灵魂是个性与多元 115 | 区块链媒体链得得参选波场超级代表 116 | 新栽幼果树春季管理要点 117 | 梦幻西游最后知后觉的玩家,账号被卖才发现被骗! 118 | 名将有魂论《大掌门2》七武器如何养成 119 | 四级残疾证有什么用? 120 | 诗句:春雨入江行千里,如何接下一句? 121 | “艺术朝阳”1500场讲座送到基层 122 | 张碧晨大裤衩亮相机场,尽失女神风范,网友:谁的裤衩? 123 | 《下一站,别离》收官 于和伟成就新好男人标准 124 | 八卦:要不要原谅,出轨的他/她? 125 | 假如2018年总决赛骑士输给勇士,杜兰特会超过詹姆斯成为NBA现役第一人吗? 126 | 火箭回到自己的主场,灯泡组合能否直接4-1淘汰爵士进入西部决赛? 127 | 瓦基弗银行巴西助教高度赞美朱婷:总能把她的才能变成现实 128 | 中国乒乓球队凯旋归来 129 | 阿森纳的前车之鉴!5000万预算在英超连保级都难? 130 | 富深协通2017年营收8441万元 净赚1161万元 131 | 核电成东部沿海地区清洁能源主力 132 | 中国外汇储备世界第一,竟意外缩水180亿?美国脱不了干系! 133 | 甘肃日报报业集团与中国银行甘肃省分行签订战略合作协议 134 | 丰田全新86假想图曝光 或采用2.4T发动机/2020年亮相 135 | 2018款雷克萨斯NX正式上市,一汽-大众4月销量超16万辆 136 | 奥迪A6L 火爆预售中 厂家限时活动促销 最高直降12万 预购从速 137 | 荆州市第十一届中等职业学校专业技能大赛举行 138 | 最有潜力超越BAT的互联网公司有哪些? 139 | 怎样把淘宝店的产品放到淘宝客上? 140 | 如何去淘宝天猫找爆款尖货? 141 | 周末多一处游玩好地方,阜阳岳家湖公园 142 | 它是东南亚一大害草,入侵我国后成农民的“摇钱树”,亩入5万元 143 | 砚山县维摩乡倮何腻村委会开展技术培训助推产业发展 144 | 匈牙利当代艺术展在京开幕 145 | 大制作大手笔却不红的良心剧,一定有你还没看过的! 146 | 一周娱乐|飞儿乐队主唱宣布分手 “秘密森林”登顶百想艺术大赏 147 | 为什么有些女明星长得漂亮却不红? 148 | 国际影坛最有影响力的6大华人巨星,张学友上榜,第一至今无人超越! 149 | 周立波未现身法庭 第9次开庭延期至5月9日 150 | 《跨界歌王》薛之谦唱功终于提高 陈学冬还唱了电音 151 | 林丹第65冠!35岁的超级丹自己拿毛巾擦地板,赢下新西兰公开赛! 152 | 每月结余1000元的工薪族如何利用互联网金融理财? 153 | 这些容易吃罚单的交通标志,你认识几个? 154 | 北大清华公布自主招生初审名单 顶尖学府到底青睐啥样学生 155 | 自考学历有没有用呢? 156 | 电学在中考物理占的分值较大,有关电功率的计算常常出现错误 157 | 在当下智能化商业时代里,无人货架如何进化才能摆脱困局? 158 | 手机必备的排名前20的app有哪些? 159 | 如果手机丢了,别人是否可以通过短信验证改密码来盗刷支付宝的钱? 160 | 1分钟了解比特币,小白都懂了! 161 | 湄潭县旅游局积极开展禁毒宣传活动 162 | 刚刚一起打完叙利亚,特朗普就干了件荒唐事,与英法两国闹掰了 163 | 平川扶持特色产业夯实增收基础 164 | 如何给农村父母过金婚纪念日? 165 | 缅怀双亲谢众恩 一一《高堂颂全国书法名家作品集》后记 166 | 我们都被刘涛骗了!素颜近照暴露了真面目,男人看了都怀疑人生 167 | 解密伊瓜因入选阿根廷世界杯阵容:意甲争冠关键战表现打动桑保利 168 | 朔州举办主题团日系列活动 169 | 农村房产证什么时间发下来? 170 | 修不好的大众,开不坏的丰田是真的吗? 171 | 物理参照物怎么理解? 172 | 这六所工业大学以轻工化工专业为特色,比较适合高考分不高的考生 173 | 学习有用吗? 174 | 如何把微信和支付宝的收款二维码合成一个? 175 | 大数据适合零基础的人学习吗? 176 | 如何通俗易懂地解释seo是什么? 177 | 华为如此高研发投入,究竟投入到哪些方面呢? 178 | 换个角度高空看常州夜景,你见过吗? 179 | 西安在抖音爆红,凭什么点赞第一? 180 | 「梅轩每日手绘」月季花开,纸上的风情(5月8日) 181 | 重庆旅游:洪崖洞海盗船夜景 182 | 王者荣耀哪些英雄能够依靠泉水杀人? 183 | 英雄联盟:太尴尬,RNG打野MLXG韩服大师一日游,网友:工资扣完 184 | 在淘宝APP里可以玩旅行的青蛙了,但小心别被马云套路了 185 | 上联:花开彼岸本无岸,如何对下联? 186 | 古人说:“洞中方一日,世上已千年!”这个洞是不是时光隧道? 187 | 小孩需要从小诵读古文吗? 188 | 下联:荷叶无意添夏绿,如何对上联? 189 | 「四川省第十三届运动会」省运会群众项目比赛 健身气功5月16日在剑阁开赛 190 | 如今的泰森和职业拳击手打,有几成胜算? 191 | 如何快速捕捉翻倍牛股,有没有什么技巧? 192 | 5月8日PP颗粒现货乏量市场货源难寻,行情延续上涨! 193 | 不花钱就能给卡车做保养,自己动手养车技能收藏一下 194 | 4.28万起,这些中国车卖给外国人肯定能卖疯 195 | 2018届毕业生能报考2019国家电网校园招聘吗? 196 | 哪些互联网的项目比较好? 197 | 自媒体平台怎么做? 198 | 学汽修去哪里好? 199 | 开“金杯”私奔的中国情侣,把全世界惊艳到哭,我们活得太俗了 200 | 日本凭什么拿下印度高铁订单? 201 | 最新农民分类标准出炉,快来对号入座看看你属于哪一类吧! 202 | 你吃农村田野里的昆虫么,你都吃过哪几种呢? 203 | 农村女人和城里女人12张图对比,生活不易,哪张接近你的生活? 204 | 绝地求生正式服大改版,AKM成为主流,你还会用5.56的几把枪械吗 205 | 百读不厌的经典,永恒传送的乐章,老子之智慧名言35首,建议收藏 206 | 张一山的生日,蒋欣的生日,杨紫送的祝福却是天壤之别 207 | 刘诗诗阚清子应采儿……明星恩爱瞬间甜度堪比偶像剧! 208 | 火箭与勇士准胜,你觉得谁会赢? 209 | 骑士队胡德拒绝出场,你怎么看待这件事? 210 | 库里和杜兰特谁是勇士老大? 211 | G4,希尔连续两次全场一条龙单手扣篮,猛龙防守怎么了? 212 | 市场上涨中注意节奏的把握,世界杯在即概念股梳理谁能真受益? 213 | 分期付款落地8万左右的家用车,捷达、帝豪、艾瑞泽哪个好一点? 214 | 一斤小龙虾贵过路虎?网友:mmp,小龙虾耽误了我的豪车梦! 215 | 世界微笑日 江苏泰州晒巨幅人拼笑脸图案 216 | 毕业生毕业时戴博士帽,为什么不戴中国传统的进士帽? 217 | 鼓号声声 队旗飘扬|南通举行首届“少年号角杯”少先队鼓号队展演活动(视频) 218 | 如何评价文章《腾讯没有梦想》,腾讯是否真的在丧失产品能力变成投资公司? 219 | 爱因斯坦临死前为什么要烧掉自己的全部手稿? 220 | 当海滨2日游遇见森林高尔夫 这个五月不一样! 221 | 苏州繁华的商业街 观前街 222 | 火车上吃什么逼格高? 223 | 《议会》第二章“捉迷藏”将于5月17日推出 224 | 有哪些言情小说男主让你念念不忘,为什么? 225 | 倚天初期少林寺的实力到底有多强?答案这里 226 | 雨湖春水绿,如何对下联? 227 | 张碧晨出席V视界大会活动 网友:这件裙子是谁设计的?好小清新 228 | 詹姆斯强大只是假象?遇到西部劲敌就横不起来了? 229 | 爵士神助攻保罗,西决已稳,官宣:卢比奥和埃克萨姆缺阵第五场 230 | 鲁西化工000830:化工原料龙头发迹,直追兆日科技,后期指日可待 231 | 实际控制人因股票质押违约再遭平仓,套钱跑路还是有机可乘? 232 | 买不起别墅,一定要买楼顶! 233 | 名车标志及来历(下) 234 | 车上这几个灯亮了该干嘛?最全故障灯解读,看这个文章就够了! 235 | 娱乐圈最“傻”的明星,周杰伦花6000多万买的这辆车,却不能上路 236 | 深圳国际车载显示及娱乐系统发展高峰论坛流程图 237 | 谁看谁羡慕!抖音到处旅行的CP们,就属他们最会拍~ 238 | 5月5日起兴义各景区对京津冀地区游客实行门票全免 239 | 360手机N7只是性能强悍?其实还有这些黑科技 240 | lol:盖伦又一次迎来春天,技能再次增强,怕是要成为上单霸主了 241 | 《三国演义》刘备初见庞统给其县令是为了羞辱他吗? 242 | 上联:湖南到湖北,走南闯北,下联怎么对? 243 | 人死后用布盖脸的民俗学释义 244 | 范冰冰现身法国机场,一个外国粉丝拿着李冰冰照片给她签,好尴尬 245 | 她以美艳出名,是周星驰心目中的“梦中情人”,如今过成这样 246 | 沪媒批评莫雷诺为世界杯联赛中出工不出力对不对? 247 | 从未失手!恒大最稳一环5秒连献两神扑保不失,接替郑智成定海神针 248 | 为什么骑士在季后赛开始前突击签约帕金斯,帕金斯能在季后赛起到奇兵作用吗? 249 | 中国股市最大的“阴谋”会是什么? 250 | 赵长鹏:ICO是必要的 251 | 加息加息!美国购房成本再上升!年化薪资涨幅低于3%! 252 | 常州将金坛并区后,金坛未来的发展前景如何? 253 | 上海保时捷体验中心开幕 只要3200试驾保时捷主力车型! 254 | 三年级下册数学竞赛试题-奥数练习及解析|通用版(含答案) 255 | 微信打通个人端与企业端并正式支持小程序,钉钉的冬天要来了? 256 | 口碑裂变深度发酵 美菱电器“千人试用”引全民体验 257 | Win10新功能发布:镜像式接管你的手机 258 | Oculus Research正式更名为Facebook Reality Labs 259 | 日本强硬向美说不,是真心还是作秀? 260 | 意大利368处海滩被评为蓝旗海滩 261 | 中华人民共和国政府和印度尼西亚共和国政府联合声明 262 | 为什么俄罗斯有总理也有总统,区别在哪? 263 | 最接地气的亲子农场遍地开花,真正会玩的在这里! 264 | 辞去城里的工作,小伙回家推广农村无添加特产! 265 | 回顾《炉石传说》冒险模式:从仿效到衍生至整合 266 | 上联:门口问声女子好,下联如何对? 267 | 《西游记》中,玉皇大帝每次宴会都吃龙肝,四海龙王为何不抗议? 268 | 贾乃亮爱不爱李小璐呢? 269 | 米兰公布意杯决赛大名单:比格利亚回归 270 | 如何看待国家德比中梅西铲断拉莫斯,铲人不铲球这件事? 271 | 海航转让控股子公司,产业板块由7个缩减到4个 272 | 投资现货黄金,如何看待开仓容易平仓难? 273 | CTCC上海站客户观赛日圆满结束!车主没看够?后面还有 274 | 生命教育到底是一种怎样的教育? 275 | 哪些学校的金融专硕好考? 276 | 你是看上了vivo X21手机哪个功能才购买这台手机的,为什么? 277 | 国产航母最新试水成功,西方无奈,直接甩印度一条街! 278 | 昆明 东川乌蒙山旅游 279 | 美朝就驻韩美军问题立场互换?外媒:韩国很紧张 280 | 属于80后的回忆,《流星蝴蝶剑手游》战斗实录首曝! 281 | 你听过最牛逼笑话是什么? 282 | 上联:无锡山上山无锡,如何对下联? 283 | 《寂静之地》发布“寂静影院”预告 284 | 如果总决赛,火箭打骑士与勇士打骑士哪个胜算大,为什么? 285 | 詹姆斯究竟有多恐怖?三数据竟胜双枪,一点联盟无人能比! 286 | 如果让你组建一支NBA球队,你会选择哪些人? 287 | 咔拉宝宝CEO陈实受邀出席58创业节分享:创业不是买卖是创基业 288 | 伊朗“四面楚歌” 助推黄金起航,金价将迎来新一轮大爆发! 289 | 8日晚间可能影响股价重要财经证券资讯速递 290 | 重庆的房价会暴涨吗? 291 | 安徽小县城的房子,目前均价7000-8000一平方,是否还有买房的价值? 292 | 不带透镜的汽车LED大灯和带透镜的原车卤素灯效果对比如何? 293 | 在长辈眼里的“有出息”我们该怎么去理解? 294 | 《解放》解放了什么?说唱剧《解放》明日将走进延安鲁艺进行讲座 295 | 考生注意!倒计时一个月 今年高考有这些新变化! 296 | 杨秀清是烧炭工,他的军事才能是怎么来的? 297 | 桂林的哈斯特地貌!能俯视全桂林! 298 | 她为农产品“写日记”“办身份证” 确保让每一口食物都放心! 299 | 当王祖蓝穿上了女装……身材居然还是前凸后翘的,被大妈夸漂亮 300 | 《孤岛惊魂5》地图编辑器重现美剧《迷失》中的孤岛 301 | 或许再也看不到台湾娱乐圈的鼎盛时期了 302 | 皇马一漏洞或致命 8战丢12球怎能抵抗利物浦三叉戟 303 | 格策姐弟恋修成正果 已和女友领证+世界杯后婚礼 304 | 最牛金属撑不住了!寒锐钴业两月跌3成 一信号出现 305 | 刘言金:5.8策略 黄金区间偏向空 原油回撤继续多 306 | “十倍股”是怎样层层筛选出来的? 307 | 从这里看多A股半年好行情 308 | 近视眼可以考驾照吗 309 | 剪刀门到底要不要改?细数剪刀门优缺点 310 | 提示!这几个区本周开始办理回户籍所在地小升初 311 | 对体育生过去的发展动机~ 312 | 北大校长不仅念错了字,还用30条病句道歉?网友们:孰能无过? 313 | 简单的直播需要哪些设备? 314 | 该怎么做一个地方型的自媒体? 315 | 张一鸣发微信朋友圈,马化腾怒怼:诽谤! 316 | “宝贝计划2”开拍啦,现身济南,场面震撼! 317 | 韶关和肇庆,这两座城市,哪个更有发展前景呢? 318 | 和县第二届龙虾美食音乐节暨环湖“彩虹跑”活动纪实 319 | 中西方旅游度假村有何不同?未来会如何发展? 320 | 马云和老朋友约旦王后聊了聊,决定一起帮阿拉伯世界的儿童做些事 321 | 玉米价格还会继续回落吗? 322 | 《少年群侠传》麟铠魔魂 突破更高战力 323 | lol有哪些混伤英雄? 324 | 上联:半床明月增寂寞,下联怎么对? 325 | “奇石”,让家居更加雅致 326 | 上联:石榴花蕾点点红,下联怎么对? 327 | 电视剧的“神级”穿帮,图一就把我气乐了,最后一张星爷也出错了 328 | 《西部世界》日本武士袭击梅芙,德洛丽丝无情黑化 329 | 最近有点闲钱,投资什么前景比较大呢? 330 | 酒店共享布草管理者“兔小二”完成A轮亿级融资 331 | 美团无边界扩张,专注而不专一,滑向死亡泥沼! 332 | 意外保险可以买多份吗,如果买了多份意外保险怎么理赔? 333 | 央行:今年将不断优化人民币跨境业务政策 334 | 高盛涉足比特币期货,黄金TD五月会有意外吗? 335 | 女子3800出租新房,被人私自改成10个房间,二房东:找人弄你! 336 | 交警蜀黎查车最爱拦的6种车,车主们要注意了,一查一个准! 337 | 小学看班级,中学看学校,大学看宿舍 338 | 联想被踢出恒生指数,是什么导致了联想现在的这种境地? 339 | 抖音惹的祸:马化腾、张一鸣朋友圈“开撕” 340 | 最低116元!福州5月国内外特价机票清单出炉,感受初夏小清凉! 341 | 上联:泰山黄山赵本山,如何对下联? 342 | 上联:泰山黄山赵本山,如何对下联? 343 | 上联;凤移莲步辞旧岁;下联怎么对? 344 | 《天命正道,今人古心》岑其中国画作品展宁波站开幕 345 | 安以轩出席某活动,网友:这就是气质 346 | 猛龙:该如何重拾那被打碎的自信? 347 | 巴菲特坚持简单的炒股理念 下一个投资目标预测! 348 | 马云又出惊人言论,8年后房子最不值钱,他的话可信吗? 349 | 吉利远景SUV和风光580选哪个好? 350 | 国产车品牌中,最美车标和最丑车标你认为是什么呢? 351 | 这恐怕是市场上最“圆”的车型了,雪铁龙什么设计品位? 352 | 23岁在《自然》上发表论文,电子科大这位最年轻副院长,再次被全社会聚焦 353 | 你如何看待“500强HR怼普通学校毕业生”,为什么要招985名校毕业生? 354 | 最好的汽修学校是哪里? 355 | IPFS或将成为区块链数据存储不可缺少的一环 356 | 新零售人才争夺战打响,这些雷区千万别踩! 357 | 《真龙霸业》不以品阶看武将而以技能定天下! 358 | 360手机N7发布 成为玩《楚留香》游戏必备手机 359 | LOL:打野蒙多异军突起胜率登顶?韩服8.9版本英雄胜率分析! 360 | 为什么有人分不清“动漫”、“动画”和“动画片”? 361 | 杨振宁自称活到一百岁,而41岁的翁帆面带憔悴,心事重重! 362 | 张檬发微博声明插足张雨欣婚姻并称想当面赔礼道歉 363 | 上港出征亚冠,队长胡尔克日本发文,球迷无解! 364 | 佩林卡、魔术师和沃顿观看湖人今日试训 365 | 手里有40万,应该投资什么比较好? 366 | 前四月销售413亿 绿城中国代建提速与三四线再布局 367 | 自主智联SUV哪家强4款热门车型全面对笔 368 | 买完新车,磨合期要这样开! 369 | 这样乘坐网约车岂不是给河南人抹黑了? 370 | 实习期内没开车算通过实习期吗? 371 | 电子科技大学与香港中文大学,哪个更好? 372 | 学校教室装空调让学生出钱合适吗? 373 | 刚刚宣布!林州这个学校6人被北大清华看中! 374 | 陈传席:你只管打进传统 375 | 极光大数据报告:网易云音乐领跑娱乐类产品 376 | 淘宝商家和淘宝客怎么加入店淘? 377 | 潮落三江浮华远,如何接句? 378 | 去青岛旅行,有哪些不可错过的景点? 379 | 为什么美国要替别的国家人民做主,不允许别的国家独立自主? 380 | 法武装力量部长:削弱伊核协议将成为地区局势恶化因素 381 | 打破二百年“禁婚”陈规,彰显乡村自治力量 382 | 柳传志:当今创业者不能缺乏弘毅精神,做到了百战百胜必平步青云 383 | 一花一世界,一寸一天堂 384 | 温暖的弦13集一心唱歌为什么痛哭?一心唱的是什么歌 385 | 胡歌终于要参加综艺了 还是和她合作! 386 | 《复仇者联盟》编剧谈《复联4》剧情走向!可能会与你期望不同! 387 | 明星居然也“照骗”,看看“外媒眼中”的他们就知道了! 388 | 内蒙古这个地方将要开启一场超级马拉松赛,你敢来挑战吗? 389 | Dare To Be Different——高士特车队亮相上海 390 | 广州恒大亚冠海报出炉,为什么是古德利占据中间位置? 391 | 别开生面 亮点纷呈 “2018东北亚(跨境)电商名品博览会”将如期而至 392 | 礼悦江山荣获2018年重庆最值得期待项目之一 393 | 内外兼顾 全新长安逸动竞争力分析 394 | 29万入手红旗H7,三十而立选择国产,车主直言:不只是那一抹红 395 | 我为什么能把10万的车开出跑车的感觉? 396 | 遂宁一中举办教职工气排球比赛 397 | 今天,我们缺失了什么?教养,从每一个细节做起! 398 | 顺舟智能携手酒店项目商/智能家居集成商,共筑精品智慧酒店 399 | 小程序能为餐饮商户带来什么?餐饮小程序让中小商户更易存活 400 | 052D能发射对地巡航导弹吗? 401 | 如果小米造战斗机会怎样? 402 | 往事一去永不回:南沙改变的不仅是美景,更有舌尖上的味道 403 | 正定街头搞事情了!99%的石家庄人还不知道! 404 | 普京就职与3人握手 选这位唯一外国人有深意 405 | 婚姻法新规:离婚时仅有这4种情况,才能要求赔偿,不知道亏大了 406 | 8.9蒙多大招史诗级加强 100%回血蒙多团战想去哪就去哪 407 | 《暗黑破坏神2》当年你们是怎么玩的? 408 | 你喜欢在哪里喝茶,在哪里喝茶更有意境? 409 | 上联:泰山黄山赵本山,如何对下联? 410 | “樊胜美”蒋欣过生日,《欢乐颂》好姐妹杨紫乔欣送祝福 411 | 后来的我们电影百度云资源 HD1080P完整版资源 免费在线观看 412 | 为什么浙江县级城市义乌有较好的Livehouse氛围? 413 | 又一个“马大壮”诞生,黑白配马苏腿粗堪比马思纯 414 | 昆凌出国度假不忘运动 周杰伦怨「能放松一下吗?」 415 | 有人砸了泰森的劳斯莱斯会如何?被泰森一拳打碎了鼻子 416 | 足球场上争球时,对方一脚进门,这样算进球有效吗? 417 | 最后八个月!国足依靠哪些人可以进亚洲杯四强 418 | 美媒:中国银行正在蚕食世界,体量达美国2倍 419 | 老股民详解主力吸筹技巧,昨天尾盘说的粤传媒起来了,又双赚钱了 420 | 杭州市2018一季度各区县市GDP:余杭增速增量双第一! 421 | 南丰交警发布连续3次未年检摩托车强制注销的公告(九) 422 | 配置升级、售价不变,2018款雷克萨斯NX上市 423 | “2018中国·太原国际汽车展览会”如期而至,华丽启幕 424 | “本店免费WIFI”,曾经拿来吸引顾客的招牌为何逐渐被店家关闭 425 | 三菱柴油机组维护应该掌握的二个重要参数:机油容量和冷却水容量 426 | 造车新势力整天瞎忽悠老百姓,吉利董事长李书福这样怼他们的! 427 | 上海交通大学湖南校友会成立 428 | 什么样的教师交流轮岗更有效 429 | 你有1份2018职业教育活动周特刊,尚未领取 430 | 你觉得下一代苹果增加什么功能你才会买? 431 | 建一个微信小程序商城需要多少钱? 432 | 基于微信10亿+用户,小程序到底该不该做? 433 | 以色列警告称如果战机被击落将会轰炸俄军事基地,你怎么看? 434 | 在西安体验关中民俗风情,来这里就足够了! 435 | 好汉杯,7点企鹅电竞 436 | 绝地求生:吃鸡赛事成世界前二电竞 4AM战队取得了不错的好成绩? 437 | 为什么现在有些年轻人靠借贷生活? 438 | 哈尔滨有哪些有意思的地名? 439 | 无人自动驾驶被推上风口浪尖,各地事故频发,安全隐患令人堪忧! 440 | 豪华7座大型SUV 宝马X7即将在今秋亮相 441 | 哈弗h6/GS4/RX5/博越 应该怎么选? 442 | 如何选择改装内饰? -------------------------------------------------------------------------------- /CNN-LSTM/log/file.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frank330/Text_Classification/e7c75c24f33c5c2c6621b6abb4c74c2546f3fc22/CNN-LSTM/log/file.md -------------------------------------------------------------------------------- /CNN-LSTM/main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from keras.models import load_model 3 | from sklearn.preprocessing import LabelEncoder,OneHotEncoder 4 | from keras.models import Model 5 | from keras.layers import Input, Dense,Embedding,Conv1D,MaxPooling1D,LSTM 6 | from keras.preprocessing.text import Tokenizer 7 | from keras.utils import pad_sequences 8 | from jieba import lcut 9 | from sklearn.model_selection import train_test_split 10 | import numpy as np 11 | from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay 12 | import matplotlib.pyplot as plt 13 | from sklearn.metrics import precision_score, accuracy_score, f1_score, recall_score 14 | from keras.callbacks import TensorBoard,EarlyStopping 15 | import pandas as pd 16 | import PySimpleGUI as sg 17 | import matplotlib 18 | 19 | # 数据处理 20 | # """判断一个unicode是否是汉字""" 21 | def is_chinese(uchar): 22 | if (uchar >= '\u4e00' and uchar <= '\u9fa5') : 23 | return True 24 | else: 25 | return False 26 | def reserve_chinese(content): 27 | content_str = '' 28 | for i in content: 29 | if is_chinese(i): 30 | content_str += i 31 | return content_str 32 | def getStopWords(): 33 | file = open('./data/stopwords.txt', 'r',encoding='utf8') 34 | words = [i.strip() for i in file.readlines()] 35 | file.close() 36 | return words 37 | def dataParse(text, stop_words): 38 | label_map = {'news_story': 0, 'news_culture': 1, 'news_entertainment': 2, 39 | 'news_sports': 3, 'news_finance': 4, 'news_house': 5, 'news_car': 6, 40 | 'news_edu': 7, 'news_tech': 8, 'news_military': 9, 'news_travel': 10, 41 | 'news_world': 11, 'stock': 12, 'news_agriculture': 13, 'news_game': 14} 42 | _, _, label, content, _ = text.split('_!_') 43 | label = label_map[label] 44 | content = reserve_chinese(content) 45 | words = lcut(content) 46 | words = [i for i in words if not i in stop_words] 47 | return words, int(label) 48 | 49 | def getData(file='./data/toutiao_cat_data.txt',): 50 | file = open(file, 'r',encoding='utf8') 51 | texts = file.readlines() 52 | file.close() 53 | stop_words = getStopWords() 54 | all_words = [] 55 | all_labels = [] 56 | for text in texts: 57 | content, label = dataParse(text, stop_words) 58 | if len(content) <= 0: 59 | continue 60 | all_words.append(content) 61 | all_labels.append(label) 62 | return all_words,all_labels 63 | 64 | ## 读取测数据集 65 | data,label = getData() 66 | 67 | X_train, X_t, train_y, v_y = train_test_split(data,label,test_size=0.3, random_state=42) 68 | X_val, X_test, val_y, test_y = train_test_split(X_t,v_y,test_size=0.5, random_state=42) 69 | # print(X_train) 70 | 71 | ## 对数据集的标签数据进行one-hot编码 72 | ohe = OneHotEncoder() 73 | train_y = ohe.fit_transform(np.array(train_y).reshape(-1,1)).toarray() 74 | val_y = ohe.transform(np.array(val_y).reshape(-1,1)).toarray() 75 | test_y = ohe.transform(np.array(test_y).reshape(-1,1)).toarray() 76 | print('训练集',train_y.shape) 77 | print('验证集',val_y.shape) 78 | print('测试集',test_y.shape) 79 | 80 | ## 使用Tokenizer对词组进行编码 81 | ## 当我们创建了一个Tokenizer对象后,使用该对象的fit_on_texts()函数,以空格去识别每个词, 82 | ## 可以将输入的文本中的每个词编号,编号是根据词频的,词频越大,编号越小。 83 | max_words = 5000 84 | max_len = 100 85 | tok = Tokenizer(num_words=max_words) ## 使用的最大词语数为5000 86 | tok.fit_on_texts(data) 87 | 88 | # texts_to_sequences 输出的是根据对应关系输出的向量序列,是不定长的,跟句子的长度有关系 89 | print(X_train[0]) 90 | train_seq = tok.texts_to_sequences(X_train) 91 | val_seq = tok.texts_to_sequences(X_val) 92 | test_seq = tok.texts_to_sequences(X_test) 93 | print(train_seq[0]) 94 | ## 将每个序列调整为相同的长度.长度为100 95 | train_seq_mat = pad_sequences(train_seq,maxlen=max_len) 96 | val_seq_mat = pad_sequences(val_seq,maxlen=max_len) 97 | test_seq_mat = pad_sequences(test_seq,maxlen=max_len) 98 | 99 | num_classes = 15 100 | ## 定义CNN-LSTM模型 101 | inputs = Input(name='inputs',shape=[max_len]) 102 | ## Embedding(词汇表大小,batch大小,每个新闻的词长) 103 | layer = Embedding(max_words+1,128,input_length=max_len)(inputs) 104 | layer = Conv1D(filters=32, kernel_size=3, padding='same', activation='relu')(layer) 105 | layer = MaxPooling1D(pool_size=2)(layer) 106 | layer = Conv1D(filters=32, kernel_size=3, padding='same', activation='relu')(layer) 107 | layer = MaxPooling1D(pool_size=2)(layer) 108 | layer = LSTM(100, dropout=0.2, recurrent_dropout=0.2)(layer) 109 | layer = Dense(num_classes, activation='softmax')(layer) 110 | model = Model(inputs=inputs,outputs=layer) 111 | model.summary() 112 | model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 113 | # #模型训练 114 | 115 | model.fit(train_seq_mat,train_y,batch_size=128,epochs=10, 116 | validation_data=(val_seq_mat,val_y), 117 | callbacks=[EarlyStopping(monitor='val_loss',min_delta=0.0001),TensorBoard(log_dir='./log')] 118 | ## 当val-loss不再降低时停止训练 119 | ) 120 | # # 保存模型 121 | model.save('model/CNN-LSTM.h5') 122 | del model 123 | 124 | ## 对验证集进行预测 125 | # 导入已经训练好的模型 126 | model = load_model('model/CNN-LSTM.h5') 127 | test_pre = model.predict(test_seq_mat) 128 | pred = np.argmax(test_pre,axis=1) 129 | real = np.argmax(test_y,axis=1) 130 | cv_conf = confusion_matrix(real, pred) 131 | acc = accuracy_score(real, pred) 132 | precision = precision_score(real, pred, average='micro') 133 | recall = recall_score(real, pred, average='micro') 134 | f1 = f1_score(real, pred, average='micro') 135 | patten = 'test: acc: %.4f precision: %.4f recall: %.4f f1: %.4f' 136 | print(patten % (acc,precision,recall,f1,)) 137 | labels11 = ['story','culture','entertainment','sports','finance', 138 | 'house','car','edu','tech','military', 139 | 'travel','world','stock','agriculture','game'] 140 | fig, ax = plt.subplots(figsize=(15,15)) 141 | disp = ConfusionMatrixDisplay(confusion_matrix=cv_conf, display_labels=labels11) 142 | disp.plot(cmap="Blues", values_format='',ax=ax) 143 | plt.savefig("ConfusionMatrix.tif", dpi=400) 144 | 145 | def dataParse_(content, stop_words): 146 | content = reserve_chinese(content) 147 | words = lcut(content) 148 | words = [i for i in words if not i in stop_words] 149 | return words 150 | def getData_one(file): 151 | file = open(file, 'r',encoding='utf8') 152 | texts = file.readlines() 153 | file.close() 154 | stop_words = getStopWords() 155 | all_words = [] 156 | word = [] 157 | for text in texts: 158 | content = dataParse_(text, stop_words) 159 | if len(content) <= 0: 160 | continue 161 | all_words.append(content) 162 | word.append(text) 163 | return all_words,word 164 | 165 | def predict_(file): 166 | data_cut ,data= getData_one(file) 167 | t_seq = tok.texts_to_sequences(data_cut) 168 | t_seq_mat = pad_sequences(t_seq, maxlen=max_len) 169 | model = load_model('model/CNN-LSTM.h5') 170 | t_pre = model.predict(t_seq_mat) 171 | pred = np.argmax(t_pre, axis=1) 172 | labels11 = ['story', 'culture', 'entertainment', 'sports', 'finance', 173 | 'house', 'car', 'edu', 'tech', 'military', 174 | 'travel', 'world', 'stock', 'agriculture', 'game'] 175 | pred_lable = [] 176 | for i in pred: 177 | pred_lable.append(labels11[i]) 178 | df_x = pd.DataFrame(data) 179 | df_y = pd.DataFrame(pred_lable) 180 | headerList = ['label', 'text'] 181 | data = pd.concat([df_y, df_x], axis=1) 182 | data.to_csv('data.csv',header=headerList,) 183 | matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 184 | data = pd.read_csv('data.csv') 185 | result = data['label'].value_counts() 186 | result.plot(kind='bar') 187 | plt.show() 188 | # return pred_lable 189 | 190 | def main_windows(): 191 | # 菜单栏 192 | menu_def = [['Help', 'About...'], ] 193 | # 主窗口 194 | layout = [[sg.Menu(menu_def, tearoff=True)], 195 | [sg.Text('')], 196 | [sg.Text('请选择要处理的文本',font=("Helvetica", 16)),], 197 | [sg.Text('导入文本', size=(8, 1),font=("Helvetica", 16)), sg.Input(), sg.FileBrowse()], 198 | [sg.Text('')], 199 | [sg.Text('', size=(20, 1)), sg.Button('启动数据处理',font=("Helvetica", 16))], 200 | [sg.Text('')], 201 | [sg.Text('', size=(20, 1)), sg.Text(key="output", justification='center',font=("Helvetica", 16))], 202 | [sg.Text('')], 203 | [sg.Text('')], ] 204 | win1 = sg.Window('中文文本分类系统', layout) 205 | while True: 206 | ev1, vals1 = win1.Read() 207 | if ev1 is None: 208 | break 209 | if ev1 == '启动数据处理': 210 | predict_(vals1[1]) 211 | win1['output'].update('处理完毕') 212 | else: 213 | pass 214 | 215 | if __name__ == "__main__": 216 | main_windows() 217 | -------------------------------------------------------------------------------- /CNN-LSTM/model/file.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frank330/Text_Classification/e7c75c24f33c5c2c6621b6abb4c74c2546f3fc22/CNN-LSTM/model/file.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Text_Classification 2 | 本项目包含TextCNN、CNN-LSTM和bert方法进行中文文本分类 3 | 今日头条文本分类数据集下载地址: 4 | https://github.com/aceimnorstuvwxz/toutiao-text-classfication-dataset 5 | -------------------------------------------------------------------------------- /TextCNN/dataset/data/file.md: -------------------------------------------------------------------------------- 1 | 今日头条文本分类数据集下载地址: 2 | https://github.com/aceimnorstuvwxz/toutiao-text-classfication-dataset -------------------------------------------------------------------------------- /TextCNN/dataset/stopwords.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 | able 26 | about 27 | above 28 | according 29 | accordingly 30 | across 31 | actually 32 | after 33 | afterwards 34 | again 35 | against 36 | ain't 37 | all 38 | allow 39 | allows 40 | almost 41 | alone 42 | along 43 | already 44 | also 45 | although 46 | always 47 | am 48 | among 49 | amongst 50 | an 51 | and 52 | another 53 | any 54 | anybody 55 | anyhow 56 | anyone 57 | anything 58 | anyway 59 | anyways 60 | anywhere 61 | apart 62 | appear 63 | appreciate 64 | appropriate 65 | are 66 | aren't 67 | around 68 | as 69 | a's 70 | aside 71 | ask 72 | asking 73 | associated 74 | at 75 | available 76 | away 77 | awfully 78 | be 79 | became 80 | because 81 | become 82 | becomes 83 | becoming 84 | been 85 | before 86 | beforehand 87 | behind 88 | being 89 | believe 90 | below 91 | beside 92 | besides 93 | best 94 | better 95 | between 96 | beyond 97 | both 98 | brief 99 | but 100 | by 101 | came 102 | can 103 | cannot 104 | cant 105 | can't 106 | cause 107 | causes 108 | certain 109 | certainly 110 | changes 111 | clearly 112 | c'mon 113 | co 114 | com 115 | come 116 | comes 117 | concerning 118 | consequently 119 | consider 120 | considering 121 | contain 122 | containing 123 | contains 124 | corresponding 125 | could 126 | couldn't 127 | course 128 | c's 129 | currently 130 | definitely 131 | described 132 | despite 133 | did 134 | didn't 135 | different 136 | do 137 | does 138 | doesn't 139 | doing 140 | done 141 | don't 142 | down 143 | downwards 144 | during 145 | each 146 | edu 147 | eg 148 | eight 149 | either 150 | else 151 | elsewhere 152 | enough 153 | entirely 154 | especially 155 | et 156 | etc 157 | even 158 | ever 159 | every 160 | everybody 161 | everyone 162 | everything 163 | everywhere 164 | ex 165 | exactly 166 | example 167 | except 168 | far 169 | few 170 | fifth 171 | first 172 | five 173 | followed 174 | following 175 | follows 176 | for 177 | former 178 | formerly 179 | forth 180 | four 181 | from 182 | further 183 | furthermore 184 | get 185 | gets 186 | getting 187 | given 188 | gives 189 | go 190 | goes 191 | going 192 | gone 193 | got 194 | gotten 195 | greetings 196 | had 197 | hadn't 198 | happens 199 | hardly 200 | has 201 | hasn't 202 | have 203 | haven't 204 | having 205 | he 206 | hello 207 | help 208 | hence 209 | her 210 | here 211 | hereafter 212 | hereby 213 | herein 214 | here's 215 | hereupon 216 | hers 217 | herself 218 | he's 219 | hi 220 | him 221 | himself 222 | his 223 | hither 224 | hopefully 225 | how 226 | howbeit 227 | however 228 | i'd 229 | ie 230 | if 231 | ignored 232 | i'll 233 | i'm 234 | immediate 235 | in 236 | inasmuch 237 | inc 238 | indeed 239 | indicate 240 | indicated 241 | indicates 242 | inner 243 | insofar 244 | instead 245 | into 246 | inward 247 | is 248 | isn't 249 | it 250 | it'd 251 | it'll 252 | its 253 | it's 254 | itself 255 | i've 256 | just 257 | keep 258 | keeps 259 | kept 260 | know 261 | known 262 | knows 263 | last 264 | lately 265 | later 266 | latter 267 | latterly 268 | least 269 | less 270 | lest 271 | let 272 | let's 273 | like 274 | liked 275 | likely 276 | little 277 | look 278 | looking 279 | looks 280 | ltd 281 | mainly 282 | many 283 | may 284 | maybe 285 | me 286 | mean 287 | meanwhile 288 | merely 289 | might 290 | more 291 | moreover 292 | most 293 | mostly 294 | much 295 | must 296 | my 297 | myself 298 | name 299 | namely 300 | nd 301 | near 302 | nearly 303 | necessary 304 | need 305 | needs 306 | neither 307 | never 308 | nevertheless 309 | new 310 | next 311 | nine 312 | no 313 | nobody 314 | non 315 | none 316 | noone 317 | nor 318 | normally 319 | not 320 | nothing 321 | novel 322 | now 323 | nowhere 324 | obviously 325 | of 326 | off 327 | often 328 | oh 329 | ok 330 | okay 331 | old 332 | on 333 | once 334 | one 335 | ones 336 | only 337 | onto 338 | or 339 | other 340 | others 341 | otherwise 342 | ought 343 | our 344 | ours 345 | ourselves 346 | out 347 | outside 348 | over 349 | overall 350 | own 351 | particular 352 | particularly 353 | per 354 | perhaps 355 | placed 356 | please 357 | plus 358 | possible 359 | presumably 360 | probably 361 | provides 362 | que 363 | quite 364 | qv 365 | rather 366 | rd 367 | re 368 | really 369 | reasonably 370 | regarding 371 | regardless 372 | regards 373 | relatively 374 | respectively 375 | right 376 | said 377 | same 378 | saw 379 | say 380 | saying 381 | says 382 | second 383 | secondly 384 | see 385 | seeing 386 | seem 387 | seemed 388 | seeming 389 | seems 390 | seen 391 | self 392 | selves 393 | sensible 394 | sent 395 | serious 396 | seriously 397 | seven 398 | several 399 | shall 400 | she 401 | should 402 | shouldn't 403 | since 404 | six 405 | so 406 | some 407 | somebody 408 | somehow 409 | someone 410 | something 411 | sometime 412 | sometimes 413 | somewhat 414 | somewhere 415 | soon 416 | sorry 417 | specified 418 | specify 419 | specifying 420 | still 421 | sub 422 | such 423 | sup 424 | sure 425 | take 426 | taken 427 | tell 428 | tends 429 | th 430 | than 431 | thank 432 | thanks 433 | thanx 434 | that 435 | thats 436 | that's 437 | the 438 | their 439 | theirs 440 | them 441 | themselves 442 | then 443 | thence 444 | there 445 | thereafter 446 | thereby 447 | therefore 448 | therein 449 | theres 450 | there's 451 | thereupon 452 | these 453 | they 454 | they'd 455 | they'll 456 | they're 457 | they've 458 | think 459 | third 460 | this 461 | thorough 462 | thoroughly 463 | those 464 | though 465 | three 466 | through 467 | throughout 468 | thru 469 | thus 470 | to 471 | together 472 | too 473 | took 474 | toward 475 | towards 476 | tried 477 | tries 478 | truly 479 | try 480 | trying 481 | t's 482 | twice 483 | two 484 | un 485 | under 486 | unfortunately 487 | unless 488 | unlikely 489 | until 490 | unto 491 | up 492 | upon 493 | us 494 | use 495 | used 496 | useful 497 | uses 498 | using 499 | usually 500 | value 501 | various 502 | very 503 | via 504 | viz 505 | vs 506 | want 507 | wants 508 | was 509 | wasn't 510 | way 511 | we 512 | we'd 513 | welcome 514 | well 515 | we'll 516 | went 517 | were 518 | we're 519 | weren't 520 | we've 521 | what 522 | whatever 523 | what's 524 | when 525 | whence 526 | whenever 527 | where 528 | whereafter 529 | whereas 530 | whereby 531 | wherein 532 | where's 533 | whereupon 534 | wherever 535 | whether 536 | which 537 | while 538 | whither 539 | who 540 | whoever 541 | whole 542 | whom 543 | who's 544 | whose 545 | why 546 | will 547 | willing 548 | wish 549 | with 550 | within 551 | without 552 | wonder 553 | won't 554 | would 555 | wouldn't 556 | yes 557 | yet 558 | you 559 | you'd 560 | you'll 561 | your 562 | you're 563 | yours 564 | yourself 565 | yourselves 566 | you've 567 | zero 568 | zt 569 | ZT 570 | zz 571 | ZZ 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 | -------------------------------------------------------------------------------- /TextCNN/main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from jieba import lcut 3 | from torchtext.vocab import vocab 4 | from collections import OrderedDict, Counter 5 | from torchtext.transforms import VocabTransform 6 | from torch.nn.utils.rnn import pack_padded_sequence, pad_sequence 7 | from sklearn.preprocessing import LabelEncoder 8 | import scipy.io as io 9 | from torch.utils.data import Dataset, DataLoader 10 | from sklearn.model_selection import train_test_split 11 | import torch.nn as nn 12 | from torch.optim import Adam 13 | import numpy as np 14 | from utils import metrics, safeCreateDir 15 | import time 16 | from sklearn.metrics import ConfusionMatrixDisplay 17 | from matplotlib import pyplot as plt 18 | import seaborn as sns 19 | import torch 20 | from torch.nn import functional as F 21 | import math 22 | from sklearn.metrics import confusion_matrix # 从sklearn工具包导入评价指标:混淆矩阵和f1值 23 | 24 | # 数据处理 25 | # """判断一个unicode是否是汉字""" 26 | def is_chinese(uchar): 27 | if (uchar >= '\u4e00' and uchar <= '\u9fa5') : 28 | return True 29 | else: 30 | return False 31 | 32 | # 是中文就留下 不是就跳过 33 | def reserve_chinese(content): 34 | content_str = '' 35 | for i in content: 36 | if is_chinese(i): 37 | content_str += i 38 | return content_str 39 | 40 | # 读取去停用词库 41 | def getStopWords(): 42 | file = open('./dataset/stopwords.txt', 'r',encoding='utf8') 43 | words = [i.strip() for i in file.readlines()] 44 | file.close() 45 | return words 46 | 47 | # 数据清洗、分词、去停用词 48 | def dataParse(text, stop_words): 49 | label_map = {'news_story': 0, 'news_culture': 1, 'news_entertainment': 2, 50 | 'news_sports': 3, 'news_finance': 4, 'news_house': 5, 'news_car': 6, 51 | 'news_edu': 7, 'news_tech': 8, 'news_military': 9, 'news_travel': 10, 52 | 'news_world': 11, 'stock': 12, 'news_agriculture': 13, 'news_game': 14} 53 | _, _, label,content, _ = text.split('_!_') 54 | label = label_map[label] 55 | # 去掉非中文词 56 | content = reserve_chinese(content) 57 | # 结巴分词 58 | words = lcut(content) 59 | # 去停用词 60 | words = [i for i in words if not i in stop_words] 61 | return words, int(label) 62 | 63 | def getFormatData(): 64 | file = open('./dataset/data/toutiao_cat_data.txt', 'r',encoding='utf8') 65 | texts = file.readlines() 66 | file.close() 67 | stop_words = getStopWords() 68 | all_words = [] 69 | all_labels = [] 70 | for text in texts: 71 | content, label = dataParse(text, stop_words) 72 | if len(content) <= 0: 73 | continue 74 | all_words.append(content) 75 | all_labels.append(label) 76 | 77 | # 自制词表Vocab 78 | # 将所有词都汇总到一个列表中 79 | ws = sum(all_words, []) 80 | # 统计词频 81 | set_ws = Counter(ws) 82 | # 按照词频排序 sorted函数是默认升序排序,当需要降序排序时,需要使用reverse = Ture 83 | # 以词的形式进行索引 84 | keys = sorted(set_ws, key=lambda x: set_ws[x], reverse=True) 85 | # 将词和编号对应起来 制作成字典 86 | dict_words = dict(zip(keys, list(range(1, len(set_ws) + 1)))) 87 | ordered_dict = OrderedDict(dict_words) 88 | # # 基于有序字典创建词典 添加特殊符号 89 | my_vocab = vocab(ordered_dict, specials=['', '']) 90 | 91 | # 将输入的词元映射成它们在词表中的索引 92 | vocab_transform = VocabTransform(my_vocab) 93 | vector = vocab_transform(all_words) 94 | 95 | # 转成tensor 96 | vector = [torch.tensor(i) for i in vector] 97 | # 对tensor做padding 保证网络定长输入 98 | pad_seq = pad_sequence(vector, batch_first=True) 99 | labelencoder = LabelEncoder() 100 | labels = labelencoder.fit_transform(all_labels) 101 | data = pad_seq.numpy() 102 | data = {'X': data, 103 | 'label': labels, 104 | 'num_words': len(my_vocab)} 105 | io.savemat('./dataset/data/data.mat', data) 106 | 107 | # 数据集加载 108 | class Data(Dataset): 109 | def __init__(self, mode='train'): 110 | data = io.loadmat('./dataset/data/data.mat') 111 | self.X = data['X'] 112 | self.y = data['label'] 113 | self.num_words = data['num_words'].item() 114 | train_X, val_X, train_y, val_y, = train_test_split(self.X, self.y.squeeze(),test_size=0.3, random_state=1) 115 | val_X, test_X, val_y, test_y, = train_test_split(val_X, val_y, test_size=0.5, random_state=1) 116 | if mode == 'train': 117 | self.X = train_X 118 | self.y = train_y 119 | 120 | elif mode == 'val': 121 | self.X = val_X 122 | self.y = val_y 123 | 124 | elif mode == 'test': 125 | self.X = test_X 126 | self.y = test_y 127 | 128 | def __getitem__(self, item): 129 | return self.X[item], self.y[item] 130 | def __len__(self): 131 | return self.X.shape[0] 132 | class getDataLoader(): 133 | def __init__(self,batch_size): 134 | train_data = Data('train') 135 | val_data = Data('val') 136 | test_data = Data('test') 137 | self.traindl = DataLoader(train_data, batch_size=batch_size, shuffle=True, num_workers=4) 138 | self.valdl = DataLoader(val_data, batch_size=batch_size, shuffle=True, num_workers=4) 139 | self.testdl = DataLoader(test_data, batch_size=batch_size, shuffle=False, num_workers=4) 140 | self.num_words = train_data.num_words 141 | 142 | # 定义网络结构 143 | class textCNN(nn.Module): 144 | def __init__(self, param): 145 | super(textCNN, self).__init__() 146 | ci = 1 # input chanel size 147 | kernel_num = param['kernel_num'] # output chanel size 148 | kernel_size = param['kernel_size'] 149 | vocab_size = param['vocab_size'] 150 | embed_dim = param['embed_dim'] 151 | dropout = param['dropout'] 152 | class_num = param['class_num'] 153 | self.param = param 154 | self.embed = nn.Embedding(vocab_size, embed_dim, padding_idx=1) 155 | self.conv11 = nn.Conv2d(ci, kernel_num, (kernel_size[0], embed_dim)) 156 | self.conv12 = nn.Conv2d(ci, kernel_num, (kernel_size[1], embed_dim)) 157 | self.conv13 = nn.Conv2d(ci, kernel_num, (kernel_size[2], embed_dim)) 158 | self.dropout = nn.Dropout(dropout) 159 | self.fc1 = nn.Linear(len(kernel_size) * kernel_num, class_num) 160 | 161 | def init_embed(self, embed_matrix): 162 | self.embed.weight = nn.Parameter(torch.Tensor(embed_matrix)) 163 | 164 | @staticmethod 165 | def conv_and_pool(x, conv): 166 | # x: (batch, 1, sentence_length, ) 167 | x = conv(x) 168 | # x: (batch, kernel_num, H_out, 1) 169 | x = F.relu(x.squeeze(3)) 170 | # x: (batch, kernel_num, H_out) 171 | x = F.max_pool1d(x, x.size(2)).squeeze(2) 172 | # (batch, kernel_num) 173 | return x 174 | 175 | def forward(self, x): 176 | # x: (batch, sentence_length) 177 | x = self.embed(x) 178 | # x: (batch, sentence_length, embed_dim) 179 | # TODO init embed matrix with pre-trained 180 | x = x.unsqueeze(1) 181 | # x: (batch, 1, sentence_length, embed_dim) 182 | x1 = self.conv_and_pool(x, self.conv11) # (batch, kernel_num) 183 | x2 = self.conv_and_pool(x, self.conv12) # (batch, kernel_num) 184 | x3 = self.conv_and_pool(x, self.conv13) # (batch, kernel_num) 185 | x = torch.cat((x1, x2, x3), 1) # (batch, 3 * kernel_num) 186 | x = self.dropout(x) 187 | logit = F.log_softmax(self.fc1(x), dim=1) 188 | return logit 189 | 190 | def init_weight(self): 191 | for m in self.modules(): 192 | if isinstance(m, nn.Conv2d): 193 | n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels 194 | m.weight.data.normal_(0, math.sqrt(2. / n)) 195 | if m.bias is not None: 196 | m.bias.data.zero_() 197 | 198 | elif isinstance(m, nn.Linear): 199 | m.weight.data.normal_(0, 0.01) 200 | m.bias.data.zero_() 201 | 202 | def plot_acc(train_acc): 203 | sns.set(style='darkgrid') 204 | plt.figure(figsize=(10, 7)) 205 | x = list(range(len(train_acc))) 206 | plt.plot(x, train_acc, alpha=0.9, linewidth=2, label='train acc') 207 | plt.xlabel('Epoch') 208 | plt.ylabel('Acc') 209 | plt.legend(loc='best') 210 | plt.savefig('results/acc.png', dpi=400) 211 | 212 | def plot_loss(train_loss): 213 | sns.set(style='darkgrid') 214 | plt.figure(figsize=(10, 7)) 215 | x = list(range(len(train_loss))) 216 | plt.plot(x, train_loss, alpha=0.9, linewidth=2, label='train loss') 217 | plt.xlabel('Epoch') 218 | plt.ylabel('loss') 219 | plt.legend(loc='best') 220 | plt.savefig('results/loss.png', dpi=400) 221 | 222 | 223 | # 定义训练过程 224 | class Trainer(): 225 | 226 | 227 | def __init__(self): 228 | safeCreateDir('results/') 229 | self.device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu') 230 | self._init_data() 231 | self._init_model() 232 | 233 | def _init_data(self): 234 | data = getDataLoader(batch_size=64) 235 | self.traindl = data.traindl 236 | self.valdl = data.valdl 237 | self.testdl = data.testdl 238 | self.num_words = data.num_words 239 | 240 | def _init_model(self): 241 | self.textCNN_param = { 242 | 'vocab_size': self.num_words, 243 | 'embed_dim': 64, 244 | 'class_num': 15, 245 | "kernel_num": 16, 246 | "kernel_size": [3, 4, 5], 247 | "dropout": 0.5, 248 | } 249 | self.net = textCNN(self.textCNN_param) 250 | self.opt = Adam(self.net.parameters(), lr=1e-4, weight_decay=5e-4) 251 | self.cri = nn.CrossEntropyLoss() 252 | 253 | def save_model(self): 254 | torch.save(self.net.state_dict(), 'saved_dict/cnn.pt') 255 | def load_model(self): 256 | self.net.load_state_dict(torch.load('saved_dict/cnn.pt')) 257 | 258 | 259 | def train(self,epochs): 260 | print('init net...') 261 | self.net.init_weight() 262 | print(self.net) 263 | patten = 'Epoch: %d [===========] cost: %.2fs; loss: %.4f; train acc: %.4f; val acc:%.4f;' 264 | train_accs = [] 265 | c_loss = [] 266 | for epoch in range(epochs): 267 | cur_preds = np.empty(0) 268 | cur_labels = np.empty(0) 269 | cur_loss = 0 270 | start = time.time() 271 | for batch, (inputs, targets) in enumerate(self.traindl): 272 | inputs = inputs.to(self.device) 273 | targets = targets.to(self.device) 274 | # lengths = lengths.to('cpu') 275 | self.net.to(self.device) 276 | 277 | pred = self.net(inputs) 278 | loss = self.cri(pred, targets) 279 | self.opt.zero_grad() 280 | loss.backward() 281 | self.opt.step() 282 | cur_preds = np.concatenate([cur_preds, pred.cpu().detach().numpy().argmax(axis=1)]) 283 | 284 | cur_labels = np.concatenate([cur_labels, targets.cpu().numpy()]) 285 | cur_loss += loss.item() 286 | # print(cur_preds) 287 | acc, precision, f1, recall = metrics(cur_preds, cur_labels) 288 | val_acc, val_precision, val_f1, val_recall = self.val() 289 | train_accs.append(acc) 290 | c_loss.append(cur_loss) 291 | end = time.time() 292 | print(patten % (epoch+1,end - start,cur_loss, acc,val_acc)) 293 | 294 | # self.save_model() 295 | plot_acc(train_accs) 296 | plot_loss(c_loss) 297 | 298 | # @torch.no_grad()中的数据不需要计算梯度,也不会进行反向传播 299 | @torch.no_grad() 300 | def val(self): 301 | self.net.eval() 302 | cur_preds = np.empty(0) 303 | cur_labels = np.empty(0) 304 | for batch, (inputs, targets) in enumerate(self.valdl): 305 | inputs = inputs.to(self.device) 306 | targets = targets.to(self.device) 307 | # lengths = lengths.to('cpu') 308 | self.net.to(self.device) 309 | 310 | pred = self.net(inputs) 311 | cur_preds = np.concatenate([cur_preds, pred.cpu().detach().numpy().argmax(axis=1)]) 312 | cur_labels = np.concatenate([cur_labels, targets.cpu().numpy()]) 313 | acc, precision, f1, recall = metrics(cur_preds, cur_labels) 314 | self.net.train() 315 | return acc, precision, f1, recall 316 | @torch.no_grad() 317 | def test(self): 318 | print("test ...") 319 | self.load_model() 320 | patten = 'test acc: %.4f precision: %.4f recall: %.4f f1: %.4f ' 321 | self.net.eval() 322 | cur_preds = np.empty(0) 323 | cur_labels = np.empty(0) 324 | for batch, (inputs, targets) in enumerate(self.testdl): 325 | inputs = inputs.to(self.device) 326 | targets = targets.to(self.device) 327 | # lengths = lengths.to('cpu') 328 | self.net.to(self.device) 329 | # print(self.device) 330 | pred = self.net(inputs) 331 | cur_preds = np.concatenate([cur_preds, pred.cpu().detach().numpy().argmax(axis=1)]) 332 | cur_labels = np.concatenate([cur_labels, targets.cpu().numpy()]) 333 | acc, precision, f1, recall = metrics(cur_preds, cur_labels) 334 | cv_conf = confusion_matrix(cur_preds, cur_labels) 335 | # print(cv_conf) 336 | labels11 = ['story','culture','entertainment','sports','finance', 337 | 'house','car','edu','tech','military', 338 | 'travel','world','stock','agriculture','game'] 339 | # display_cm(cv_conf,labels11) 340 | fig, ax = plt.subplots(figsize=(15,15)) 341 | disp = ConfusionMatrixDisplay(confusion_matrix=cv_conf, display_labels=labels11) 342 | disp.plot(cmap="Blues", values_format='',ax=ax) 343 | plt.savefig("results/ConfusionMatrix.png", dpi=400) 344 | self.net.train() 345 | print(patten % (acc,precision,recall,f1)) 346 | 347 | 348 | 349 | if __name__ == "__main__": 350 | getFormatData() # 数据预处理:数据清洗和词向量 351 | trainer=Trainer() 352 | trainer.train(epochs=30) #数据训练 353 | trainer.test() # 测试 354 | -------------------------------------------------------------------------------- /TextCNN/results/ConfusionMatrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frank330/Text_Classification/e7c75c24f33c5c2c6621b6abb4c74c2546f3fc22/TextCNN/results/ConfusionMatrix.png -------------------------------------------------------------------------------- /TextCNN/results/acc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frank330/Text_Classification/e7c75c24f33c5c2c6621b6abb4c74c2546f3fc22/TextCNN/results/acc.png -------------------------------------------------------------------------------- /TextCNN/results/loss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frank330/Text_Classification/e7c75c24f33c5c2c6621b6abb4c74c2546f3fc22/TextCNN/results/loss.png -------------------------------------------------------------------------------- /TextCNN/saved_dict/file.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frank330/Text_Classification/e7c75c24f33c5c2c6621b6abb4c74c2546f3fc22/TextCNN/saved_dict/file.md -------------------------------------------------------------------------------- /TextCNN/utils.py: -------------------------------------------------------------------------------- 1 | from sklearn.metrics import precision_score, accuracy_score, f1_score, recall_score 2 | import time 3 | import os 4 | 5 | 6 | def metrics(pred, real): 7 | precision = precision_score(pred, real, average='micro') 8 | acc = accuracy_score(pred, real) 9 | f1 = f1_score(pred, real, average='micro') 10 | recall = recall_score(pred, real, average='micro') 11 | return acc, precision, f1, recall 12 | 13 | 14 | def cost(fun): 15 | def use_time(*arg, **args): 16 | start = time.time() 17 | fun(*arg, **args) 18 | end = time.time() 19 | print('cost: %.2s' % (end-start)) 20 | 21 | return use_time 22 | 23 | 24 | def safeCreateDir(path): 25 | if not os.path.exists(path): 26 | os.mkdir(path) --------------------------------------------------------------------------------