分享:自媒体人必备工具——微信公众号文章搜索下载助手,1.4.4版本更新
优采云 发布时间: 2022-11-02 03:30分享:自媒体人必备工具——微信公众号文章搜索下载助手,1.4.4版本更新
微信公众号文章搜索助手V1.4.4版本更新上线
本次重大更新内容:
1.修复文章中大量下载失败的问题。该版本开始使用本地服务下载,提高下载速度,大大减少下载失败的问题;
2.修复文章摘要显示时间格式错误;
3. 从列表框中删除拖放多选。该功能偶有重大BUG,暂时下线;
4.新增文章搜索汇总关键词过滤,结果更准确;
5、优化了选择公众号的卡顿问题;
6.优化摘要显示,更加美观直观;
7.增加FAQ部分,详见软件界面;
新版下载地址:
做 自媒体,没有 文章 材料?
各种福利活动,没有最新消息?
想看*敏*感*词*者联盟4这样的最新电影却没有资源?
想要搜索任何网络资源,但没有工具?
它在线
微信公众号文章搜索助手,关键词一键搜索所有微信公众号文章,可采集指定所有公众号历史海量分布文章,无论你是在做自媒体找各种文章素材,还是做活动找各种新闻报道,还是找各种影视资源等等,都能满足你,什么你要搜索,而且功能非常非常非常强大,废话不多说,先看看具体介绍吧!
注:本软件为电脑软件,手机无法使用。软件由编辑器开发,不用担心病毒。如果360等病毒上报软件上报病毒,可以加信任。
★功能介绍★
1、通过关键词搜索所有微信公众号文章,支持按指定时间段搜索相关内容,支持文章内容以word、pdf、excel格式导出;
2. 一键采集指定公众号所有历史文章,支持文章批量导出word和pdf格式的内容(文章原版排版,正文+图片);
3、关键词搜索相关的文章内容可按发布时间、标题、公众号排序,支持标题去重,搜索结果二次搜索;
4、关键词搜索文章支持通过公众号和关键词屏蔽,所有不想看到的内容都会被过滤掉,支持拖拽选择,一键拦截;
5.内置自动验证码打印,以及IP自动切换功能,解放双手,操作更方便;
6、文章内容页面支持关键词搜索,快速查找是否是你需要的文章;
7、保存搜索关键词历史,搜索再搜索关键词,直接从搜索历史中拉出关键词,输入更方便;
8.内置大量快捷键,勾选文章,搜索内容更方便人性化;
9.搜索记录实时保存,方便打开软件加载之前搜索到的内容,更*敏*感*词*,等你下载体验;
如果觉得软件不错,一定要分享给小编
爱你,好吧
◆图片介绍◆
■下载地址■
哪里可以下载这么好的东西?
浏览器输入网址下载
或者百度直接搜索微信公众号文章搜索助手V1.4.2
遇到问题可以识别发二维码加作者微信
失望:小怡同学被骂到清空社交平台?各大平台连敏感词库都没有吗?
一个没有敏感词的平台
近日,一位加拿大籍说唱歌手被曝私生活不谨慎,极有可能参与勾引*敏*感*词*少女成为说唱歌手。
胖虎
当然,至于是否属实,其实一个人是不是海王,在微信和聊天记录中都能清楚的记住。在刑事*敏*感*词*方面,TX可以完整查看所有历史记录。腾讯视频与一条电鳗解约也未必是空穴来风,毕竟利益相关。
但我在整个过程中发现了两个非常值得注意的点:
(1) 绯闻女友小艺被骂清空所有社交平台。作为一个吃瓜大户,X博客只会被服务器瘫痪,不知道敏感词过滤?
(2)举报人杜美珠收了很多雪| 鱼腥味的照片。天天用人工智能的平台不是没有过滤功能吗?
当然,我对人工智能一无所知。
但是对于敏感词,我最近写了一个小工具。各大平台需要的话,已经开源了,欢迎大家自己拿。
至少你可以像下面这样对漂亮的中文单词进行脱敏:
你 XXX 的,我 XXX 你 XXX,你 XXXX,XXX!!XXX!
创意目的
基于DFA算法,当前敏感词库内容为收录 6W+(源文件为18W+,删除后)。
后期将继续对敏感词库进行优化和补充,进一步提升算法性能。
希望敏感词的分类能细化。感觉工作量比较大,暂时没有进行。
我们在这里谈谈视觉。愿景是成为第一个易于使用的敏感词工具。
当然,第一个总是空的。
虚空之子
特性 快速入门 准备 Maven 介绍
com.github.houbb
sensitive-word
0.0.15
api概览
SensitiveWordHelper 是一个敏感词的工具类。核心方法如下:
方法
范围
返回值
阐明
收录(字符串)
要验证的字符串
布尔值
验证字符串是否收录敏感词
查找所有(字符串)
要验证的字符串
字符串列表
返回字符串中的所有敏感词
替换(字符串,字符)
用指定的字符替换敏感词
细绳
返回脱敏后的字符串
替换(字符串)
使用 * 替换敏感词
细绳
返回脱敏后的字符串
使用示例
查看所有测试用例的 SensitiveWordHelperTest
判断是否收录敏感词
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
Assert.assertTrue(SensitiveWordHelper.contains(text));
返回第一个敏感词
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
String word = SensitiveWordHelper.findFirst(text);
Assert.assertEquals("敏感词1", word);
返回所有敏感词
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
List wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[敏感词1, 敏感词2, 敏感词3]", wordList.toString());
默认替换策略
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
String result = SensitiveWordHelper.replace(text);
Assert.assertEquals("****迎风飘扬,***的画像屹立在***前。", result);
指定要替换的内容
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
String result = SensitiveWordHelper.replace(text, '0');
Assert.assertEquals("0000迎风飘扬,000的画像屹立在000前。", result);
更*敏*感*词*
以下功能主要针对处理各种情况,尽可能提高敏感词的命中率。
这是一场漫长的攻守战。
忽略大小写
final String text = "fuCK the bad words.";
String word = SensitiveWordHelper.findFirst(text);
Assert.assertEquals("fuCK", word);
忽略半角
final String text = "fuck the bad words.";
String word = SensitiveWordHelper.findFirst(text);
Assert.assertEquals("fuck", word);
忽略数字的拼写
常见数字形式的转换在这里实现。
final String text = "这个是我的微信:9⓿二肆⁹₈③⑸⒋➃㈤㊄";
List wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[9⓿二肆⁹₈③⑸⒋➃㈤㊄]", wordList.toString());
忽略繁体和简体
final String text = "我爱我的祖国和五星紅旗。";
List wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[五星紅旗]", wordList.toString());
忽略英文写作格式
final String text = "Ⓕⓤc⒦ the bad words";
List wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[Ⓕⓤc⒦]", wordList.toString());
忽略重复的单词
final String text = "ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦ the bad words";
List wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦]", wordList.toString());
邮箱检测
final String text = "楼主好人,邮箱 sensitiveword@xx.com";
List wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[sensitiveword@xx.com]", wordList.toString());
功能配置说明
以上特性默认开启,有时业务需要灵活定义相关配置特性。
所以 v0.0.14 开启了属性配置。
配置方法
为了让使用更加优雅,使用fluent-api统一定义。
用户可以使用 SensitiveWordBs 定义如下:
SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
.ignoreCase(true)
.ignoreWidth(true)
.ignoreNumStyle(true)
.ignoreChineseStyle(true)
.ignoreEnglishStyle(true)
.ignoreRepeat(true)
.enableNumCheck(true)
.enableEmailCheck(true)
.enableUrlCheck(true)
.init();
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
Assert.assertTrue(wordBs.contains(text));
配置说明
各配置说明如下:
序列号
方法
阐明
1
忽略大小写
忽略大小写
2
忽略宽度
忽略半角
3
忽略NumStyle
忽略数字的拼写
4
忽略中国风
忽略中文书写格式
5
忽略EnglishStyle
忽略英文写作格式
6
忽略重复
忽略重复的单词
7
enableNumCheck
是否开启数字检测。默认情况下,连续 8 个数字被视为敏感词
8
启用电子邮件检查
是 已启用邮箱检测
9
启用网址检查
是否开启链路检测
动态加载(用户自定义)场景描述
有时候我们想把敏感词的加载设计成动态的,比如控制台修改,然后实时生效。
v0.0.13 支持此功能。
接口说明
为了实现此功能并与以前的功能兼容,我们定义了两个接口。
拒绝
界面如下,你可以自定义自己的实现。
返回的列表,表明该词是敏感词。
/**
* 拒绝出现的数据-返回的内容被当做是敏感词
* @author binbin.hou
* @since 0.0.13
*/
public interface IWordDeny {
/**
* 获取结果
* @return 结果
* @since 0.0.13
*/
List deny();
}
例如:
public class MyWordDeny implements IWordDeny {
@Override
public List deny() {
return Arrays.asList("我的自定义敏感词");
}
}
允许
界面如下,你可以自定义自己的实现。
返回的列表,表明该词不是敏感词。
/**
* 允许的内容-返回的内容不被当做敏感词
* @author binbin.hou
* @since 0.0.13
*/
public interface IWordAllow {
/**
* 获取结果
* @return 结果
* @since 0.0.13
*/
List allow();
}
喜欢:
public class MyWordAllow implements IWordAllow {
@Override
public List allow() {
return Arrays.asList("敏感词1");
}
}
<p>
</p>
配置使用
接口自定义后,当然需要指定才能生效。
为了让使用更加优雅,我们设计了引导类 SensitiveWordBs。
wordDeny() 可以指定敏感词,wordAllow() 可以指定非敏感词,init() 可以初始化敏感词字典。
系统默认配置
SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
.wordDeny(WordDenys.system())
.wordAllow(WordAllows.system())
.init();
final String text = "敏感词1迎风飘扬,敏感词2的画像屹立在敏感词3前。";
Assert.assertTrue(wordBs.contains(text));
注意:init() 构造敏感词 DFA 比较耗时。一般建议在应用初始化时只初始化一次。而不是重复初始化!
指定您自己的实现
我们可以按如下方式测试我们的自定义实现:
String text = "这是一个测试,我的自定义敏感词。";
SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
.wordDeny(new MyWordDeny())
.wordAllow(new MyWordAllow())
.init();
Assert.assertEquals("[我的自定义敏感词]", wordBs.findAll(text).toString());
这里只有我自定义的敏感词是敏感词,test不是敏感词。
当然我们这里所有的自定义实现都是用的,一般推荐使用系统默认配置+自定义配置。
可以使用以下方法。
同时配置多个
WordDenys.chains() 方法,它将多个实现组合到同一个 IWordDeny 中。
WordAllows.chains() 方法,它将多个实现组合到同一个 IWordAllow 中。
例子:
String text = "这是一个测试。我的自定义敏感词。";
IWordDeny wordDeny = WordDenys.chains(WordDenys.system(), new MyWordDeny());
IWordAllow wordAllow = WordAllows.chains(WordAllows.system(), new MyWordAllow());
SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
.wordDeny(wordDeny)
.wordAllow(wordAllow)
.init();
Assert.assertEquals("[我的自定义敏感词]", wordBs.findAll(text).toString());
此处使用系统默认配置和自定义配置。
spring 集成背景
在实际使用中,比如可以修改页面配置,然后实时生效。
数据存储在数据库中,下面是伪代码示例,可以参考SpringSensitiveWordConfig.java
要求,版本 v0.0.15 及更高版本。
自定义数据源
简化的伪代码如下,数据的来源是数据库。
MyDdWordAllow 和 MyDdWordDeny 是基于数据库源的自定义实现类。
@Configuration
public class SpringSensitiveWordConfig {
@Autowired
private MyDdWordAllow myDdWordAllow;
@Autowired
private MyDdWordDeny myDdWordDeny;
/**
* 初始化引导类
* @return 初始化引导类
* @since 1.0.0
*/
@Bean
public SensitiveWordBs sensitiveWordBs() {
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
.wordAllow(WordAllows.chains(WordAllows.system(), myDdWordAllow))
.wordDeny(myDdWordDeny)
// 各种其他配置
.init();
return sensitiveWordBs;
}
}
敏感词库的初始化非常耗时。建议在程序启动时进行 init 初始化。
动态变化
为了保证敏感词的修改能够实时生效,保证界面尽可能的简化,这里没有新的添加/删除方法。
而是在调用sensitiveWordBs.init()时,根据IWordDeny+IWordAllow重建敏感词库。
由于初始化可能需要较长时间(秒级),所有优化在init未完成时不会影响旧词库功能,完成后以新词库功能为准。
@Component
public class SensitiveWordService {
@Autowired
private SensitiveWordBs sensitiveWordBs;
/**
* 更新词库
*
* 每次数据库的信息发生变化之后,首先调用更新数据库敏感词库的方法。
* 如果需要生效,则调用这个方法。
*
* 说明:重新初始化不影响旧的方法使用。初始化完成后,会以新的为准。
*/
public void refresh() {
// 每次数据库的信息发生变化之后,首先调用更新数据库敏感词库的方法,然后调用这个方法。
sensitiveWordBs.init();
}
}
如上,可以主动触发一个初始化的sensitiveWordBs.init();当数据库词库发生变化,词库需要生效时。
其他用法保持不变,无需重新启动应用程序。
冠希哥微微一笑,想要做事,必须先做人。
关西阁
延伸阅读
敏感词工具实现思路
DFA算法解释
敏感词库优化过程
停止单词思考
概括
再次,我们用法律为自己辩护,但我们绝不能让某些人娱乐一切,认为金钱可以买到一切。
值此世纪之际,决不能让祖先的血白流。
更何况是加拿大演员三无,建议*敏*感*词**敏*感*词*)