HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

HBuilderX云打包ios证书的获取方法

iOS打包 iOS证书 分享链接

使用HBuilderX进行云打包的时候,假如打包的是ios项目,则需要自有证书。

平时这个证书是需要在mac电脑申请的,而我们没有mac电脑,则我们可以使用香蕉云编来生成ios证书:

https://www.yunedit.com/xueyuan/jx/createcert

按照它里面的流程说明创建,就可以完成证书的创建了。

继续阅读 »

使用HBuilderX进行云打包的时候,假如打包的是ios项目,则需要自有证书。

平时这个证书是需要在mac电脑申请的,而我们没有mac电脑,则我们可以使用香蕉云编来生成ios证书:

https://www.yunedit.com/xueyuan/jx/createcert

按照它里面的流程说明创建,就可以完成证书的创建了。

收起阅读 »

万岳知识付费系统更新内容 v 1.0.6

技术分享 源码分享 开源 uniapp

仓库地址

更新内容:

    为方便新老用户使用,我们将uni-app仓库(移动端)和php仓库(后端+web)合并为一个仓库,方便大家的整合使用。

现有功能:

项目说明(如果对你有用,请点亮右上角的Star!)

部署文档|发行步骤|常见问题|升级日志

系统演示

展示图

目录结构

  • 前端代码 knowledge_uni_app目录
  • 后台代码 knowledge_admin目录

Web版地址

项目介绍

万岳知识付费系统打造沉浸式学习体验,提升教学质量,还原真实课堂。知识付费功能包含热门精选、在线直播、付费视频、付费音频、付费阅读等营销功能,实现用户快速裂变。提高用户工作效率和收入是成为知识付费的刚需,可以从海量信息中寻找到适合自身的产品,利用碎片化时间和少许资金就能获得自己需要的信息。

万岳知识付费深刻理解用户诉求,紧盯市场需求。帮助大家低成本高效率体验知识付费平台,以利用互联网让人们生活更美好为使命,精益求精,创新研发,为客户创造更多价值!

  • 所有使用到的框架或者组件都是基于开源项目,代码保证100%开源。
  • 系统功能通用,无论是个人还是企业都可以利用该系统快速搭建一个属于自己的知识付费系统。

系统前端采用uni-app+socket.io+WebRtc核心技术, 接口采用PhalApi框架配合TP5.1框架ThinkCMF,系统功能如下:

功能展示

展示图展示图展示图展示图展示图

开源版使用须知

  • 允许用于个人学习、教学案例

  • 开源版不适合商用,商用请购买商业版

  • 禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负

商业合作

  • 如果你想使用功能更完善的知识付费系统,请联系QQ客服: 2415408120 获取专业版
  • 如果您想基于知识付费系统进行定制开发,我们提供有偿定制服务支持!
  • 其他合作模式不限,欢迎来撩!
  • 官网地址:http://www.sdwanyue.com

联系我们(加客服经理微信或QQ,免费获取sql脚本)

QQ:2415408120

万岳在线教育讨论群可加 QQ群:995910672

> QQ群:995910672

展示图

继续阅读 »

仓库地址

更新内容:

    为方便新老用户使用,我们将uni-app仓库(移动端)和php仓库(后端+web)合并为一个仓库,方便大家的整合使用。

现有功能:

项目说明(如果对你有用,请点亮右上角的Star!)

部署文档|发行步骤|常见问题|升级日志

系统演示

展示图

目录结构

  • 前端代码 knowledge_uni_app目录
  • 后台代码 knowledge_admin目录

Web版地址

项目介绍

万岳知识付费系统打造沉浸式学习体验,提升教学质量,还原真实课堂。知识付费功能包含热门精选、在线直播、付费视频、付费音频、付费阅读等营销功能,实现用户快速裂变。提高用户工作效率和收入是成为知识付费的刚需,可以从海量信息中寻找到适合自身的产品,利用碎片化时间和少许资金就能获得自己需要的信息。

