目前使用 re 去做,样本越来越大,效率逐渐降低很多
![]() | 1 Mohanson 2022-05-10 17:25:14 +08:00 一般用字典树 |
2 ila 2022-05-10 17:37:58 +08:00 via Android 如果是你负责,建议用 bat 的 API 。 |
![]() | 3 shuax 2022-05-10 17:55:35 +08:00 Trie Tree |
4 demonps OP re + trie tree 因为要记录命中的敏感词,需要分组捕获。目前一个场景 build 出来的 pattern 大概有 300w 长,匹配一次感觉快要 1s ,用 bat 的 api 加上请求时间都比本地快好几倍。。。 |
7 fengjianxinghun 2022-05-10 18:18:33 +08:00 hyperscan |
![]() | 8 documentzhangx66 2022-05-10 19:30:14 +08:00 1.目前主流的做法是,先分词,然后再去匹配敏感词列表。优点是性能高,速度快。缺点是匹配覆盖率低。 2.但如果要保证匹配覆盖率,运算量必然超大,因为不能分词后再去匹配,而是反过来要用词库来匹配现有内容。可优化的就只有在匹配过程中对字典树进行剪枝了。 |
![]() | 9 ipwx 2022-05-10 19:50:57 +08:00 |
![]() | 10 LeegoYih 2022-05-10 19:52:31 +08:00 我之前写了个 AC 自动机用来匹配和过滤关键词,现在生产环境大概有 1 亿个关键词,性能非常好。 不过只有 Go 和 Java 版本,看看能不能帮到你,代码实现很简单,照着直接“翻译”成 Python 应该没啥问题。 Go: https://github.com/yihleego/trie Java: https://github.com/yihleego/trie4j |
12 acehowxx 2022-05-10 20:34:35 +08:00 via Android 在意性能可以用布隆过滤器 |
13 demonps OP @fengjianxinghun 这个感觉有点子臃肿,好多依赖 |
14 demonps OP @documentzhangx66 分词这个方向目前还没考虑到,居家办公比较闲,研究研究 |
![]() | 16 documentzhangx66 2022-05-10 21:53:39 +08:00 @demonps 不用研究,Python 有现成的,叫 结巴分词。 |
17 raycool 2022-05-10 22:22:11 +08:00 这应该就是 AC 状态自动机干的事吧 |
18 t2jk4000 2022-05-10 22:30:46 +08:00 |
![]() | 19 TiePPT PRO flashtext |
20 paopjian 2022-05-11 01:12:57 +08:00 |
22 fengjianxinghun 2022-05-11 10:05:47 +08:00 @demonps 这个就是性能最好的,比什么 AC 字典树都快,安全防火墙都用这个代替以前 AC 了 |
23 demonps OP @fengjianxinghun 我去研究下这个 |
24 demonps OP @documentzhangx66 o..o |
![]() | 26 gitgabige 2022-5-11 11:32:08 +08:00 哎, 作孽啊 |