当前位置: 首页 > news >正文

写的一款简易的热点词汇记录工具

项目需要对用户提交的附件、文章、搜索框内容等做热词分析。如下图:
在这里插入图片描述
公司有大数据团队。本着不麻烦别人就不麻烦别人的原则,写了一款简易的记录工具,原理也简单,手工在业务插入锚点,用分词器分好词,排掉字母、数字、符号、敏感词。将词汇按年度累加记录到数据库中即可。代码如下:

@Component
public class HotWordHelper {private static HotWordMapper hotWordMapper;static List<Character> FILTER_CHARS = new ArrayList<>();static {String number = "123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ";char[] chars = number.toCharArray();for (char aChar : chars) {FILTER_CHARS.add(aChar);}}@Autowiredpublic ZYHotWordHelper(HotWordMapper hotWordMapper) {ZYHotWordHelper.hotWordMapper = hotWordMapper;}public static List<HotWord> loaderHotWordTen(String moduleCode) {LocalDate now = LocalDate.now();int year = now.getYear();return loaderHotWord(year, 10, moduleCode);}public static List<HotWord> loaderHotWord(int top, String moduleCode) {LocalDate now = LocalDate.now();int year = now.getYear();return loaderHotWord(year, top, moduleCode);}public static List<HotWord> loaderHotWord(int year, int top, String moduleCode) {LambdaQueryWrapper<HotWord> wrapper = Wrappers.lambdaQuery();wrapper.eq(HotWord::getRecordYear, year);wrapper.eq(HotWord::getModuleCode, moduleCode);return hotWordMapper.selectTop(wrapper, HotWord::getAppearTimes, top);}// 直接词汇,如字典之类的。public static void putDirectHotWord(String text, String moduleCode) {// 为不影响主业务速度,改成异常Runnable runnable = () -> putHotWord(true, text, moduleCode);AsyncExecutor.execute(runnable);}// 分析词汇public static void putAnalyzeHotWord(String text, String moduleCode) {// 为不影响主业务速度,改成异常Runnable runnable = () -> putHotWord(false, text, moduleCode);AsyncExecutor.execute(runnable);}// 附件public static void putAttachmentAsync(StringsField attachmentIds, String moduleCode) {if (ZYListUtils.isEmptyList(attachmentIds)) {return;}Runnable runnable = () -> doPutAttachmentAsync(attachmentIds, moduleCode);AsyncExecutor.execute(runnable);}// 解析附件private static void doPutAttachmentAsync(StringsField attachmentIds, String moduleCode) {FileInfoMapper fileInfoMapper = SpringUtils.getBean(FileInfoMapper.class);List<FileInfo> fileInfos = fileInfoMapper.selectBatchIds(attachmentIds);if (ZYListUtils.isEmptyList(fileInfos)) {return;}FileStoreService storeService= ZYSpringUtils.getBean(FileStoreService.class);List<FileWrapper> fileWrappers = ZYListUtils.list2list(fileInfos, FileInfo::toFileWrapper);for (FileWrapper fileWrapper : fileWrappers) {try (InputStream objectStream = storeService.getObjectStream(fileWrapper)) {String text = IOUtils.toString(objectStream, StandardCharsets.UTF_8);putAnalyzeHotWord(text, moduleCode);} catch (Exception e) {return;}}}private static void putHotWord(boolean isDirect, String text, String moduleCode) {if (ZYStrUtils.isAnyNull(text, moduleCode)) {return;}List<String> words = analyzerWords(isDirect, text);if (ZYListUtils.isEmptyList(words)) {return;}//  List<String> smallWordCompare = new ArrayList<>(words);words.removeIf(w -> {if (!matchLength(w)) {return true;}char[] chars = w.toCharArray();for (char aChar : chars) {// 不要数字字母if (FILTER_CHARS.contains(aChar)) {return true;}}// 存在误判,还是不用这段代码/*      for (String compareWord : smallWordCompare) {if (!w.equals(compareWord) && compareWord.contains(w)) {return true;}}
*/return false;});Map<String, Integer> wordCount = ZYMapUtils.countField(words, w -> w);LocalDate now = LocalDate.now();int year = now.getYear();LambdaQueryWrapper<HotWord> wrapper = Wrappers.lambdaQuery();wrapper.in(HotWord::getHotWord, words);wrapper.eq(HotWord::getRecordYear, year);wrapper.eq(HotWord::getModuleCode, moduleCode);List<HotWord> existsWords = hotWordMapper.selectList(wrapper);Map<String, HotWord> wordIdContainer = ZYListUtils.groupModel(existsWords, HotWord::getHotWord);List<HotWord> addHotWords = new ArrayList<>();List<HotWord> editHotWords = new ArrayList<>();wordCount.forEach((w, times) -> {HotWord hotWord = wordIdContainer.get(w);if (null != hotWord) {Integer appearTimes = hotWord.getAppearTimes();appearTimes += times;hotWord.setAppearTimes(appearTimes);editHotWords.add(hotWord);} else {HotWord newHotWord = new HotWord();newHotWord.setRecordYear(year);newHotWord.setAppearTimes(times);newHotWord.setHotWord(w);newHotWord.setModuleCode(moduleCode);addHotWords.add(newHotWord);}});if (ZYListUtils.isNotEmptyList(addHotWords)) {hotWordMapper.insertBatch(addHotWords);}if (ZYListUtils.isNotEmptyList(editHotWords)) {for (HotWord editHotWord : editHotWords) {hotWordMapper.updateById(editHotWord);}}}private static List<String> analyzerWords(boolean isDirect, String text) {List<String> words;if (isDirect) {words = Collections.singletonList(text);} else {words = ZYDirtyWordHelper.analyze(text);if (matchLength(text) && !words.contains(text)) {words.add(text);}}return words;}private static boolean matchLength(String text) {int length = text.length();return length > 1 && length < 6;}}