万岳知识付费深刻理解用户诉求,紧盯市场需求。帮助大家低成本高效率体验知识付费平台,以利用互联网让人们生活更美好为使命,精益求精,创新研发,为客户创造更多价值!

  • 所有使用到的框架或者组件都是基于开源项目,代码保证100%开源。
  • 系统功能通用,无论是个人还是企业都可以利用该系统快速搭建一个属于自己的知识付费系统。

系统前端采用uni-app+socket.io+WebRtc核心技术, 接口采用PhalApi框架配合TP5.1框架ThinkCMF,系统功能如下:

功能展示

展示图展示图展示图展示图展示图

开源版使用须知

  • 允许用于个人学习、教学案例

  • 开源版不适合商用,商用请购买商业版

  • 禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负

商业合作

  • 如果你想使用功能更完善的知识付费系统,请联系QQ客服: 2415408120 获取专业版
  • 如果您想基于知识付费系统进行定制开发,我们提供有偿定制服务支持!
  • 其他合作模式不限,欢迎来撩!
  • 官网地址:http://www.sdwanyue.com

联系我们(加客服经理微信或QQ,免费获取sql脚本)

QQ:2415408120

万岳在线教育讨论群可加 QQ群:995910672

> QQ群:995910672

展示图

收起阅读 »

webview使用uniapp项目开发无法使用uni.postMessage(踩坑经验分享)

Webview uniapp 经验分享

1、使用uniapp项目写H5 webview,使用hello uniapp的模板,按照webview文档里的源码往template.h5.html里面写入相关内容。
2、引入的https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js脚本,它这个地方是个坑。你要手动改源码。uni.webview.js文件里面注册的就是uni对象。被uniapp项目自带的uni对象覆盖了,我就是把源码里面注册uni对象换了个名字(webUni)就好了。
END:这里把我自己改好的js文件贴上来,包括template.h5.html文件,可以直接使用webUni.postMessage方法。

继续阅读 »

1、使用uniapp项目写H5 webview,使用hello uniapp的模板,按照webview文档里的源码往template.h5.html里面写入相关内容。
2、引入的https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js脚本,它这个地方是个坑。你要手动改源码。uni.webview.js文件里面注册的就是uni对象。被uniapp项目自带的uni对象覆盖了,我就是把源码里面注册uni对象换了个名字(webUni)就好了。
END:这里把我自己改好的js文件贴上来,包括template.h5.html文件,可以直接使用webUni.postMessage方法。

收起阅读 »

分享一个处理异步任务的插件,方便的一比

异步方法 异步执行 登录 经验分享

github链接:https://github.com/1977474741/vue-custom-hooks

这个东西可以解决业务页面里需要同时监听多个全局状态的问题,首次进入小程序需要异步的去获取数据,它可以告诉业务页面,东西我已经拿到啦,可以做某些事了!

继续阅读 »

github链接:https://github.com/1977474741/vue-custom-hooks

这个东西可以解决业务页面里需要同时监听多个全局状态的问题,首次进入小程序需要异步的去获取数据,它可以告诉业务页面,东西我已经拿到啦,可以做某些事了!

收起阅读 »

需要下拉刷新 上拉加载的可以去看看

上拉加载 下拉刷新

简单易上手的下拉刷新 上拉加载

https://ext.dcloud.net.cn/plugin?id=4489

简单易上手的下拉刷新 上拉加载

https://ext.dcloud.net.cn/plugin?id=4489

hbuilderx内置Universal Links自动生成指南

Universal Links自动生成指南

背景介绍:

Universal Link是苹果在WWDC 2015上提出的iOS 9的新特性之一。此特性类似于深层链接,并能够方便地通过打开一个Https链接来直接启动您的客户端应用(手机有安装App)。对比以往所使用的URLSheme, 这种新特性在实现web-app的无缝链接时,能够提供极佳的用户体验。
使用前请阅读苹果官方文档

由于苹果iOS 13系统版本安全升级,微信SDK1.8.6版本要求支持Universal Links方式跳转,以便进行合法性校验,提升安全性。更多详情请参考微信官方说明

