技术男的春天:小姐姐求助暖男分析

news2024/11/18 23:35:35

时光荏苒,这个故事发生在4年前,那时候我头发可真厚,坐地铁也不用戴口罩。

小姐姐求助

友圈一位要做毕设的小姐姐在求助postman怎么用,我就帮她解答了一下。

我知道她并非计算机相关专业,所以很奇怪为什么要用postman。

原来她的毕设是要基于微博上最近10年关于房价的话题数据,来做分析,做未来房价的走势预测,训练模型。

她经过一番调研之后决定用某平台的「语言处理技术」,实现基础数据的语义分析,即:情感极性分类结果,0负向、1中性、2正向。

在这里插入图片描述

官方提供的是基于postman的演示demo,虽然对咱们专业人士来讲很简答,但是对学文科的小姐姐还是有一定门槛的。

我教会小姐姐怎么用postman之后,问了她一个问题:

灵魂一问

你虽然知道了postman怎么用,能查询每条数据的语义分析结果。

但是微博关于房价的数据有几十万条,你总不能用postman一条一条来操作吧!?

小姐姐蒙了

在这里插入图片描述

技术男的春天

我告诉小姐姐不用担心,可以用编程轻松解决,比如Go、Python、Java、PHP都是可以的。

但是沟通下来发现小姐姐对编程并不感冒,虽然之前有学过,但是短时间内实现需求恐怕很困难。

是时候展示真正的技术了:

于是,我帮她搭建了基于某平台AI开放平台的批量语义识别的系统,也算进行了某平台【语言处理技术】的开箱测试

暖男分析

考虑到小姐姐并不是很懂编程,所以要以最简单的方式来实现需求:

  1. 尽量减少代码,能使用工具软件的尽量使用工具软件。

  2. 开发语言使用简单易学的PHP

  3. 数据库工具使用开箱即用的Navicat

  4. 开发环境使用一键安装工具「LNMP一键安装包」

(别问我为啥没用Go,毕竟这个故事起码3年前,哈哈哈)

说干就干,马上开始搞

搞定数据源

小姐姐已经通过某宝拿到了20W+关于房价的微博数据,现在需要做的就是基于语义分析来获得这20W+数据集对房价走势的判断。

