├── Config ├── config ├── dict ├── stopwords_chs ├── stopwords_eng └── user_dict ├── README.md ├── SendMail.py ├── TextFilter.py ├── TextFliter.bat └── 敏感词库大全.txt /Config/config: -------------------------------------------------------------------------------- 1 | # 服务器配置 2 | host = "localhost" 3 | port = 27017 4 | name = "" 5 | password = "" 6 | database = "textfilter" 7 | collection = "cn_live_news_collects" 8 | content_column = "content" 9 | time_column = "createdtime" 10 | 11 | # 对应语言 12 | #lag = "eng" 13 | lag = "chs" 14 | 15 | # 数目 16 | Limit_Number = 100 17 | 18 | # 发送邮件 19 | smtp_server = "smtp.163.com" 20 | from_addr = "xxxx@163.com" 21 | passwd = "xxxx" 22 | to_addr = ["xxxx@163.com"] 23 | # to_addr = ["xxxx@163.com", "xxxx@163.com"] 24 | SendMailFlag = "Yes" # "No" 25 | -------------------------------------------------------------------------------- /Config/stopwords_chs: -------------------------------------------------------------------------------- 1 | 阿扁推翻 2 | 阿宾 3 | 阿賓 4 | 挨了一炮 5 | 爱液横流 6 | 安街逆 7 | 安局办公楼 8 | 安局豪华 9 | 安门事 10 | 安眠藥 11 | 案的准确 12 | 八九民 13 | 八九学 14 | 八九政治 15 | 把病人整 16 | 把邓小平 17 | 把学生整 18 | 罢工门 19 | 白黄牙签 20 | 败培训 21 | 办本科 22 | 办理本科 23 | 办理各种 24 | 办理票据 25 | 办理文凭 26 | 办理真实 27 | 办理证书 28 | 办理资格 29 | 办文凭 30 | 办怔 31 | 办证 32 | 半刺刀 33 | 辦毕业 34 | 辦證 35 | 谤罪获刑 36 | 磅解码器 37 | 磅遥控器 38 | 宝在甘肃修 39 | 保过答案 40 | 报复执法 41 | 爆发骚 42 | 北省委门 43 | 被打死 44 | 被指抄袭 45 | 被中共 46 | 本公司担 47 | 本无码 48 | 毕业證 49 | 变牌绝 50 | 辩词与梦 51 | 冰毒 52 | 冰火毒 53 | 冰火佳 54 | 冰火九重 55 | 冰火漫 56 | 冰淫传 57 | 冰在火上 58 | 波推龙 59 | 博彩娱 60 | 博会暂停 61 | 博园区伪 62 | 不查都 63 | 不查全 64 | 不思四化 65 | 布卖淫女 66 | 部忙组阁 67 | 部是这样 68 | 才知道只生 69 | 财众科技 70 | 采花堂 71 | 踩踏事 72 | 苍山兰 73 | 苍蝇水 74 | 藏春阁 75 | 藏獨 76 | 操了嫂 77 | 操嫂子 78 | 策没有不 79 | 插屁屁 80 | 察象蚂 81 | 拆迁灭 82 | 车牌隐 83 | 成人电 84 | 成人卡通 85 | 成人聊 86 | 成人片 87 | 成人视 88 | 成人图 89 | 成人文 90 | 成人小 91 | 城管灭 92 | 惩公安 93 | 惩贪难 94 | 充气娃 95 | 冲凉死 96 | 抽着大中 97 | 抽着芙蓉 98 | 出成绩付 99 | 出售发票 100 | 出售军 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 | -------------------------------------------------------------------------------- /Config/stopwords_eng: -------------------------------------------------------------------------------- 1 | a 2 | the 3 | -------------------------------------------------------------------------------- /Config/user_dict: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lining0806/TextFilter/3d5005d2137c2e02ae950730af85123660f4d547/Config/user_dict -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 敏感词过滤系统 2 | 3 | ### **更多详见[TextMining](https://github.com/lining0806/TextMining)** 4 | 5 | *** 6 | 7 | **Ubuntu Linux下环境搭建:** 8 | 9 | sudo apt-get install python-pip 10 | pip install nltk 11 | pip install jieba 12 | pip install pymongo 13 | 14 | **Config下config文件:** 15 | * 可以进行服务器配置,针对数据库中制订collection的不同字段column, 16 | * 可以选择语言(中文,英文), 17 | * 可以设置要过滤的文章数目,时间默认从最近前推 18 | * 添加邮件通知系统,SendMailFlag = "Yes" # "No" 一行可以修改是否接收邮件通知 19 | * 结果:字段filter_status为1表示通过过滤,为0表示不通过过滤 20 | 21 | **stopwords_chs和stopwords_eng为过滤词黑名单** 22 | * 可以随时添加要过滤的单词,一行一个 23 | * 如果添加的过滤词无法正确被jieba分词,则同样方法将该需要过滤的词及词频加入到主词典dict文件中或者用户词典user_dict,一行一个(词频也可省略) 24 | * 如stopwords_chs,加入了“阿尼玛”换行, 在dict中加入“阿尼玛 3”,3表示词频,词频越大分词越准确 -------------------------------------------------------------------------------- /SendMail.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | __author__ = 'LiNing' 3 | ''' 4 | Message 5 | +- MIMEBase 6 | +- MIMEMultipart 7 | +- MIMENonMultipart 8 | +- MIMEMessage 9 | +- MIMEText 10 | +- MIMEImage 11 | ''' 12 | import os 13 | from email import encoders 14 | from email.header import Header 15 | from email.mime.base import MIMEBase 16 | from email.mime.multipart import MIMEMultipart 17 | from email.mime.message import MIMEMessage 18 | from email.mime.text import MIMEText 19 | from email.mime.image import MIMEImage 20 | from email.utils import parseaddr, formataddr, formatdate 21 | import smtplib 22 | 23 | def _format_addr(s): 24 | name, addr = parseaddr(s) 25 | return formataddr( 26 | (Header(name, 'utf-8').encode(), 27 | addr.encode('utf-8') if isinstance(addr, unicode) else addr) 28 | ) 29 | 30 | def send_mail(smtp_server, from_addr, passwd, to_addr, subject, text, files=[]): 31 | ## -------------------------------------------------------------------------------------- 32 | assert type(to_addr) == list 33 | assert type(files) == list 34 | 35 | ## -------------------------------------------------------------------------------------- 36 | '''plain or html''' 37 | msg = MIMEText(text, 'plain', 'utf-8') 38 | # msg = MIMEText(''+'