大白话:以前你的APP要打开其他APP是通过URLScheme实现,后来苹果提出用Https链接来启动,手机上对应的app(已安装),更方便与web-app的无缝对接。微信响应了这个方案。所以大家开发的APP无论是微信登陆、微信支付,还是微信分享等一切会跳转到微信,再跳回来的场景,需要提供这个链接。要不然你的应用打开了微信,微信就打不开你的应用。

如果不配置通用链接,使用新版本HX提交云端打包会失败,提示以下错误信息:

Error code = -5000  
Error message:   
Error: not set parameter 'UniversalLinks' @'oauth-weixin'
传统方式配置通用链接需要:
  1. 在苹果开发者中心:开启Associated Domains服务
  2. 获取相关参数,手动创建apple-app-site-association文件
  3. 部署apple-app-site-association文件到自己的云服务器,配置SSL证书解析域名
  4. 然后手动在manifest.json中配置Associated Domains(域名)
  5. 粘贴通用链接到对应权限模块
  6. 在微信开放平台配置通用链接

其中需要注意的细节较多,且调试起来困难繁琐,困扰了大量开发者。

现在通过HbuilderX(3.1.9版起)云打包,支持自动生成apple-app-site-association文件,并自动托管到:自带cdn、ssl等服务的“免费”的云服务空间uniCloud的前端网页托管,自动完成manifest.json中的相关配置。用自动化技术替代了,如上所示传统方式令人苦恼的(2-5)4个步骤;只需如下三步直接搞定通用链接。

第一步:开启Associated Domains服务

登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启Associated Domains服务


开启Associated Domains服务后需要重新生成profile文件,提交云端打包时使用

第二步骤 自动生成通用连接(Universal Links)

打开项目的manifest.json文件,在“(App) SDK配置”项中的微信登录(微信分享、微信支付)下的“iOS平台通用链接(Universal Links)”中,
点击如图所示【自动生成】期间会校验你是否已经开通uniCloud(阿里云版)云服务空间和开通前端网页托管
,按提示完成操作即可。


第三步:在微信开放平台配置通用链接

打开微信开发平台,在“管理中心”页面的“移动应用”下找到已经申请的应用(没有申请应用请点击“创建移动应用”新建应用),点击“查看”打开应用详情页面。
在“开发信息”栏后点击修改,在“iOS应用”下的“Universal Links”项中配置应用的通用链接,如下图所示:

其他

客户端处理通用链接。可通过5+ API的plus.runtime.launcher判断应用启动来源,如果其值为"uniLink"则表示通过通用链接启动应。这时可通过5+ API的plus.runtime.arguments获取启动参数,通用链接启动的情况将返回完整的通用链接地址。
例:HBuilderX中自带的默认真机运行基座HBuilderX注册的通用链接:https://demo.dcloud.net.cn/ulink/

假如你比较关心通用链接的生成原理,他的逻辑流程为:

  1. 选择云空间获取云空间的默认/自定义域名
  2. 按提前制定的规范(uni-universallinks/DCloud appid)拼接URL
  3. 根据现有参数自动生成通用链接相关参数到manifest.json
  4. 发起云打包时读取证书的profile文件生成apple-app-site-association并部署到前面选定的云空间根目录的.well-known目录下

注意事项:

  • 通用链接指向的路径可以为空,他只是一种信息传递方式。可以简单地理解为:通过解析URL的“/”后的参数到apple-app-site-association中找到指定的包名并唤醒对应的APP
  • 通用链接内容保存在manifest.json中云打包后生效,被手机读取的时机是应用被安装的时候。如果你的通用链接内容有变化,你需要重新提交云打包,并重新安装一次应用才能生效
  • 通用链接最终托管在服务端,如有变动注意缓存的清理,例如尝试重启手机等操作

如果你是本地离线打包或者由于某种原因你需要用传统的方式:私有化部署服务器来托管apple-app-site-association文件创建通用链接。你仍然可以通过手动配置manifest.json实现。详情:https://ask.dcloud.net.cn/article/36393#unilink

继续阅读 »

背景介绍:

