多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件
目录
- 前言
- 校验
- 思路
- 1、存储方式
- 2、实现
- 图一实现
- 图二实现
- 结果
- 最后
前言
不知道大家有没有做过这种需求:在某字符串中,根据多个关键字去判断这串字符串是否满足条件。如下图:

亦或是


如果说要根据图二的关键字去数据库中查询符合条件的数据,要怎么做?是不是感觉头都大了?
暂且先不说包含、不包含,我们先来说说或、且。多个or、and是不能同时并列使用的,我们需要用括号将连续的、相同的or或者and用括号括起来。
比如图一,我们按顺序连起来就是:关键字1 and 关键字2 or 关键字3 or 关键字4 and 关键字5 or 关键字6
但是我们肯定不能直接就这么用,我们得捋一捋要把括号加在哪,哪些是并列的可以放在一个括号里的,哪些又是放在括号外面的。按照我的想法是,把连续 and 的关键字放在括号里,括号外面就是 or。
所以得出来的条件就是:(关键字1 and 关键字2) or 关键字3 or (关键字4 and 关键字5) or 关键字6
那么问题又来了,我们要怎么把这个条件转换成SQL的where条件?mysql中,包含指定字符串我们用 locate 函数,locate(‘关键字1’,字段1)>0 就表示字段1的值包含关键字1,如果是 <0 则表示不包含。
于是,我们拼出来的where条件就是:
# (关键字1 and 关键字2) or 关键字3 or (关键字4 and 关键字5) or 关键字6
( locate('关键字1',字段名)>0 and locate('关键字2',字段名)>0 ) or locate('关键字3',字段名)>0 or
( locate('关键字4',字段名)>0 and locate('关键字5',字段名)>0 ) or locate('关键字6',字段名)>0
where条件拼出来了,那如果我觉得用locate拼的条件太长了,想用正则或者需要在java代码中,用正则表达式匹配呢?该怎么把这个条件转换成正则表达式?
包含的话,在正则中我们可以用 .* ,但这个是贪婪匹配,匹配任意次,我们只需要匹配一次就够了,所以可以用 .*? ,and 的话,直接括号并列就行,or 的话则用 | 表示。
于是得到得正则表达式就是:
((.*?关键字1.*?)(.*?关键字2.*?))|(.*?关键字3.*?)|((.*?关键字4.*?)(.*?关键字5.*?))|(.*?关键字6.*?)
校验
得到了两种查询方式的条件,那我们来验证一下,准备一张测试表:
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (`id` bigint NOT NULL AUTO_INCREMENT,`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;INSERT INTO `test1` VALUES (1, '这里是测试内容关键字1内容,哈哈哈关键字2,内容内容、关键字3、测试关键字4测试;测试内容关键字5,关键字6。');
INSERT INTO `test1` VALUES (2, '生死关键字1并非我能关键字4左右,善恶也非关键字4我能独断');
INSERT INTO `test1` VALUES (3, '但我之关键字4本心将为我选择关键字5方向,我之使命将为关键字6我决断对错,纵使这世间混关键字1沌不堪,我也希望用关键字3这一身赤关键字3羽开辟曙光。');
INSERT INTO `test1` VALUES (4, '神州关键字4之地,守护者关键字4沉眠已久。关键字1铭刻编年,关键字7此刻乃是关键字4苏醒之时。奔赴关键字7远方,重燃此世之炽。');
INSERT INTO `test1` VALUES (5, '以精准完关键字5美的攻击关键字5,击退关键字6一切混沌与关键字7无序!关键字8');
INSERT INTO `test1` VALUES (6, '身披关键字7秩序之衣,穷尽关键字7武道之关键字5极。');
INSERT INTO `test1` VALUES (7, '漫漫关键字1白夜,划过天际的关键字2星辰不计关键字1其数,但旷关键字2古闪耀关键字3的明星,仅此一人。');
INSERT INTO `test1` VALUES (8, '就昆仑山搭街坊卡拉,天热广泛的撒旦发射点。关键字5');
INSERT INTO `test1` VALUES (9, '太艰苦拉关键字6萨大家发了肯定,解开了简历库进口量。');
INSERT INTO `test1` VALUES (10, '这个是测试内关键字3容呀,测试测试测试,内容内容内容这个是测试内容呀。');
INSERT INTO `test1` VALUES (11, '空手道解放昆仑山搭关键字4街坊,特我认为若i速关键字4冻i夫。解开了揭开角度来看,请问热关键字4望热望热热退热贴,烹饪例如可通过大幅高开。');
INSERT INTO `test1` VALUES (12, '哈哈哈哈关键字5哈哈,请问请问,啦啦啦关键字5啦啦啦啦,了哈哈哈哈哈哈,钱关键字5钱钱钱钱钱钱,嘎嘎嘎嘎嘎嘎嘎反反复复烦烦烦。');
验证方式一:
SELECT *
FROM test1
WHERE
( locate('关键字1',content)>0 and locate('关键字2',content)>0 ) or locate('关键字3',content)>0 or
( locate('关键字4',content)>0 and locate('关键字5',content)>0 ) or locate('关键字6',content)>0

验证方式二:
SELECT *
FROM test1
WHERE content REGEXP '((.*?关键字1.*?)(.*?关键字2.*?))|(.*?关键字3.*?)|((.*?关键字4.*?)(.*?关键字5.*?))|(.*?关键字6.*?)'

这么看,两种条件方式查出来的结果都是一样的。

既然这么做的思路没问题,那我们接下来要解决的就是怎么动态去拼接出这个where条件和正则表达式。
思路
1、存储方式
第一步我们先要考虑清楚,图一图二添加了多个关键字后,要以什么形式存储能更方便我们后续进行动态拼接。
我的想法是,直接把这些关键字用or、and连起来,后续用的时候也是用or、and进行分割,像这样:
# 图一:or、and也可以用其他符号代替,比如or用 | ,and用 &
关键字1and关键字2or关键字3or关键字4and关键字5or关键字6# 图二:包含、不包含则分别用 is、no代替
is关键字1orno关键字2andno关键字3andis关键字4oris关键字5andis关键字6orno关键字7

2、实现
图一实现
我们先用 or 进行分割(数组一),每一个 or 后面都拼接上表示 “或” 的字符:正则用 | 表示或,SQL用 or 表示。
遍历数组一,对每一个遍历的元素用 and 进行分割(数组二),如果数组二长度大于1,说明有连续多个and,这时我们要在这几个连续的and最外面加上括号,把它们括起来,表示这几个条件要同时满足。
即:关键字1 and 关键字2 and 关键字3 ——> ( (关键字1) and (关键字2) and (关键字3) )
用代码实现:
/*** 根据关键字动态拼接正则表达式(没有包含、不包含)* @param keyWord 关键字*/
public static String regByKeyWord1(String keyWord){String[] orSplit = keyWord.split("or");StringBuffer result = new StringBuffer();for (int i = 0; i < orSplit.length; i++) {String[] andSplit = orSplit[i].split("and");if (andSplit.length>1){result.append("(");for (int j = 0; j < andSplit.length; j++) {result.append("(.*?"+andSplit[j]+".*?)");}result.append(")");}else {result.append("(.*?"+orSplit[i]+".*?)");}if (i<orSplit.length-1){result.append("|");}}System.out.println(result.toString());return result.toString();
}/*** 根据关键字动态拼接SQL查询条件(没有包含、不包含)* @param keyWord 关键字* @param field 数据库条件字段*/
public static String whereByKeyWord1(String keyWord,String field){String[] orSplit = keyWord.split("or");StringBuffer result = new StringBuffer();for (int i = 0; i < orSplit.length; i++) {String[] andSplit = orSplit[i].split("and");if (andSplit.length>1){result.append("(");for (int j = 0; j < andSplit.length; j++) {result.append("locate('"+andSplit[j]+"',"+field+")>0");if (j<andSplit.length-1){result.append(" and ");}}result.append(")");}else {result.append("locate('"+orSplit[i]+"',"+field+")>0");}if (i<orSplit.length-1){result.append(" or ");}}System.out.println(result.toString());return result.toString();
}
得到的结果,和上面自己推算的条件、正则是一样的。

图二实现
图二有包含、不包含,就又要复杂一点了,特别是正则表达式!!!

因为本身对正则表达式也不熟,用的时候都是直接在网上找。单个包含或不包含就没什么难度,复杂的是多个包含不包含要一起使用,着实花了我好大一番心思。

我先把代码贴出来:
/*** 根据关键字动态拼接正则表达式(有包含、不包含)* @param keyWord 关键字*/
public static String regByKeyWord2(String keyWord){String[] orSplict = keyWord.split("or");StringBuffer result = new StringBuffer();for (int i = 0; i < orSplict.length; i++) {String[] andSplit = orSplict[i].split("and");if (andSplit.length>1){StringBuffer sb1 = new StringBuffer();StringBuffer sb2 = new StringBuffer();result.append("(");int c1 = 0;for (int j = 0; j < andSplit.length; j++) {if (andSplit[j].contains("no")){if (c1==0) sb1.append("((?!");if (c1>0) sb1.append("|");sb1.append(andSplit[j].replace("no",""));c1++;}if (j==andSplit.length-1 && sb1.length()>0) sb1.append(").)*");}int c2 = 0;for (int j = 0; j < andSplit.length; j++) {if (!andSplit[j].contains("no")){if (sb1.length()>0){if (c2==0) sb2.append(sb1.toString());sb2.append(andSplit[j].replace("is","")).append(sb1.toString());c2++;}else {sb2.append("(.*?"+andSplit[j].replace("is","")+".*?)");}}}result.append(sb2.toString());result.append(")");}else {if (orSplict[i].contains("no")){result.append("((?!").append(orSplict[i].replace("no","")).append(").)*");}else {result.append("(.*?"+orSplict[i].replace("is","")+".*?)");}}if (i<orSplict.length-1){result.append("|");}}System.out.println(result.toString());return result.toString();
}/*** 根据关键字动态拼接SQL查询条件(有包含、不包含)* @param keyWord 关键字* @param field 数据库条件字段*/
public static String whereByKeyWord2(String keyWord,String field){String[] orSplit = keyWord.split("or");StringBuffer result = new StringBuffer();for (int i = 0; i < orSplit.length; i++) {String[] andSplit = orSplit[i].split("and");if (andSplit.length>1){result.append("(");for (int j = 0; j < andSplit.length; j++) {if (andSplit[j].contains("no")){result.append("locate('"+andSplit[j].replace("no","")+"',"+field+")<0");}else {result.append("locate('"+andSplit[j].replace("is","")+"',"+field+")>0");}if (j<andSplit.length-1){result.append(" and ");}}result.append(")");}else {if (orSplit[i].contains("no")){result.append("locate('"+orSplit[i].replace("no","")+"',"+field+")<0");}else {result.append("locate('"+orSplit[i].replace("is","")+"',"+field+")>0");}}if (i<orSplit.length-1){result.append(" or ");}}System.out.println(result.toString());return result.toString();
}
where条件拼接没什么好说的,它和whereByKeyWord1一样。主要讲讲正则表达式该怎么写。
不包含用正则表示:((?!关键字1).)*// 不包含 关键字1 和 关键字2
多个并列的不包含用正则表示:((?!关键字1|关键字2).)*// 包含 关键字3,但不包含 关键字1 和 关键字2
包含、不包含同时使用:((?!关键字1|关键字2).)*关键字3((?!关键字1|关键字2).)*// 包含 关键字3 和 关键字4,但不包含 关键字1 和 关键字2
多个包含、不包含同时使用:(((?!关键字1|关键字2).)*关键字3((?!关键字1|关键字2).)*关键字4((?!关键字1|关键字2).)*)
是不是感觉很复杂,我也觉得很复杂。
包含不包含同时用时,要先写不包含,在不包含最后的星号后面接上包含的关键字。
只是我不明白为啥我前面明明有写不包含的表达式,为啥包含后面还要再加上不包含的表达式?

如果有多个包含、不包含同时使用,那就会像第四条表达式一样,开头要先写不包含,然后接着第一个包含,再写不包含后,接着第二个包含,然后又要写不包含。如此循环接下去。那这表达式不可谓不长。

不知道有没有更简单的表达式。
结果
// 图一
String keyWord = "关键字1and关键字2or关键字3or关键字4and关键字5or关键字6";
String reg = DynamicWhereUtil.regByKeyWord1(keyWord);
String where = DynamicWhereUtil.whereByKeyWord1(keyWord,"content");
// 图一输出(换行是为了方便查看,实际输出结果没有换行)
((.*?关键字1.*?)(.*?关键字2.*?))|
(.*?关键字3.*?)|
((.*?关键字4.*?)(.*?关键字5.*?))|
(.*?关键字6.*?)(locate('关键字1',content)>0 and locate('关键字2',content)>0) or
locate('关键字3',content)>0 or
(locate('关键字4',content)>0 and locate('关键字5',content)>0) or
locate('关键字6',content)>0// 图二
String keyWord = "is关键字1orno关键字2andno关键字3andis关键字4andis关键字5oris关键字6andis关键字7orno关键字8";
String reg = DynamicWhereUtil.regByKeyWord2(keyWord);
String where = DynamicWhereUtil.whereByKeyWord2(keyWord,"content");
// 图二输出(换行是为了方便查看,实际输出结果没有换行)
(.*?关键字1.*?)|
(((?!关键字2|关键字3).)*关键字4((?!关键字2|关键字3).)*关键字5((?!关键字2|关键字3).)*)|
((.*?关键字6.*?)(.*?关键字7.*?))|
((?!关键字8).)*locate('关键字1',content)>0 or
(locate('关键字2',content)<0 and locate('关键字3',content)<0 and locate('关键字4',content)>0 and locate('关键字5',content)>0) or
(locate('关键字6',content)>0 and locate('关键字7',content)>0) or
locate('关键字8',content)<0
最后
终于是实现了开头的那两个需求,以下是校验正则的测试代码:
public static void main(String[] args) {// 1、只有and、orString keyWord1 = "关键字1and关键字2or关键字3or关键字4and关键字5or关键字6";String reg1 = DynamicWhereUtil.regByKeyWord1(keyWord1 );//String where1 = DynamicWhereUtil.whereByKeyWord1(keyWord1 ,"content");String content1= "110kV湾上甲线1721开关、变低、变低、CT高压试验";System.out.println(content1.matches(reg1 ));// 2、有and、or和包含、不包含// is关键字1 or (no关键字2 and no关键字3 and is关键字4 and is关键字5) or (is关键字6 and is关键字7) or no关键字8String keyWord2 = "is关键字1orno关键字2andno关键字3andis关键字4andis关键字5oris关键字6andis关键字7orno关键字8";String reg2 = DynamicWhereUtil.regByKeyWord2(keyWord2);//String where2 = DynamicWhereUtil.whereByKeyWord2(keyWord2,"content");String content2= "这里是关键字4hhh、哈哈哈关键字5666、关键字5好好好、关键字4;关键字5";System.out.println(content2.matches(reg2));
}
相关文章:
多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件
目录前言校验思路1、存储方式2、实现图一实现图二实现结果最后前言 不知道大家有没有做过这种需求:在某字符串中,根据多个关键字去判断这串字符串是否满足条件。如下图: 亦或是 如果说要根据图二的关键字去数据库中查询符合条件的数据&a…...
初始Linux操作系统
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
【算法数据结构体系篇class12、13】:二叉树
一、判断二叉树是否是完全二叉树/*** 判断二叉树是否是完全二叉树** //判断层序遍历过程如果节点有右子树 没有左子树 那么就不是完全二叉树* //判断层序遍历过程如果遇到第一个节点是没有左或右子树的,也就是只有一个子节点或者没有,那么再往后层序遍历…...
数字IC手撕代码--联发科(总线访问仲裁)
题目描述当A、B两组的信号请求访问某个模块时,为了保证正确的访问,需要对这些信号进行仲裁。请用Verilog实现一个仲裁器,对两组请求信号进行仲后,要求:协议如图所示,请求方发送req(request&…...
白盒测试复习重点
白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...
学习C++这几个网站足矣
文章目录cppreferencecplusplusquick-bench[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[A…...
第十四届蓝桥杯模拟赛(第三期)——C语言版
1.找最小数 问题描述: 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 #include <stdio.h> int main(…...
Flutter Button 实例
大家好,我是 17。 在上篇文章 使用 Flutter Button 介绍了如何修改 button 的样式,本文来具体实践一下。 本文列举一些常用的 button 效果,以便在用到的时候方便使用。因为 ElevatedButton 最常用,所以大多以 ElevatedButton 举…...
好玩的docker项目,盒子刷的海思nas,挂载外接硬盘。qb种子
玩法思路(5条消息) 群晖qb下载,tr辅种_屿兮的博客-CSDN博客_群晖辅种qbittorrent简介及设置_哔哩哔哩_bilibiliqb下载器下载Transmission最好用的BT(PT)下载神器/超简单上手教你在NAS轻松部署/告别简陋三步让你升级全中文最新Web界面(BT下载/PT下载/NAS/…...
RabbitMQ的使用
1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不…...
Selenium如何隐藏浏览器页面?
Selenium隐藏浏览器页面 背景 在工作,学习中,我们常常会使用selenium来获取网页上的数据,编完完整程序之后,实现真正意义上的自动化获取,此时我们会发现在运行中往往会弹出浏览器页面,在调试过程中&…...
基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离
基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离 本文想基于Ant DesignPro Vue构建的前端SpringBoot实现的后端接口服务,实现前后端分离开发和独立运行,业务场景是登录认证,认证成功后返回该用户相应权限范围内可见的…...
Acwing---843. n-皇后问题
n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 …...
彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏
作为C/C开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C语言的特性引起的。C/C语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成段错误(segment fa…...
自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测
自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测 目前目标检测算法有很多,流行的就有faster-rnn和yolov,本文使用了几年前的yolov3框架进行训练,效果还是很好,当然也可以使用更高版本的Yolov进行实战。本代码使…...
flink兼容性验证
flink介绍:https://blog.csdn.net/weixin_43563705/article/details/107604693 一、安装启动 安装flink及其依赖 yum install java-1.8.0-openjdk curl tar mkdir -p /usr/local/flink wget https://mirrors.aliyun.com/apache/flink/flink-1.16.1/flink-1.16.1-bi…...
智慧工厂数字孪生可视化监测系统有效提升厂区安全管控效力
我国制造业正处于产业升级的关键时期,基于数据进行生产策略制定与管理是大势所趋,而数据可视化以更直观的方式成为数据分析传递信息的重要工具。 深圳华锐视点通过三维可视化手段对工厂各类设备进行三维建模,真实复现设备设施外观、结构、运转…...
c++中基本类型详细解释外加基本运算规则
👀👀#c中包括算数类型和空类型。 类型含义wchat_t宽字符bool布尔类型char字符chat16_tunicode字符chat_32unicode字符short短整型int整形long长整型longlong长整型float单精度浮点型double双精度浮点型longdouble扩展精度浮点型 👀…...
扬帆优配“机器人+”方案加码产业发展,这些股有望高增长
“机器人”发明新需求,2022年中国机器人市场规模约为174亿美元。 美国时刻3月1日,特斯拉在得克萨斯州超级工厂举办投资者日活动,展示了人形机器人Optimus的视频,更夸大的是,视频中的机器人好像在制作另一个机器人&…...
推送投票制作微信推送里投票制作教程在线投票活动制作
近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为它有非常大的优势。1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