'+text+'

'+'', 'html', 'utf-8') 39 | ## -------------------------------------------------------------------------------------- 40 | '''plain and html''' 41 | # msg = MIMEMultipart('alternative') 42 | # msg.attach(MIMEText(text, 'plain', 'utf-8')) 43 | # msg.attach(MIMEText(''+'

'+text+'

'+'', 'html', 'utf-8')) # 附件不嵌入正文 44 | # # msg.attach(MIMEText(''+'

'+text+'

'+'

'+'', 'html', 'utf-8')) # 附件嵌入正文 45 | # for file in files: 46 | # part = MIMEBase('application', 'octet-stream') # 'octet-stream': binary data 47 | # part.set_payload(open(file, 'rb').read()) 48 | # encoders.encode_base64(part) # 用Base64编码 49 | # part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file)) 50 | # part.add_header('Content-ID', '<0>') 51 | # part.add_header('X-Attachment-Id', '0') 52 | # msg.attach(part) # 添加到MIMEMultipart 53 | 54 | msg['From'] = _format_addr('Me <%s>' % from_addr) 55 | msg['To'] = _format_addr('You <%s>' % ','.join(to_addr)) 56 | msg['Subject'] = Header(subject, 'utf-8').encode() 57 | msg['Date'] = formatdate(localtime=True) 58 | 59 | ## -------------------------------------------------------------------------------------- 60 | ## 基于SSL安全连接,Gmail提供的SMTP服务必须要加密传输 61 | server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25 62 | # server.starttls() # 创建安全连接,对于'smtp.gmail.com',端口587 63 | server.set_debuglevel(1) # 打印信息 64 | server.login(from_addr, passwd) 65 | server.sendmail(from_addr, to_addr, msg.as_string()) 66 | server.quit() 67 | 68 | if __name__ == '__main__': 69 | smtp_server = 'smtp.163.com' 70 | from_addr = 'xxxx@163.com' 71 | passwd = 'xxxx' 72 | to_addr = ['xxxx@163.com'] 73 | subject = 'Hello...' 74 | text = 'Hello, send by Python...' 75 | files = [] 76 | send_mail(smtp_server, from_addr, passwd, to_addr, subject, text, files) 77 | -------------------------------------------------------------------------------- /TextFilter.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import division 3 | __author__ = 'LiNing' 4 | 5 | import os 6 | import re 7 | import nltk 8 | import jieba 9 | import jieba.analyse 10 | import pymongo 11 | import datetime 12 | # dict_path = "./Config/dict" 13 | # if os.path.exists(dict_path): 14 | # jieba.set_dictionary(dict_path) # 主词典 15 | userdict_path = "./Config/user_dict" 16 | if os.path.exists(userdict_path): 17 | jieba.load_userdict(userdict_path) # 用户词典 18 | 19 | from SendMail import send_mail 20 | 21 | 22 | def MakeStopWordsList(stopwords_file): 23 | fp = open(stopwords_file, 'r') # stopwords_file最后有一个空行,可以添加或删除单词 24 | stopwords = [] 25 | for line in fp.readlines(): 26 | stopword = line.strip().decode("utf-8") # 由utf-8编码转换为unicode编码 27 | if len(stopword)>0: 28 | stopwords.append(stopword) 29 | fp.close() 30 | # 去重 31 | stopwords_list = sorted(list(set(stopwords))) 32 | return stopwords_list 33 | 34 | def TextSeg(text, lag): 35 | if lag == "eng": # 英文情况 36 | word_list = nltk.word_tokenize(text) 37 | elif lag == "chs": # 中文情况 38 | #------------------------------------------------------------------------------- 39 | # jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数,不支持windows 40 | word_cut = jieba.cut(text, cut_all=False) # 精确模式,返回的结构是一个可迭代的genertor 41 | word_list = list(word_cut) # genertor转化为list,每个词unicode格式 42 | # jieba.disable_parallel() # 关闭并行分词模式 43 | #------------------------------------------------------------------------------- 44 | # # jieba关键词提取 45 | # tags = jieba.analyse.extract_tags(text, topK=10) 46 | # # tags = jieba.analyse.textrank(text, topK=10) 47 | # print tags 48 | #------------------------------------------------------------------------------- 49 | return word_list 50 | 51 | class MongoDBIO(object): 52 | # 申明相关的属性 53 | def __init__(self, host, port, name, password, database, collection): 54 | self.host = host 55 | self.port = port 56 | self.name = name 57 | self.password = password 58 | self.database = database 59 | self.collection = collection 60 | 61 | # 连接数据库,db和posts为数据库和集合的游标 62 | def Connection(self): 63 | ## -------------------------------------------------------------------------------- 64 | # # connection = pymongo.Connection() # 连接本地数据库 65 | # connection = pymongo.Connection(host=self.host, port=self.port) 66 | # db = connection[self.database] 67 | # if len(self.name)>0: 68 | # db.authenticate(name=self.name, password=self.password) # 验证用户名密码 69 | # else: 70 | # pass 71 | ## -------------------------------------------------------------------------------- 72 | # mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 73 | if len(self.name)>0: 74 | uri = "mongodb://%s:%s@%s:%d/%s" % (self.name, self.password, self.host, self.port, self.database) 75 | else: 76 | uri = "mongodb://%s:%d/%s" % (self.host, self.port, self.database) 77 | # print uri 78 | client = pymongo.MongoClient(uri) 79 | db = client.get_default_database() 80 | ## -------------------------------------------------------------------------------- 81 | print "Database:", db.name 82 | print db.collection_names() # 查询所有集合 83 | posts = db[self.collection] 84 | print "Collection:", posts.name 85 | print "Count:", posts.count() 86 | 87 | return posts 88 | 89 | def DataFliter(host, port, name, password, database, collection, Limit_Number, lag, stopwords_set, content_column, time_column, SendMailConfig=[]): 90 | print "......TextFilter System by LiNing......" 91 | print "filter_status equals 1 means OK, otherwise 0" 92 | posts = MongoDBIO(host, port, name, password, database, collection).Connection() 93 | 94 | #------------------------------------------------------------------------------- 95 | # 以下几行根据实际情况修改 96 | 97 | #### 查询操作 98 | id_dict = {"0":[], "1":[]} # 1-表示通过,0-表示不通过 99 | 100 | starttime = datetime.datetime(2015, 1, 1) 101 | endtime = datetime.datetime.now() 102 | for post in posts.find({ 103 | time_column:{"$gte":starttime, "$lte":endtime}, 104 | content_column:{"$exists":1}, 105 | # "filter_status":{"$nin":[0, 1]} # 此处可注释 106 | },).sort(time_column, pymongo.DESCENDING).limit(Limit_Number): 107 | # print post 108 | if post[content_column] is not None: 109 | # print post[content_column] 110 | textseg_list = TextSeg(post[content_column], lag) 111 | testseg_set = set(textseg_list) 112 | if stopwords_set & testseg_set: 113 | # id_dict["0"].append(post["_id"]) 114 | id_dict["0"].append((post["_id"], post[content_column])) 115 | 116 | else: 117 | id_dict["1"].append(post["_id"]) 118 | else: 119 | print '{"_id":ObjectId("%s")} None' % post["_id"] 120 | 121 | #### 更新操作 122 | text = '' 123 | for id_content in id_dict["0"]: 124 | posts.update({"_id":id_content[0]}, {"$set":{"filter_status":0}}) 125 | id_content_string = '{"_id":ObjectId("%s")} 0\n%s\n' % (id_content[0], id_content[1]) 126 | print id_content_string, 127 | text += id_content_string 128 | # text = text.join(id_content_string) # 错误!join是循环用text连接id_content_string的字符 129 | if len(SendMailConfig) == 5: 130 | smtp_server, from_addr, passwd, to_addr, SendMailFlag = SendMailConfig 131 | #------------------------------------------------------------------------------- 132 | # smtp_server = 'smtp.163.com' 133 | # from_addr = 'xxxx@163.com' 134 | # passwd = 'xxxx' 135 | # to_addr = ['xxxx@163.com'] 136 | if SendMailFlag == 'Yes' and text != '': 137 | #------------------------------------------------------------------------------- 138 | subject = 'Waring...' 139 | files = [] 140 | send_mail(smtp_server, from_addr, passwd, to_addr, subject, text, files) 141 | for id in id_dict["1"]: 142 | posts.update({"_id":id}, {"$set":{"filter_status":1}}) 143 | print '{"_id":ObjectId("%s")} 1' % id 144 | #------------------------------------------------------------------------------- 145 | 146 | 147 | if __name__ == '__main__': 148 | 149 | #------------------------------------------------------------------------------- 150 | try: 151 | with open("./Config/config", "r") as fp: 152 | lines = fp.readlines() # list 153 | except Exception as e: 154 | print e 155 | exit() 156 | for line in lines: 157 | if re.match(r'^lag', line): 158 | lag = str(re.search(r'"(.*?)"', line).group(1)) # 从任意位置只找出第一个成功的匹配 159 | elif re.match(r'^Limit_Number', line): 160 | Limit_Number = int(re.search(r'.*?\s*=\s*(\d+?)\s', line).group(1)) 161 | elif re.match(r'^host', line): 162 | host = str(re.search(r'"(.*?)"', line).group(1)) 163 | elif re.match(r'^port', line): 164 | port = int(re.search(r'.*?\s*=\s*(\d+?)\s', line).group(1)) 165 | elif re.match(r'^name', line): 166 | name = str(re.search(r'"(.*?)"', line).group(1)) 167 | elif re.match(r'^password', line): 168 | password = str(re.search(r'"(.*?)"', line).group(1)) 169 | elif re.match(r'^database', line): 170 | database = str(re.search(r'"(.*?)"', line).group(1)) 171 | elif re.match(r'^collection', line): 172 | collection = str(re.search(r'"(.*?)"', line).group(1)) 173 | elif re.match(r'^content_column', line): 174 | content_column = str(re.search(r'"(.*?)"', line).group(1)) 175 | elif re.match(r'^time_column', line): 176 | time_column = str(re.search(r'"(.*?)"', line).group(1)) 177 | elif re.match(r'^smtp_server', line): 178 | smtp_server = str(re.search(r'"(.*?)"', line).group(1)) 179 | elif re.match(r'^from_addr', line): 180 | from_addr = str(re.search(r'"(.*?)"', line).group(1)) 181 | elif re.match(r'^passwd', line): 182 | passwd = str(re.search(r'"(.*?)"', line).group(1)) 183 | elif re.match(r'^to_addr', line): 184 | to_addr = re.split(r',', re.search(r'\[(.*?)\]', line).group(1).replace(' ', '').replace('"', '')) 185 | # print to_addr 186 | elif re.match(r'^SendMailFlag', line): 187 | SendMailFlag = str(re.search(r'"(.*?)"', line).group(1)) 188 | 189 | stopwords_file = "./Config/stopwords_"+lag 190 | stopwords_list = MakeStopWordsList(stopwords_file) 191 | stopwords_set = set(stopwords_list) 192 | 193 | #------------------------------------------------------------------------------- 194 | SendMailConfig = (smtp_server, from_addr, passwd, to_addr, SendMailFlag) 195 | DataFliter(host, port, name, password, database, collection, Limit_Number, lag, stopwords_set, content_column, time_column, SendMailConfig) 196 | -------------------------------------------------------------------------------- /TextFliter.bat: -------------------------------------------------------------------------------- 1 | python TextFilter.py 2 | pause -------------------------------------------------------------------------------- /敏感词库大全.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lining0806/TextFilter/3d5005d2137c2e02ae950730af85123660f4d547/敏感词库大全.txt --------------------------------------------------------------------------------