记录表中效果图,实际效果还阔以,实时性和记录速度都非常快。
在这里插入图片描述

相关文章:

写的一款简易的热点词汇记录工具

项目需要对用户提交的附件、文章、搜索框内容等做热词分析。如下图&#xff1a; 公司有大数据团队。本着不麻烦别人就不麻烦别人的原则&#xff0c;写了一款简易的记录工具&#xff0c;原理也简单&#xff0c;手工在业务插入锚点&#xff0c;用分词器分好词&#xff0c;排掉字…...

算法通关村——滑动窗口高频问题

1. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 1.1 滑动窗口 找到最长字串需要找到字串的首尾位置…...

mybatis源码学习-2-项目结构

写在前面,这里会有很多借鉴的内容,有以下三个原因 本博客只是作为本人学习记录并用以分享,并不是专业的技术型博客笔者是位刚刚开始尝试阅读源码的人,对源码的阅读流程乃至整体架构并不熟悉,观看他人博客可以帮助我快速入门如果只是笔者自己观看,难免会有很多弄不懂乃至理解错误…...

selenium 自动化测试——环境搭建

安装python&#xff0c;并且使用pip命令安装 selenium pip3 install selenium 然后尝试第一次使用selenium 完成一个简单的测试自动化脚本 from selenium import webdriver from selenium.webdriver.common.by import By import timedriver webdriver.Chrome() driver.get(…...

得物一面,场景题问得有点多!

题目来源&#xff1a;https://www.nowcoder.com/discuss/525371909735792640 前文 本期是【捞捞面经】系列文章的第 1 期&#xff0c;持续更新中…。 《捞捞面经》系列正式开始连载啦&#xff0c;据说看了这个系列的朋友都拿到了大厂offer~ 欢迎星标订阅&#xff0c;持续更新…...

Prompt Tuning 和instruct tuning

Prompt Tuning 是啥&#xff1f; prompt的思想是&#xff0c;把下游任务的输入转化为预训练模型的原始任务。 以bert作为举例&#xff0c;假设任务是文本分类。“今天天气很好。”我们想判断一下这句话的情感是正面还是负面 fine-tune的方法是在bert之后接一个head&#xff0…...

springboot 与异步任务,定时任务,邮件任务

异步任务 在Java应用中&#xff0c;绝大多数情况下都是通过同步的方式来实现交互处理的&#xff1b;但是在处理与第三方系统交互的时候&#xff0c;容易造成响应迟缓的情况&#xff0c;之前大部分都是使用多线程来完成此类任务&#xff0c;其实&#xff0c;在Spring 3.x之后&a…...

2022年06月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:小白鼠再排队2 N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”,“blue”等字符串来表示。不同的小白鼠可…...

【C++】C++11新特性(下)

上篇文章&#xff08;C11的新特性&#xff08;上&#xff09;&#xff09;我们讲述了C11中的部分重要特性。本篇接着上篇文章进行讲解。本篇文章主要进行讲解&#xff1a;完美转发、新类的功能、可变参数模板、lambda 表达式、包装器。希望本篇文章会对你有所帮助。 文章目录 一…...

python内网环境安装第三方包