Universal Link是苹果在WWDC 2015上提出的iOS 9的新特性之一。此特性类似于深层链接,并能够方便地通过打开一个Https链接来直接启动您的客户端应用(手机有安装App)。对比以往所使用的URLSheme, 这种新特性在实现web-app的无缝链接时,能够提供极佳的用户体验。
使用前请阅读苹果官方文档

由于苹果iOS 13系统版本安全升级,微信SDK1.8.6版本要求支持Universal Links方式跳转,以便进行合法性校验,提升安全性。更多详情请参考微信官方说明

大白话:以前你的APP要打开其他APP是通过URLScheme实现,后来苹果提出用Https链接来启动,手机上对应的app(已安装),更方便与web-app的无缝对接。微信响应了这个方案。所以大家开发的APP无论是微信登陆、微信支付,还是微信分享等一切会跳转到微信,再跳回来的场景,需要提供这个链接。要不然你的应用打开了微信,微信就打不开你的应用。

如果不配置通用链接,使用新版本HX提交云端打包会失败,提示以下错误信息:

Error code = -5000  
Error message:   
Error: not set parameter 'UniversalLinks' @'oauth-weixin'
传统方式配置通用链接需要:
  1. 在苹果开发者中心:开启Associated Domains服务
  2. 获取相关参数,手动创建apple-app-site-association文件
  3. 部署apple-app-site-association文件到自己的云服务器,配置SSL证书解析域名
  4. 然后手动在manifest.json中配置Associated Domains(域名)
  5. 粘贴通用链接到对应权限模块
  6. 在微信开放平台配置通用链接

其中需要注意的细节较多,且调试起来困难繁琐,困扰了大量开发者。

现在通过HbuilderX(3.1.9版起)云打包,支持自动生成apple-app-site-association文件,并自动托管到:自带cdn、ssl等服务的“免费”的云服务空间uniCloud的前端网页托管,自动完成manifest.json中的相关配置。用自动化技术替代了,如上所示传统方式令人苦恼的(2-5)4个步骤;只需如下三步直接搞定通用链接。

第一步:开启Associated Domains服务

登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启Associated Domains服务


开启Associated Domains服务后需要重新生成profile文件,提交云端打包时使用

第二步骤 自动生成通用连接(Universal Links)

打开项目的manifest.json文件,在“(App) SDK配置”项中的微信登录(微信分享、微信支付)下的“iOS平台通用链接(Universal Links)”中,
点击如图所示【自动生成】期间会校验你是否已经开通uniCloud(阿里云版)云服务空间和开通前端网页托管
,按提示完成操作即可。


第三步:在微信开放平台配置通用链接

打开微信开发平台,在“管理中心”页面的“移动应用”下找到已经申请的应用(没有申请应用请点击“创建移动应用”新建应用),点击“查看”打开应用详情页面。
在“开发信息”栏后点击修改,在“iOS应用”下的“Universal Links”项中配置应用的通用链接,如下图所示:

其他

客户端处理通用链接。可通过5+ API的plus.runtime.launcher判断应用启动来源,如果其值为"uniLink"则表示通过通用链接启动应。这时可通过5+ API的plus.runtime.arguments获取启动参数,通用链接启动的情况将返回完整的通用链接地址。
例:HBuilderX中自带的默认真机运行基座HBuilderX注册的通用链接:https://demo.dcloud.net.cn/ulink/

假如你比较关心通用链接的生成原理,他的逻辑流程为:

  1. 选择云空间获取云空间的默认/自定义域名
  2. 按提前制定的规范(uni-universallinks/DCloud appid)拼接URL
  3. 根据现有参数自动生成通用链接相关参数到manifest.json
  4. 发起云打包时读取证书的profile文件生成apple-app-site-association并部署到前面选定的云空间根目录的.well-known目录下

注意事项:

  • 通用链接指向的路径可以为空,他只是一种信息传递方式。可以简单地理解为:通过解析URL的“/”后的参数到apple-app-site-association中找到指定的包名并唤醒对应的APP
  • 通用链接内容保存在manifest.json中云打包后生效,被手机读取的时机是应用被安装的时候。如果你的通用链接内容有变化,你需要重新提交云打包,并重新安装一次应用才能生效
  • 通用链接最终托管在服务端,如有变动注意缓存的清理,例如尝试重启手机等操作

