前言
项目地址:Text-Sensitivity
笔者在开发小程序时,由于需要对用户输入内容进行敏感词检查,故需要使用现有服务商的相关API(自行开发NLP
产品,难度大)。
我们技术团队初步使用的是腾讯云的文智,但由于我们的使用姿势不正确(腾讯云控制台密钥复制错误,导致鉴权总是失败),放弃了腾讯云的产品,转向对开发者更为友好的阿里云文本反垃圾API。
在成功将阿里云API投入到当前业务中运行后,我们认为在小程序审核上内容安全上,我们的产品是没有问题的。但小程序审核结果大失所望,产品的内容审核机制仍不够完善,于是就有了整合阿里云与腾讯云两大敏感词检测API的想法。
目录结构
├── README.md
├── aliTextSensitivity.js
├── config.json
├── index.js
└── qcloudTextSensitivity.js
复制代码
说明
index.js
:整合阿里云与腾讯云敏感词检测aliTextSensitivity.js
:阿里云敏感词检测qcloudTextSensitivity.js
:腾讯云敏感词检测config.json
:API配置
项目代码
Promise
的使用
在 aliTextSensitivity.js
和 qcloudTextSensitivity.js
使用了 Promise
对业务进行了封装。
在 index.js
使用了 await
语法糖,一定程度简化了开发流程。
核心代码
// index.js
async function checkTextSensitivity(order) {
let aliResult = await aliTextSensitivity(order);
let qcloudResult = await qcloudTextSensitivity(order);
// 当且仅当阿里云和腾讯云的审核通过,该词汇才会被审核通过
if (aliResult === 1 && qcloudResult === 1) {
return 1;
}
return 0;
}
// aliTextSensitivity.js
async function checkTextSensitivity(order) {
bizCfg.requestBody = JSON.stringify({
scenes: ["antispam"],
tasks: [{
"content": order
}]
});
// 使用 Promise 对业务封装
return new Promise((resolve, reject) => {
green(bizCfg, function (result) {
let greenResult = JSON.parse(result);
// 使用阿里云返回的文本建议作为判断阈值
if (greenResult.data[0].results[0].suggestion !== "pass") {
resolve(0);
}
resolve(1);
});
});
}
// qcloudTextSensitivity.js
async function qcloudTextSensitivity(order) {
let promises = [];
// 搭建 Promise 数组
for (let i = 1; i <= 2; i++) {
promises.push(new Promise((resolve ,reject) => {
capi.request({
Region: "gz" ,
Action: "TextSensitivity" ,
content: order ,
type: i
} ,function (err ,data) {
if (err) {
console.log(err);
reject();
}
resolve(data);
});
}));
}
// 对 Promise 数组使用 Promise.all 方法
return new Promise((resolve, reject) => {
Promise.all(promises)
.then(data => {
if (data[0].sensitive > 0.5 || data[1].sensitive > 0.5) {
resolve(0);
}
resolve(1);
})
.catch(() => reject());
});
}
复制代码