经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
v0.12.0-敏感词/脏词词标签能力进一步增强
来源:cnblogs  作者:老马啸西风  时间:2023/12/18 16:18:03  对本文有异议

拓展阅读

敏感词工具实现思路

DFA 算法讲解

敏感词库优化流程

java 如何实现开箱即用的敏感词控台服务?

各大平台连敏感词库都没有的吗?

v0.10.0-脏词分类标签初步支持

v0.11.0-敏感词新特性:忽略无意义的字符,词标签字典

v0.12.0-敏感词/脏词词标签能力进一步增强

在这里插入图片描述

敏感词标签

说明

有时候我们希望对敏感词加一个分类标签:比如社情、暴/力等等。

这样后续可以按照标签等进行更多特性操作,比如只处理某一类的标签。

我们在 v0.10.0 版本,开始初步支持敏感词的标签分类,不过这个方法没有和以前的方法进行整合。

让我们先做一下回顾:

入门例子

接口

这里只是一个抽象的接口,用户可以自行定义实现。比如从数据库查询等。

  1. public interface IWordTag {
  2. /**
  3. * 查询标签列表
  4. * @param word 脏词
  5. * @return 结果
  6. */
  7. Set<String> getTag(String word);
  8. }

配置文件

我们可以自定义 dict 标签文件,通过 WordTags.file() 创建一个 WordTag 实现。

  • dict_tag_test.txt
  1. 五星红旗 政-治,国家

格式如下:

  1. 敏感词 tag1,tag2

实现

具体的效果如下,在引导类设置一下即可。

默认的 wordTag 是空的。

  1. String filePath = "dict_tag_test.txt";
  2. IWordTag wordTag = WordTags.file(filePath);
  3. SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
  4. .wordTag(wordTag)
  5. .init();
  6. Assert.assertEquals("[政-治, 国家]", sensitiveWordBs.tags("五星红旗").toString());;

后续会考虑引入一个内置的标签文件策略。

IWordResultHandler 结果处理类

功能说明

IWordResultHandler 可以对敏感词的结果进行处理,允许用户自定义。

内置实现目前有如下几种:

  • WordResultHandlers.word()

只保留敏感词单词本身。

  • WordResultHandlers.raw()

保留敏感词相关信息,包含敏感词的开始和结束下标。

  • WordResultHandlers.wordTags()

同时保留单词,和对应的词标签信息。

使用实例

1)基本例子

  1. final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
  2. List<String> wordList = SensitiveWordHelper.findAll(text);
  3. Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList.toString());
  4. List<String> wordList2 = SensitiveWordHelper.findAll(text, WordResultHandlers.word());
  5. Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList2.toString());
  6. List<IWordResult> wordList3 = SensitiveWordHelper.findAll(text, WordResultHandlers.raw());
  7. Assert.assertEquals("[WordResult{startIndex=0, endIndex=4}, WordResult{startIndex=9, endIndex=12}, WordResult{startIndex=18, endIndex=21}]", wordList3.toString());
  1. wordTags 例子

我们在 dict_tag_test.txt 文件中指定对应词的标签信息。

比如:

  1. 五星红旗 政治,国家
  2. 毛主席 政治,国家,伟人
  3. 天安门 政治,国家,地址

使用方法如下:

  1. final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
  2. // 默认敏感词标签为空
  3. List<WordTagsDto> wordList1 = SensitiveWordHelper.findAll(text, WordResultHandlers.wordTags());
  4. Assert.assertEquals("[WordTagsDto{word='五星红旗', tags=[]}, WordTagsDto{word='毛主席', tags=[]}, WordTagsDto{word='天安门', tags=[]}]", wordList1.toString());
  5. List<WordTagsDto> wordList2 = SensitiveWordBs.newInstance()
  6. .wordTag(WordTags.file("dict_tag_test.txt"))
  7. .init()
  8. .findAll(text, WordResultHandlers.wordTags());
  9. Assert.assertEquals("[WordTagsDto{word='五星红旗', tags=[政治, 国家]}, WordTagsDto{word='毛主席', tags=[政治, 伟人, 国家]}, WordTagsDto{word='天安门', tags=[政治, 国家, 地址]}]", wordList2.toString());

这样就可以把此标签和我们以前的能力进行整合。

小结

敏感词标签的功能作用还是很大的,可以让我们根据不同的类别,进行不同的后续处理操作。

当然,最核心的还是对于标签数据的处理工作,具体可以参考:

v0.11.0-敏感词新特性:忽略无意义的字符,词标签

开源地址

为了便于大家学习,项目开源地址如下,欢迎 fork+star 鼓励一下老马~

sensitive-word

原文链接:https://www.cnblogs.com/houbbBlogs/p/17911445.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号