如果你是本地离线打包或者由于某种原因你需要用传统的方式:私有化部署服务器来托管apple-app-site-association文件创建通用链接。你仍然可以通过手动配置manifest.json实现。详情:https://ask.dcloud.net.cn/article/36393#unilink

收起阅读 »

popGesture触发机制

全局manifest.json设置了close
安卓会走init下的beforeback回调和plus.webview.currentWebview().addEventListener("close", function (e) {})

单页面设置popGesture,iOS触发机制
1:none
触发init下的beforeback回调和plus.webview.currentWebview().addEventListener("close", function (e) {})
2、hide
触发plus.webview.currentWebview().addEventListener("hide", function (e) {})和plus.webview.currentWebview().addEventListener("close", function (e) {})
3、不设置或者设置成close
不会触发

继续阅读 »

全局manifest.json设置了close
安卓会走init下的beforeback回调和plus.webview.currentWebview().addEventListener("close", function (e) {})

单页面设置popGesture,iOS触发机制
1:none
触发init下的beforeback回调和plus.webview.currentWebview().addEventListener("close", function (e) {})
2、hide
触发plus.webview.currentWebview().addEventListener("hide", function (e) {})和plus.webview.currentWebview().addEventListener("close", function (e) {})
3、不设置或者设置成close
不会触发

收起阅读 »

ios打包报错opendir([PackagePath]/XArchive/exportArchive): failed to open dir: No such file or directory

问题:ios打包失败,
[HBuilder] 22:52:54.501 项目 newapp [H50A8232B]的打包状态:
[HBuilder] 22:52:54.501 时间: 2021-03-17 22:52:00 类型: iOS Appstore 打包失败 错误日志: https://xxx/errorLog/xxxxx
[HBuilder] 22:52:54.501 苹果已废弃UIWebview,新应用使用UIWebview将无法提交苹果应用市场,详情查看
解决:因为更新了最新版本3.1.5.20210316,后面回退到上一个版本,再次打包,显示成功。不知道3.1.5.20210316版本更新什么导致失败的

继续阅读 »

问题:ios打包失败,
[HBuilder] 22:52:54.501 项目 newapp [H50A8232B]的打包状态:
[HBuilder] 22:52:54.501 时间: 2021-03-17 22:52:00 类型: iOS Appstore 打包失败 错误日志: https://xxx/errorLog/xxxxx
[HBuilder] 22:52:54.501 苹果已废弃UIWebview,新应用使用UIWebview将无法提交苹果应用市场,详情查看
解决:因为更新了最新版本3.1.5.20210316,后面回退到上一个版本,再次打包,显示成功。不知道3.1.5.20210316版本更新什么导致失败的

收起阅读 »

个推语义情感分析实操 |10行代码帮你判断TA是否生气了

想必大家都听说过这样一句话,“男人来自火星,女人来自金星”。男女之间确实存在一定的思维差异。
怎么样才能更准确地GET到TA的真实想法和情绪,不至于和心仪的TA越走越远呢?也许可以试试技术的方式。
随着AI的日益普及和在各个领域的加速落地,很多企业不断尝试将自然语言处理、语义情感分析等技术应用到智能客服、交互机器人等领域。个推也在自然语言处理及人工智能领域拥有丰富的实践经验。

本文主要借这个有趣的实操案例,为大家分享如何基于NLP进行语义情感分析。

一、准备数据

本次实验,我们使用的是从GitHub下载的开源数据集:数据集来自新浪微博,一共361744行数据,并且已经有“喜悦” “愤怒” “厌恶” “低落”等四类标签的label标记。

二、数据预处理

我们知道,文本数据是一种非结构化的数据,且数据内部存在许多像标点、表情符号等类型的特殊字符。因此,我们要先对数据进行一些预处理。

首先,我们先剔除了文本中的一些特殊字符,并对文本进行了中文分词。

