函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩、免运维、高可靠的方式运行。通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻辑,编写函数代码,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统,并按实际运行消耗的资源计费。极大地提高了开发和运维效率,减小了运作成本。

相比于传统的架构,函数服务构建的无服务器架构具有如下优点:

1. 无需关注任何服务器,只需关注核心业务逻辑,提高开发和运维效率;

2. 函数运行随业务量弹性伸缩,按需付费,执行才计费,对于访问量波峰波谷非常明显的场景可以减少大量成本;

3. 通过简单的配置即可连通函数工作流和其它各云服务,通过事件触发函数,灵活易扩展;

为了进一步让大家感受函数工作流的优势,我们将介绍如何通过云函数快速构建一个无服务器的敏感词过滤系统,本文我们主要关注后端系统,前端的表现形式很多,大家可以自行构建。如下图,该系统会识别用户上传的文本内容是否包含敏感信息(如色情、政治等),并对这些词语进行过滤。

试想,如果我们通过传统的模式开发此应用,需要如何开发?

即使是基于现在的云平台,我们也仍需要购买云服务器,关注其规格、镜像、网络等各指标的选型和运维,然后在开发过程中可能还需要考虑与其他云服务的集成使用问题,使代码中耦合大量非业务代码,并且服务器等资源也并非是按需的,特别是对于访问量波峰波谷非常明显的场景,会造成大量多余的费用。

现在我们可以通过函数工作流服务来快速构建这个系统,并且完全无需关注服务器,且弹性伸缩运行、按需计费,如图:

创建函数,在函数中调用华为云内容检测服务提供的文本检测接口,实现文本的敏感词检测,并为该函数配置一个APIG触发器,对外提供敏感词过滤的API,从而构建出一个完整的敏感词过滤的无服务器系统。客户端调用API,他会自动触发函数执行,而开发者编写的函数只需实现接收到文本之后如何处理文本的逻辑(调用内容检测服务服务)即可,最后将结果返回给客户端。至此,我们就构建了一个完整的无服务器敏感词过滤系统。

现在,我们将介绍如何端到端地将此无服务器系统构建出来。

1. 准备工作

进入华为云内容检测服务,申请开通文本内容检测,成功申请后边可以调用内容检测服务提供的文本检测接口了。

2. 创建函数

进入函数工作流服务页面,创建函数,实现文本检测的接口调用和敏感词过滤,代码如下(Python):

# -*- coding:utf-8 -*-

import json

import base64

import urllib

import urllib2

import ssl

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

def do_filter(msg,str_list):

result = ''

try:

if len(str_list) <=0:

return msg

for str in str_list:

str_tmp = msg.replace(str,'')

msg = str_tmp

result = msg

except:

print("_do_filter catch an exception!")

return result

def filter(context, msg):

result = ''

try:

ssl._create_default_https_context = ssl._create_unverified_context

token = context.getToken();

headers = {'Content-Type':'application/json;charset=utf8','X-Auth-Token':token}

url = "https://ais.cn-north-1.myhwclouds.com/v1.0/moderation/text"

values = {}

values['categories'] = ['porn','ad','politics','abuse','contraband']

#msg = base64.b64encode(msg)

item = {'type':'content','text':msg}

values['items'] = [item]

data = json.dumps(values)

print("data: %s"%data)

request = urllib2.Request(url,data,headers)

rsp = urllib2.urlopen(request)

http_rsp = rsp.read()

print("http response: %s" %http_rsp)

json_rsp = json.loads(http_rsp)

result = json_rsp['result']

suggestion = result['suggestion']

if suggestion == 'pass':

print("input msg have passed the checking!")

result = msg

else:

detail = result['detail']

if detail.has_key('porn'):

list_porn = detail['porn']

msg = do_filter(msg,list_porn)

if detail.has_key('ad'):

list_ad = detail['ad']

msg = do_filter(msg,list_ad)

if detail.has_key('politics'):

list_politics = detail['politics']

msg = do_filter(msg,list_politics)

if detail.has_key('abuse'):

list_abuse = detail['abuse']

msg = do_filter(msg,list_abuse)

if detail.has_key('contraband'):

list_contraband = detail['contraband']

msg = do_filter(msg,list_contraband)

result = msg

except Exception, e:

print e

print("filter catch an exception!")

return result

def handler (event, context):

print("message filter begin!")

result = ""

response = {}

http_method = event.get('httpMethod')

if http_method == 'OPTIONS':

response = {

'statusCode': 200,

'isBase64Encoded': True,

'headers': {

"Content-Type": "application/json; charset=utf-8",

"Access-Control-Allow-Origin": "*",

"Access-Control-Allow-Headers": "Content-Type,Accept",

"Access-Control-Allow-Methods": "GET,POST,PUT,DELETE"

},

'body': base64.b64encode('{"result":'+ '"' + result +'"}'),

}

return response

body = event.get('body')

body_decode = base64.b64decode(body)

json_object = json.loads(body_decode)

msg = json_object['msg']

print('msg : %s'%msg)

try:

result = filter(context, msg)

response = {

'statusCode': 200,

'isBase64Encoded': True,

'headers': {

"Content-Type": "application/json; charset=utf-8",

"Access-Control-Allow-Origin": "*",

"Access-Control-Allow-Headers": "Content-Type,Accept",

"Access-Control-Allow-Methods": "GET,POST,PUT,DELETE"

},

'body': base64.b64encode('{"result":'+ '"' + result +'"}'),

}

except:

print("function catch an exception!")

return response

函数创建完成之后,为其配置具有IAM访问权限的委托,因为本函数代码中获取用户的ak、sk需要拥有访问IAM的权限。

