时光荏苒,这个故事发生在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);// 设置headercurl_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,更不用管什么框架。

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

延伸

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

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

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

一起学习

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

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

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

技术男的春天:小姐姐求助暖男分析相关推荐

  1. 这个超逼真的虚拟小姐姐,可能是腾讯游戏未来的样子

    问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI "This breaks my brain." 目睹了GDC大会期间的一幕时,有人发出上面这句感叹.如果翻译成中文,应该 ...

  2. 暖男须知,你应该转给他看看了

    步入十月,天气是越来越冷了,妹子们都说,穿再厚的衣服,也不如身边有一个像太阳一样发光发热的暖男,不仅暖身,更暖心. 那么所谓的暖男,究竟是什么样的呢? 有人说暖男就是: 也有人说自己就是暖男: 然而更 ...

  3. 婚姻大数据:姐弟恋最靠谱,男同学们,小姐姐会好好爱护你的

    导读:每个人都会有自己的宿命,在感情上也一样,有些人可能经历过几段婚姻,绕个弯最后找到自己的归宿,而有些人只是一直在寻找的路上.那么你最适合和什么样的人结婚?来看看大数据分析得出的结论! 复旦大学社会 ...

  4. 渣男,你为什么有这么多小姐姐的照片?因为我Python爬虫学的好啊❤️!

    渣男,你为什么有这么多小姐姐的照片?因为我Python爬虫学的好啊❤️! 前言 程序说明 爬虫程序 观察网页结构 页面解析 创建图片保存路径 图片下载 爬取结果展示 完整程序 最后 前言 大家心心念的 ...

  5. 某大厂程序员求助:认识一个不错的小姐姐,却得知对方竟有四个兄弟姐妹!想放弃,对方却穷追不舍,怎么办?...

    独生子女愿意和家里兄弟姐妹很多的人结婚吗?有人觉得兄弟姐妹少了麻烦少,有人觉得兄弟姐妹多了养老方便,事实如何呢? 一位美团程序员发帖求助:在网上认识一个女生,颜值还可以,聊了一周也挺正常,今天见面吃饭 ...

  6. H哥被阿里技术的小姐姐采访了,聊了这些东西。

    前几天,我正在疯狂的撸码,钉钉上有小姐姐ding我 我这个人,是从来不太会拒绝人的,尤其是小姐姐.所以,我就接受了一下采访.这次采访主要问了3个问题,整体的原文发在了阿里技术的公众号上,可以通过传送门 ...

  7. 小姐姐公开征婚高智商 IT 男:微信号竟要质数解密?

    最近,这张图火了: 微博网友评论: @南方投资人:不读书,老婆都娶不到 @秦建刚-关注跨境电商:什么叫质数?[允悲]全部还给老师了 @MshadowQ:题目太简单了..这就直接面试了吗.怕不是忙不过来 ...

  8. 程序员宅男干货福利!手把手教你获取上千张cosplay小姐姐的美照

    最近的一段时间里,小编喜欢上了CosPlay的展出,小姐姐们的CosPlay展真的是让我很是欣赏,于是,我回到家里就从网上来看展出,但是一个个网页查看太过繁琐-- 既然是玩Python,不如写个代码搞 ...

  9. 宅男福利!我用Python做了一个B站跳舞的小姐姐,满屏的美腿!

    点上方蓝色"菜鸟学Python",选"星标"公众号 重磅干货,第一时间送到 周末在家,天气好冷好冷啊,我们这边都下雪了!宅在家里没有啥事情,于是炖了只老母鸡,补 ...

最新文章

  1. java记事本环境变量_java环境变量配置以及用记事本写程序
  2. 详解C++中经常看到的#include <iostream> using namespace std;
  3. 1、Power View—使用前的准备
  4. 第十一回:琴房外度曲生慕意 书店里软语救阿四[林大帅作品集]
  5. Kafka是如何实现高吞吐率的
  6. 发现一个不错的Windows内核的相关论坛
  7. php配合jade使用,前端自动化系列(四)之jade预编译html
  8. .net core i上 K8S(五).netcore程序的hostip模式
  9. 两台电脑间大量数据拷贝的快捷方法
  10. 更新卡住解决_iPhone手机无法正常下载/安装应用的解决方法
  11. Salesforce 社区可泄露业务敏感信息
  12. 男孩子一定要注意保护自己!
  13. 百度开源深度学习框架【飞桨——PaddlePaddle】学习实践一
  14. Maven 清理 .lastUpdated 文件
  15. MEVN框架基础知识
  16. java中元数据是什么_java 元数据
  17. 迅捷PDF虚拟打印机怎么安装和使用
  18. centos下ftp服务器搭建
  19. Wincc使用.net控件将锐浪报表Grid++Report6嵌入
  20. 虚拟化部署ESXI6.7+intel x710-da4万兆网卡

热门文章

  1. 磊科路由器信号按键_如何设置磊科无线路由器?磊科路由器的设置方法和教程...
  2. 开发者要求改进:苹果商店缺乏应用推广方式
  3. 腾讯云4核服务器和2核区别大吗?性能差异
  4. 一个水藻,经过两天的生长后,从第3天开始每天都会分裂出一个新藻,而分裂出的新藻同样经过两天的生长,也会从第3天开始每天分裂出一个新藻,问经过n天后,共有多少个水藻存在。暂时不考虑藻死亡的情况。
  5. 华为magic 2鸿蒙,什么时候能用上华为“草根血剑2鸿蒙”系统?
  6. win7配置免安装mysql5.6.19过程详解
  7. python数字组合_将数字组合在一起形成多个数字的编号
  8. 量子通信基础知识简介(二)
  9. Yii--Sessions 和 Cookies
  10. 详解DNS工作流程及原理 ( 域名、IP与DNS的关系)