文章目录 一、问题二、解决方法三、代码实现 一、问题 内网安装第三方包的应用场景&#xff0c;一般是一些需要在没网的环境下进行开发的情况。这些环境一般仅支持本地局域网访问&#xff0c;所以只能在不下载任何第三方包的情况下艰难开发。 二、解决方法 将当前应用依赖的第…...

javaScipt

javaScipt 一、JavaScript简介二、javaScript基础1、输入输出语法2、变量3、常量4、数据类型4.1、数字型 number4.2、字符串类型 string4.3、布尔类型 boolean4.4、未定义类型 undefined4.5、null 空类型4.6、typeof 检测变量数据类型 5、数据类型转换5.1、隐式转换5.2、显示转…...

Linux(实操篇三)

Linux实操篇 Linux(实操篇三)1. 常用基本命令1.7 搜索查找类1.7.1 find查找文件或目录1.7.2 locate快速定位文件路径1.7.3 grep过滤查找及"|"管道符 1.8 压缩和解压类1.8.1 gzip/gunzip压缩1.8.2 zip/unzip压缩1.8.3 tar打包 1.9 磁盘查看和分区类1.9.1 du查看文件和…...

数学之美 — 1

为什么你会想和他人共享那些美丽的事物呢&#xff1f;因为这会让他&#xff08;她&#xff09;感到愉悦&#xff0c;也能让你在分享的过程中重新欣赏一次事物的美。 ——David Blackwell 1、感官之美&#xff0c;对于那些有规律的事物&#xff0c;你可以利用自己的视觉、触觉、…...

python中的global关键字

在Python中&#xff0c;global关键字用于在函数内部声明一个全局变量。默认情况下&#xff0c;函数内部的变量是局部变量&#xff0c;只能在函数内部访问。使用global关键字可以在函数内部创建或修改全局变量&#xff0c;使其在函数外部也可见和修改。 以下是使用global关键字…...

Matlab图像处理-幂次变换

幂次变换 如下图所示的幂次变换函数曲线图&#xff1a; 当γ <1时&#xff0c;效果和对数变换相似&#xff0c;放大暗处细节&#xff0c;压缩亮处细节&#xff0c;随着数值减少&#xff0c;效果越强。 当γ >1时&#xff0c;放大亮处细节&#xff0c;压缩暗处细节&…...

浏览器输入 URL 地址,访问主页的过程

分析&回答 浏览器解析域名&#xff1b;TCP建立连接&#xff1b;浏览器向服务器发送HTTP请求&#xff1b;服务器解析请求并返回HTTP报文&#xff1b;浏览器解析并渲染页面&#xff1b;断开连接。 反思&扩展 域名解析的流程 查找浏览器缓存——我们日常浏览网站时&am…...

每日一学————基本配置和管理

一、交换机的基本配置 配置enable口令、密码和主机名 Switch> (用户执行模式提示符) Switch>enable (进入特权模式) Switch# …...

解决 filezilla 连接服务器失败问题

问题描述&#xff1a; 开始一直用的 XFTP 后来&#xff0c;它变成收费软件了&#xff0c;所以使用filezilla 代替 XFTP 之前用的还好好的&#xff0c;今天突然就报错了&#xff1a;按要求输入相关字段&#xff0c;连接 连接失败&#xff01;&#xff01;&#xff01;o(╥﹏╥…...

如何使用Java进行机器学习?

在Java中进行机器学习&#xff0c;可以使用各种开源机器学习库和框架来实现。以下是一些常用的Java机器学习库&#xff1a; Weka&#xff1a;Weka 是一个非常流行的机器学习库&#xff0c;提供了大量的算法和工具&#xff0c;以及用于数据预处理、特征选择和可视化的功能。 De…...

springsecurity+oauth 分布式认证授权笔记总结12

一 springsecurity实现权限认证的笔记 1.1 springsecurity的作用 springsecurity两大核心功能是认证和授权&#xff0c;通过usernamepasswordAuthenticationFilter进行认证&#xff1b;通过filtersecurityintercepter进行授权。springsecurity其实多个filter过滤链进行过滤。…...

如何在职业生涯中取得成功

工作中让你有强烈情绪波动的事情 在我的工作经历中&#xff0c;有一次让我经历了强烈情绪波动的事件。我曾在一个高压的项目团队中工作&#xff0c;我们需要在极短的时间内完成一个复杂的客户项目。这个项目的截止日期非常紧迫&#xff0c;而项目的规模和要求也一直在不断增加…...

Hive-安装与配置(1)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…...

链表模拟栈