小姐姐也是思路广啊~

  1. 首先根据数据源和某平台语义接口返回结果,设计MySql表结构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiIMBTll-1670227296931)(https://files.mdnice.com/user/36414/190edd7d-87c7-44f1-9e7d-eade1aab115e.png)]

  1. 考虑到数据有20万+,利用了mysql的可视化工具[Navicat]导入数据,也方便小姐姐操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSHpg3OZ-1670227296937)(https://files.mdnice.com/user/36414/73de9796-256a-4f4d-ae5f-1757984feb6b.png)]

注意:要做好表格源字段和目标字段的匹配

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qK46T0MF-1670227296939)(https://files.mdnice.com/user/36414/cf553546-c652-48ca-ac5c-c87c352eb9ee.png)]

  1. 首次导入选择直接追加;后续优化模型重复导入数据时选择更新。

  1. 点击开始即可导入Excel源数据到mysql数据库中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-67j1lf05-1670227296943)(https://files.mdnice.com/user/36414/121ee80b-68f1-4bec-b489-ee72a3743d69.png)]

  1. 导入完成,在Navicat控制台通过查询命令,共查询到231007条数据

搭建开发环境

考虑到小姐姐最终目的是训练模型,而非学习编程,所以搭建开发环境就怎么简单怎么来了。

所以我就推荐她使用「LNMP一键安装包」,10几分钟左右就把LNMP环境搭建好了

敲代码

脚本关键代码及思路:

字段说明:

mysql语句中 liuXX 是数据库名 semantic_analysis是表名

代码设计思路:

使用do while循环,批量循环请求某平台AI语义分析接口,查询positive_prob=0的数据(即未进行语义分析的数据)。

当查询不到数据时,说明所有数据已经成功请求某平台语义分析接口,且将返回结果更新到数据表中。

注意问题:

每次查询之后都会休眠1秒,因为免费版的某平台语义分析接口有QPS限制,避免出现无效请求

实现流程

查询数据:

  1. 查询条件是 positive_prob=0(代表本条数据未请求某平台接口)

  2. 查询排序: 根据id倒序

  3. 查询翻页: 每次查询10条

处理数据,请求某平台接口:

  1. 将查询到的数据进行json_encode()处理,进而请求某平台接口

处理某平台返回结果

  1. 异常处理:当某平台返回的error_code为282131时,表示文本内容过长,超过了某平台语义分析的字数限制。

  2. mysql会将不符合某平台语义分析的数据源删除,不再重复请求

  3. 输出返回结果,方便查询信息,定位问题

将返回结果更新到数据表中

  1. 当某平台的返回结果 positive_prob 字段的值不为0时,表示语义分析成功,已返回结果

  2. 将返回的结果更新到mysql数据表中

批处理脚本核心文件代码:

文件名:batchProcessing.php

<?php
ini_set('memory_limit', '256M'); //内存管理
include '../include/ConfigLiuxx.php'; //引入数据配置文件
include '../include/Db.php';//引入db数据库
include '../include/Logger.php';//引入log文件
include '../include/Request.php';//引入 http请求文件

define('Index_table', 'semantic_analysis'); //设置数据表名 语义分析
$db_liuxx = new Db($db_liuxx); //引入db配置文件
/**
 * 某平台语义分析脚本
 */
$access_token = "xxxxxxxxxxx";  //某平台提供的token
$url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?charset=UTF-8&access_token=' . $access_token; //按某平台要求拼接请求url
$limit = 10;
$offset = 0;
do {
    $datas = $db_liuxx->get_all('select * from liuxx.semantic_analysis WHERE positive_prob = 0  order by id desc limit ' . $offset . ',' . $limit);
    foreach ($datas as $key => $value) {
        $id = $value['id'];
        $text = $value['text'];
        $params = ['text' => $text];
        $bodys = json_encode($params);
        $response = request_post($url, $bodys);
        $res_data = json_decode($response, true);
        if ($res_data['error_code'] == 282131) {
            $db_liuxx->query('delete from liuxx.semantic_analysis WHERE id = ' . $id);
            var_dump($id . '  文本过长 删除');
        }
        echo 'id:';
        var_dump('某平台返回:');
        var_dump($res_data);
        $data = [
            'positive_prob' => $res_data['items'][0]['positive_prob'],
            'confidence' => $res_data['items'][0]['confidence'],
            'negative_prob' => $res_data['items'][0]['negative_prob'],
            'sentiment' => $res_data['items'][0]['sentiment'],
            'ctime' => time(),
        ];
        if ($data['positive_prob']) {
            var_dump($data);
            //更新条件
            $condition = 'id = ' . $id;
            $res = $db_liuxx->query('update liuxx.semantic_analysis set positive_prob = ' . $data['positive_prob'] . ', confidence = ' . $data['confidence'] . ', negative_prob = ' . $data['negative_prob'] . ', sentiment = ' . $data['sentiment'] . ' where id = ' . $id);
            var_dump($res);
        } else {
            var_dump('某平台未返回结果');
        };
    }
    sleep(1);
} while (!empty($datas)); //能查到数据就一直循环
?>

/**
 * 发起http post请求(REST API), 并获取REST请求的结果
 * @param string $url
 * @param string $param
 * @return - http response body if succeeds, else false.
 */
function request_post($url = '', $param = '')
{
    if (empty($url) || empty($param)) {
        return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    // 初始化curl
    $curl = curl_init();
    // 抓取指定网页
    curl_setopt($curl, CURLOPT_URL, $postUrl);
    // 设置header
    curl_setopt($curl, CURLOPT_HEADER, 0);
    // 要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    // post提交方式
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    // 运行curl
    $data = curl_exec($curl);
    curl_close($curl);

    return $data;
}

执行批处理脚本

nohup:表示脚本生成的log日志和打印信息输出到nohup.log文件中

&:表示脚本后台运行

nohup php batchProcessing.php &

获得结果

脚本运行完毕后,即可在mysql中查询到经某平台语义分析接口处理过的数据,结果示例如下图:

在这里插入图片描述

导出数据

通过Navcat工具,小姐姐就可以方便的将mysql数据结果导出到Excel。

总结

以上操作,花了大概2个小时,成就感爆棚。

当年的总结是:编程真的太有用了,帮了小姐姐大忙,收到了一大波赞,这种精神鼓励和涨工资差不多吧,哈哈哈。

今天的总结是:不管PHP还是Java、GO,更不用管什么框架。

“黑猫白猫,能抓耗子才是好猫”,“这个语言好,那个框架土,能帮你解决问题才是好工具。”

在这里插入图片描述

延伸

这篇文章也算回应一下最近有意和我讨论语言高下、框架优劣的朋友。

我确实无意在这类事情上花时间。

想起了“霍元甲”说的一句话:天下武功没有高下之分,只是习武之人有强弱之别。

一起学习

感谢我群大佬,真是卧虎藏龙。

我们搞了一个有门槛的学编程专属群,大家一起学习打卡,互相督促,欢迎加入我们:

点这里—>加入高质量学编程专属群👏👏👏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web安全渗透

自己模拟的环境,要的私信 Web安全渗透 1、通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为flag值提交; 修改源码maxlength对应的数值,3+16=19输出的数值是两位数,然后修改完之输入

HTML+CSS+JS网页设计期末课程大作业—— 绿色化妆品HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Windows搭建web站点:为站点配置二级子域名 2-2

在上一篇文章《Windows搭建Web站点&#xff1a;免费内网穿透发布至公网 1/2》中&#xff0c;我们成功通过cpolar将内网web站点发布到公网可访问&#xff0c;但免费使用cpolar所生成的域名是随机变化的&#xff08;24小时后会变化&#xff09;&#xff0c;这只适合临时测试使用。…

Mysql SQL优化跟踪来看看是如何优化并决策使用哪个索引或者不适用索引

背景 使用索引字段进行筛选数据时&#xff0c;explain查询语句发现MySQL居然没有使用索引&#xff0c;产生疑问&#xff0c;因此决定调查清楚为什么会不用索引&#xff0c;而是走全表扫描 原因调查出的结果是当你要查询的数据量是连续又占整个表五分之一以上那就不会走索引了&a…

Java面试宝典.exe程序成功运行,经典 Java 万字笔记,查漏补缺,备战跳槽面试

现在 java 的面试真的卷到家了&#xff0c;面试前很有必要针对性的多刷题&#xff0c;大部分童鞋实战能力强&#xff0c;理论不行&#xff0c;面试前不做准备很吃亏。这里整理了很多常考面试题&#xff0c;希望对你有帮助。 耗时一个月&#xff0c;我把牛客网上最火的 Java 面…

ZMQ之共享键值缓存(克隆模式)

发布-订阅模式和无线电广播有些类似&#xff0c;在你收听之前发送的消息你将无从得知&#xff0c;收到消息的多少又会取决于你的接收能力。让人吃惊的是&#xff0c;对于那些追求完美的工程师来说&#xff0c;这种机器恰恰符合他们的需求&#xff0c;且广为传播&#xff0c;成为…

导出 txt文件 处理思路和实现流程

1.先看导出目标文件需要的字段都存不存在&#xff0c; 存在继续处理&#xff0c;不存在就添加。 例如&#xff0c;我这里需要在若依的用户表在添加一个银行账户数据&#xff0c; //银行卡号 private String accountNumber; public String getAccountNumber() { r…

Java程序员3个月从月薪6k涨到15k,你知道我是怎么过来的吗?

(一). 基础 1. Java 基本功 Java 入门&#xff08;基础概念与常识&#xff09; Java 语法 基本数据类型 方法&#xff08;函数&#xff09; 2. Java 面向对象 类和对象 面向对象三大特征 修饰符 接口和抽象类 其它重要知识点 3. Java 核心技术 集合 异常 多线程 文…

Python——协程(Coroutine),异步IO

目录 生成器(Generator) yield表达式的使用 生产者和消费者模型 ​编辑 yield from表达式 协程(Coroutine) asyncio.coroutine async/await 总结 由于GIL的存在&#xff0c;导致Python多线程性能甚至比单线程更糟。 于是出现了协程&#xff08;Coroutine&#xff09;这…

Arduino UNO通过PCF8574串行IIC接口驱动LCD1602/LCD2004液晶屏

LCD1602/2004液晶屏简介 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。可以显示2行每行16个字符&#xff0c;总共32个字符。字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD&#xff0c;常用161&#xff0c;162&#xff0c;202和402等的模块。不…

Go编程项目实战教程

Go编程项目实战教程 在这个面向初学者的 Go 编程语言课程中&#xff0c;您将通过构建 11 个项目来提高您的 Go 编程技能 课程英文名&#xff1a;Learn Go Programming by Building 11 Projects – Full Course 此视频教程共21.0小时&#xff0c;中英双语字幕&#xff0c;画质…

数据之道读书笔记-07打造“数字孪生”的数据全量感知能力

数据之道读书笔记-07打造“数字孪生”的数据全量感知能力 在信息化时代构建的IT系统&#xff0c;基本上是功能化、烟囱化、封闭式的&#xff0c;只能给企业内部经过培训的专业人员使用&#xff0c;所有的决策数据和我们信任的IT系统基本都是靠人来录入数据。但是&#xff0c;人…

Android移动开发基础——实训项目:个人财务软件

目录 步骤 1. 项目计划 需求分析 程序流程图 2. 实现功能模块 2.1 登录模块 前提 软件&#xff1a;Android Studio开发工具、JDK1.8以上版本 目标&#xff1a;编写个人财务软件 步骤 &#xff08;1&#xff09;根据设计题目要求的指标&#xff0c;通过查阅有关资料…

某学生宿舍楼设计

目 录 1.建筑设计部分 1 1.1工程概况 1 1.2设计依据 2 1.3标高及建筑细部作法 2 1.4平面设计 2 1.4.1建筑方案设计 2 1.4.2建筑做法 4 1.4.3 建筑设计成果 6 2.结构设计部分 7 2.1结构平面设计 7 2.2构件截面尺寸的初步确定 8 2.3荷载统计 10 2.3.1楼屋面及卫生间恒活计算 10 2…

热加载技术:修改Python代码并实时查看结果 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/406 &#x1f4e2; 声明&#xff1a;版权所有&#xf…

基于MindSpore框架的道路场景语义分割方法研究

概述 本文以华为最新国产深度学习框架Mindspore为基础&#xff0c;将城市道路下的实况图片解析作为任务背景&#xff0c;以复杂城市道路进行高精度的语义分割为任务目标&#xff0c;对上述难处进行探究并提出相应方案&#xff0c;成功地在Cityscapes数据集上完成了语义分割任务…

vue3+ts做echarts做一个简单的折线渐变图

vue3做echarts做一个简单的折线渐变图 效果 代码&#xff1a; </template> <div><div class"date-change"><el-date-picker size"small" v-model"dateValue" value-format"YYYY-MM-DD" type"daterange&qu…

Leetcode 72. 编辑距离

最近在写dp问题的时候&#xff0c;写到这个经典题&#xff0c;对于里面三个转换方程没太懂&#xff0c;偶然在评论区找到一个非常非常清楚的解释&#xff0c;顺便就把这道题记录一下&#xff0c;加上自己的理解&#xff0c;方便日后查看! 对于这一类的dp习惯性的都初始化dp的大…

好用的数据恢复软件EasyRecovery2023最新版

实用的数据恢复软件有什么&#xff1f;电脑中的数据文件对很多的小伙伴来说都是非常重要的&#xff0c;在下载安装新的软件设备时都需要非常谨慎&#xff0c;一旦碰到一些病毒就可能会导致文件丢失&#xff0c;想要恢复这些文件并不是很容易&#xff0c;需要使用专业的数据恢复…

proxy

let obj new Proxy({},{get: function(target,propKey,receiver) {console.log(获取的时候会被拦截)console.log(target,propKey,receiver)return Reflect.get(target,propKey,receiver)},set: function(target,propKey,value,receiver) {console.log(设置时被拦截);console.l…