在该步骤,为了提升模型效果,我们一般需要建立停用词库,并在文本中将停用词予以剔除。但是考虑到在情感分析中,许多停用词其实有可能会对分类结果产生影响。例如对话时的“呀”,往往带有喜悦的情感色彩。因此在这里,我们并未将这一类的词汇进行剔除。

当然你也可以尝试自定义一个停用词库,并比较一下最后的分类效果。

接下来,我们进入第二步。我们按照7:3的比例将数据集分成了训练集和测试集这两个数据集。同时,我们也对每个词进行了编码,并将文本的序列调整成为相同的长度。

再接着,我们通过word2vec预训练来得到词向量,并且通过观察单词的相似度,对词向量的质量进行了检验。

从下图,可以看到,相似的单词还是基本符合预期的。

三、模型训练

将数据进行预处理之后,我们就可以将数据“喂入”到分类模型中。业内常用的经典文本分类模型有FastText(一种快速文本分类器)、TextCNN(利用卷积神经网络对文本进行分类的算法)、R-CNN(Region-CNN,用于实现目标检测)、Han(关键词提取算法)等。

下图是我们基于最简单的FastText算法进行文本分类的过程:

我们对该算法模型进行了10轮的持续迭代。在测试集上,该模型的准确率达到了0.582。然后,我们将FastText模型结果作为我们此次实验的baseline模型结果。

我们又分别对TextCNN、R-CNN、BiLSTM + Attention进行了测试,下表对不同算法模型的效果进行了梳理和对比:

由上表我们可以看到,相较而言,还是BiLSTM + Attention的预测效果更好。

下图是我们使用BiLSTM + Attention进行模型预测的代码结构:

Attention的结构和加权池化层类似,我们其实可以将权重提取出来并且进行可视化:

四、模型预测

接下来,我们将训练好的BiLSTM + Attention模型进行封装,并看一下该模型的预测效果。

通过下表,可以看到,模型的训练效果还是比较令人满意的,对于“呵呵”和“哈哈哈”、“了”和“啦”这些语气词之间的微妙情绪差别都能进行相对准确的判断:

至此,本次基于NLP进行情感分析的模型训练实验也就基本完成了。

这其中其实还有许多可以优化的点,例如:针对每个标签类别占比不均衡的情况,可以进行loss修改;不仅仅可以对每个类别的标签做onehot处理,还可以将label本身的文字信息做embedding等等。感兴趣的童鞋可以在自己的实操中尝试进行更多的优化。

总结

目前,虽然AI技术的应用已经越来越成熟和普遍,算法模型也一定程度上能够对文本的情感进行判断。但是Mr.Tech也要温馨提醒大家,在现实的人际交往中,我们彼此之间还是要真诚沟通、用心交流哦。

未来,个推将不断在自然语言处理、机器视觉等前沿技术领域开展实践,也会持续将其中有价值的内容分享给大家。我们相信技术的飞速发展一定会给我们的生活带来很多有意义、有趣的改变。我们也期待读者朋友们,多多和我们交流自己的前沿实战和趣味实操案例。

继续阅读 »

想必大家都听说过这样一句话,“男人来自火星,女人来自金星”。男女之间确实存在一定的思维差异。
怎么样才能更准确地GET到TA的真实想法和情绪,不至于和心仪的TA越走越远呢?也许可以试试技术的方式。
随着AI的日益普及和在各个领域的加速落地,很多企业不断尝试将自然语言处理、语义情感分析等技术应用到智能客服、交互机器人等领域。个推也在自然语言处理及人工智能领域拥有丰富的实践经验。

本文主要借这个有趣的实操案例,为大家分享如何基于NLP进行语义情感分析。

一、准备数据

本次实验,我们使用的是从GitHub下载的开源数据集:数据集来自新浪微博,一共361744行数据,并且已经有“喜悦” “愤怒” “厌恶” “低落”等四类标签的label标记。

二、数据预处理

我们知道,文本数据是一种非结构化的数据,且数据内部存在许多像标点、表情符号等类型的特殊字符。因此,我们要先对数据进行一些预处理。