3. 创建APIG触发器

为函数配置一个APIG触发器,这样便得到一个调用该函数的HTTP(S) API,供外部调用。

4. 测试

使用postman等工具向上一步中创建的APIG触发器的接口发送post请求,body体为:{“msg”: “过滤检测的文本”},查看返回信息。

比如发送 {"msg": "just fuck ..."}, 返回体为 {"result": "just  ..."}

自此,我们就完整地实现了一个无服务器的敏感词过滤后端系统。

欢迎体验!

https://www.huaweicloud.com/product/functiongraph.html?utm_source= zjqd&utm_medium=mediafree&utm_campaign=functiongraph&utm_content=article-0727-1

5分钟搞定敏感词过滤!相关推荐

  1. python敏感词过滤replace_Serverless 实战:3 分钟实现文本敏感词过滤

    敏感词过滤是随着互联网社区一起发展起来的一种阻止网络犯罪和网络暴力的技术手段,通过对可能存在犯罪或网络暴力的关键词进行有针对性的筛查和屏蔽,能够防患于未然,将后果严重的犯罪行为扼杀于萌芽之中. 随着各 ...

  2. 38个敏感词_Serverless 实战:3 分钟实现文本敏感词过滤

    敏感词过滤是随着互联网社区一起发展起来的一种阻止网络犯罪和网络暴力的技术手段,通过对可能存在犯罪或网络暴力的关键词进行有针对性的筛查和屏蔽,能够防患于未然,将后果严重的犯罪行为扼杀于萌芽之中. 随着各 ...

  3. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇"5分钟Serverless实践"系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例 ...

  4. java HashMap实现中文分词器 应用:敏感词过滤实现

    今天下午部门内部技术分享是分词器算法.这次的主讲是大名鼎鼎的Ansj分词器的作者-孙健. 作者简介: Ansj分词器作者 elasticsearch-sql(elasticsearch的sql插件)作 ...

  5. 敏感词过滤算法 为内容保驾护航 Java/.Net/C++/c/Python等语言是如何进行敏感词打码限制的 高效防范违规内容

    有人的地方,就有江湖,有输入框的地方,就有注入风险!有输入框的地方,就有敏感词!敏感词就像一个平台杀手,可能直接导致平台被封锁! 敏感词是一个APP.一个网站.一个内容平台的"杀手" ...

  6. 汉字转拼音 敏感词过滤 禁用词查找 提高程序效率另外一种思路:反向思维

    汉字转拼音 敏感词过滤 禁用词查找 这些很常用的互联网需求 大家出道时是怎么做的? 大家偷懒时是怎么做的? 常规算法 - 从数据库到用户提交内容去匹配: 把数据库中所有数据压到大数组中(这时数据越多, ...

  7. 敏感词过滤 java

    学习目标: 今天我们来学习一下,java 完成敏感词过滤. 完成思路: 1. 敏感词存入前缀树 前缀树: 名称:trie.字典树.查找树 特点:查找效率高.消耗内存大(也就是以空间换时间) 应用:字符 ...

  8. 开源了一个 JavaScript 版敏感词过滤库

    最近在做一个项目,寻遍了 Node 开源社区居然没有发现一个好用的敏感词过滤库,有那么几个库外观上看起来似乎还不错,用起来却一塌糊涂,震惊有余,失望至极.于是花了一天时间自己撸了一个库,库名叫 fas ...

  9. python使用教程pandas-十分钟搞定pandas(入门教程)

    本文是对pandas官方网站上<10Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯上 ...

最新文章

  1. loss函数为何选交叉熵
  2. 基于 TensorFlow 在手机端实现文档检测
  3. 如何测量PN中的耗散层两边的电位差?
  4. ABAP 字符串操作
  5. python的os模块基本使用
  6. 如何在android模拟器中安装apk
  7. 深度学习 --- 优化入门一(梯度下降所面临的问题)
  8. 如何用简单易懂的例子解释隐马尔可夫模型?(入门篇)
  9. ios模拟器 安装ipa_用iOS模拟器安装App的方法
  10. 北京/上海内推 | 微软亚洲研究院系统与网络组招聘全职实习生
  11. 计算机网络适配器高级属性,右击我的电脑——属性——设备管理器——1394网络适配器下面那个选项右击属性——高级——大量传送减负——...
  12. Ubuntu配置静态IP以及interfaces配置不生效问题解决
  13. 教育教培行业年终工作总结ppt制作幻灯片模板设计.pptx
  14. 如何解决MathPage.wll文件找不到问题
  15. paypal简单分享
  16. Linux(Ubuntu)入门——2.Linux基础命令
  17. 在GridControl中使用GridLookUpEdit的正确姿势
  18. C语言函数-形参和实参
  19. Linux手动安装和部署github
  20. 2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改

热门文章

  1. 疑似苹果平板电脑规格表曝光
  2. 网站哪些功能可以提高用户体验度?
  3. Qt+QtWebApp开发笔记(一):QtWebApp介绍、下载和搭建基础封装http轻量级服务器Demo
  4. 黑苹果双系统安装教程macOS High Sierra 10.13.x
  5. nginx端口映射配置(Windows)
  6. Nginx 访问加密
  7. 华为鸿蒙价格是多少,华为5G新旗舰已确认,双曲面屏+升级到鸿蒙2.0,价格很感人...
  8. mac、windows 配置python国内镜像源
  9. java html读取数据库数据类型,从Word(Docx)读取方程式和公式到html并使用java保存数据库(示例代码)...
  10. 2017年年终总结 韩俊强的博客