定义节点 class Node {var num: Int _var next: Node _def this(num: Int) {thisthis.num num}override def toString: String s"num[${this.num}]" }定义方法 class LinkStack {private var head new Node(0)def getHead: Node head//判断是否为空def isEmp…...

MySQL基础篇:数据库概述和部署

SQL 概述 SQL&#xff0c;一般发音为sequel&#xff0c;SQL的全称Structured Query Language)&#xff0c;SQL用来和数据库打交道&#xff0c;完成和数据库的通信&#xff0c;SQL是一套标准。但是每一个数据库都有自己的特性别的数据库没有,当使用这个数据库特性相关的功能,这…...

大数据面试题:MapReduce压缩方式

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;Hadoop常见的压缩算法有哪些&#xff1f; 问过的一些公司&#xff1a;网易云音乐(2022.11)&#xff0c;阿里(2020.…...

【ICer的脚本练习】“精通各种语言的hello world!“

系列的目录说明请见&#xff1a;ICer的脚本练习专栏介绍与全流程目录_尼德兰的喵的博客-CSDN博客 前言 这一节呢主要是检查一下Linux和win环境是不是能正常的支持咱们的脚本学习&#xff0c;所以来答应各种语言的hello world!&#xff0c;毕竟打印了就是学会了٩(๑❛ᴗ❛๑)۶…...

解决npm install报错: No module named gyp

今天运行一个以前vue项目&#xff0c;启动时报错如下&#xff1a; ERROR Failed to compile with 1 error上午10:19:33 error in ./src/App.vue?vue&typestyle&index0&langscss& Syntax Error: Error: Missing binding D:\javacode\Springboot-MiMall-RSA\V…...

Leetcode 面试题 17.01 不用加号的加法

设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 32 位整数 我的答案&#xff1a; 一、信息 1.设计一个函数把两个数相加 2.不得使用或者其他运算符 3.a,b均为负数或…...

一个 MySQL 数据库死锁的案例和解决方案

本文介绍了一个 MySQL 数据库死锁的案例和解决方案。 场景 生产环境出了一个偶现的数据库死锁问题&#xff0c;导致少部分业务处理失败。 分析特征之后&#xff0c;发现是多个线程并发执行同一个方法&#xff0c;更新关联的数据时可能会出现&#xff0c;把场景简化概括一下&…...

AMBEO 双声道空间音频现已迈进直播制作领域

图片来源&#xff1a;Unsplash&#xff0c;作者&#xff1a;Bence Balla-Schottner AMBEO 双声道空间音频现已迈进直播制作领域 为所有观众解锁更加身临其境的听觉体验 森海塞尔将功能强大的 AMBEO 双声道空间音频技术引入了广播电视直播应用领域&#xff0c;对所有体育赛事广…...

马鞍山专业网站制作公司/南京seo代理

Scala中的特质类似于Java中的接口,不过trait中可以有实现的方法,也可以有属性.如果是一个trait可以用 extends 剩下的就可以用with trait Person{def eat(str:String){println(str)} } trait Worker{def work{println("working")} } class Student extends Worker w…...

毕业设计wordpress/seo基础课程

2017年高考已经圆满结束&#xff0c;出国留学网高考频道第一时间为大家提供2017自贡高考成绩查询系统已开通 &#xff0c;更多高考分数线及高考志愿填报信息请关注我们网站的更新&#xff01;点击下面图片即可进入四川省教育考试院查询2017年高考成绩&#xff1a;开通时间&…...

现在ps做网站的尺寸/免费b站软件推广网站

目录 1 安装php依赖的扩展2 下载解压PHP3 编译PHP4 让Apache支持PHP5 测试安装安装php依赖的扩展&#xff1a; 1 yum install -y libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel openldap-devel 下载解压PHP&#xff1a; 在http://php.ne…...

建设教育协会培训网站/开网店

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…...

网站设计做微信发现界面/企业品牌推广方案

具体代码如下所述&#xff1a; srpgame.py #!/urs/bin/env python import random all_choice [石头,剪刀,布] win_list [[石头,剪刀],[剪刀,布],[布,石头]] prompt """ (0) 石头 (1) 剪刀 (2) 布 Please input your choice(0/1/2): """ compu…...

自己买空间做网站/网站seo查询

本文将带你了解Android应用开发Android lombok学习&#xff0c;分享写demo过程中的处理&#xff0c;希望本文对大家学Android有所帮助。下面说一下我写demo过程中的处理过程(可能与网络其他的有些不同)1.AS中安装插件在Android Studio下&#xff0c;进入setting->Plugins …...