首先,我们先剔除了文本中的一些特殊字符,并对文本进行了中文分词。

在该步骤,为了提升模型效果,我们一般需要建立停用词库,并在文本中将停用词予以剔除。但是考虑到在情感分析中,许多停用词其实有可能会对分类结果产生影响。例如对话时的“呀”,往往带有喜悦的情感色彩。因此在这里,我们并未将这一类的词汇进行剔除。

当然你也可以尝试自定义一个停用词库,并比较一下最后的分类效果。

接下来,我们进入第二步。我们按照7:3的比例将数据集分成了训练集和测试集这两个数据集。同时,我们也对每个词进行了编码,并将文本的序列调整成为相同的长度。

再接着,我们通过word2vec预训练来得到词向量,并且通过观察单词的相似度,对词向量的质量进行了检验。

从下图,可以看到,相似的单词还是基本符合预期的。

三、模型训练

将数据进行预处理之后,我们就可以将数据“喂入”到分类模型中。业内常用的经典文本分类模型有FastText(一种快速文本分类器)、TextCNN(利用卷积神经网络对文本进行分类的算法)、R-CNN(Region-CNN,用于实现目标检测)、Han(关键词提取算法)等。

下图是我们基于最简单的FastText算法进行文本分类的过程:

我们对该算法模型进行了10轮的持续迭代。在测试集上,该模型的准确率达到了0.582。然后,我们将FastText模型结果作为我们此次实验的baseline模型结果。

我们又分别对TextCNN、R-CNN、BiLSTM + Attention进行了测试,下表对不同算法模型的效果进行了梳理和对比:

由上表我们可以看到,相较而言,还是BiLSTM + Attention的预测效果更好。

下图是我们使用BiLSTM + Attention进行模型预测的代码结构:

Attention的结构和加权池化层类似,我们其实可以将权重提取出来并且进行可视化:

四、模型预测

接下来,我们将训练好的BiLSTM + Attention模型进行封装,并看一下该模型的预测效果。

通过下表,可以看到,模型的训练效果还是比较令人满意的,对于“呵呵”和“哈哈哈”、“了”和“啦”这些语气词之间的微妙情绪差别都能进行相对准确的判断:

至此,本次基于NLP进行情感分析的模型训练实验也就基本完成了。

这其中其实还有许多可以优化的点,例如:针对每个标签类别占比不均衡的情况,可以进行loss修改;不仅仅可以对每个类别的标签做onehot处理,还可以将label本身的文字信息做embedding等等。感兴趣的童鞋可以在自己的实操中尝试进行更多的优化。

总结

目前,虽然AI技术的应用已经越来越成熟和普遍,算法模型也一定程度上能够对文本的情感进行判断。但是Mr.Tech也要温馨提醒大家,在现实的人际交往中,我们彼此之间还是要真诚沟通、用心交流哦。

未来,个推将不断在自然语言处理、机器视觉等前沿技术领域开展实践,也会持续将其中有价值的内容分享给大家。我们相信技术的飞速发展一定会给我们的生活带来很多有意义、有趣的改变。我们也期待读者朋友们,多多和我们交流自己的前沿实战和趣味实操案例。

收起阅读 »

出售技能,uniapp vue后台

混合开发

需要帮忙写项目或者代写页面的联系我QQ:728045048

需要帮忙写项目或者代写页面的联系我QQ:728045048

app端uni.request,requestType无效

登录 api

将 uni.request换成uni.downloadFile
// #ifdef H5
let blob = new Blob([ArrayBuffer])
this.codeSrc = URL.createObjectURL(blob)
// #endif
// #ifdef APP-PLUS
uni.downloadFile({url:'',success:res=>{
this.codeSrc = res.tempFilePath
}})
// #endif

继续阅读 »

将 uni.request换成uni.downloadFile
// #ifdef H5
let blob = new Blob([ArrayBuffer])
this.codeSrc = URL.createObjectURL(blob)
// #endif
// #ifdef APP-PLUS
uni.downloadFile({url:'',success:res=>{
this.codeSrc = res.tempFilePath
}})
// #endif

收起阅读 »

uni-app纯webview项目代码示例,包括返回按钮的处理以及user-agent的更改

Webview

这个方法需要nvue,你可以新建项目时,把默认的index.vue改成index.nvue,然后用下面的代码全部覆盖

<script>  
    export default {  
        onLoad() {  
            const url = 'https://tools.qvdd.cn/request-headers' // 改成你自己的链接  
            const uaAppend = 'your_ua_content' // 改成你自己的ua  
            plus.navigator.setUserAgent(plus.navigator.getUserAgent() + ' ' + uaAppend)  
            const sysInfo = uni.getSystemInfoSync()  
            const styles = { // https://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewStyles  
                width: sysInfo.safeArea.width,  
                top: sysInfo.statusBarHeight,  
                bottom: 0,  
                scalable: true, // 默认不能缩放,在访问PC页面时体验不好  
                errorPage: '/hybrid/html/error.html', // 网页打不开时打开这个页面  
                cachemode: 'cacheElseNetwork' // 默认是 default  
            }  
            const wv = plus.webview.open(url, 'id', styles)  
            plus.key.addEventListener('backbutton', ()=>{  
                wv.canBack((e)=>{  
                    if (e.canBack) {  
                        wv.back()  
                    } else {  
                        uni.showModal({  
                            title: '是否退出App?',  
                            success: (res) => {  
                                if (res.confirm) {  
                                    plus.runtime.quit()  
                                }  
                            }  
                        })  
                    }  
                })  
            })  
        }  
    }  
</script>

其中的/hybrid/html/error.html可以自己放个漂亮的404模板,我是简单这样写的:

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8" />  
        <meta name="viewport" content="width=device-width, initial-scale=1">  
        <title>error</title>  
    </head>  
    <body>  
        <div style="padding: 15px;">  
            网页打开失败  
        </div>  
    </body>  
</html>

pages.json里设置"navigationStyle": "custom",隐藏顶部标题栏
原文出处:https://coding3.com/archives/uniapp-webview.html

继续阅读 »

这个方法需要nvue,你可以新建项目时,把默认的index.vue改成index.nvue,然后用下面的代码全部覆盖

<script>  
    export default {  
        onLoad() {  
            const url = 'https://tools.qvdd.cn/request-headers' // 改成你自己的链接  
            const uaAppend = 'your_ua_content' // 改成你自己的ua  
            plus.navigator.setUserAgent(plus.navigator.getUserAgent() + ' ' + uaAppend)  
            const sysInfo = uni.getSystemInfoSync()  
            const styles = { // https://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewStyles  
                width: sysInfo.safeArea.width,  
                top: sysInfo.statusBarHeight,  
                bottom: 0,  
                scalable: true, // 默认不能缩放,在访问PC页面时体验不好  
                errorPage: '/hybrid/html/error.html', // 网页打不开时打开这个页面  
                cachemode: 'cacheElseNetwork' // 默认是 default  
            }  
            const wv = plus.webview.open(url, 'id', styles)  
            plus.key.addEventListener('backbutton', ()=>{  
                wv.canBack((e)=>{  
                    if (e.canBack) {  
                        wv.back()  
                    } else {  
                        uni.showModal({  
                            title: '是否退出App?',  
                            success: (res) => {  
                                if (res.confirm) {  
                                    plus.runtime.quit()  
                                }  
                            }  
                        })  
                    }  
                })  
            })  
        }  
    }  
</script>

其中的/hybrid/html/error.html可以自己放个漂亮的404模板,我是简单这样写的:

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8" />  
        <meta name="viewport" content="width=device-width, initial-scale=1">  
        <title>error</title>  
    </head>  
    <body>  
        <div style="padding: 15px;">  
            网页打开失败  
        </div>  
    </body>  
</html>

pages.json里设置"navigationStyle": "custom",隐藏顶部标题栏
原文出处:https://coding3.com/archives/uniapp-webview.html

收起阅读 »