最近需要做一个敏感词过滤的东西,有做过的帮忙给个思路

最近需要做一个敏感词过滤的功能,对用户在聊天过程中发送的内容进行实时过滤,有做过此类功能的兄弟们希望给个思路。比如服务器相关配置等,尽量解决关键词数据较多时过滤性能的问题。谢谢!
需要补充的是项目中是PHP环境

阅读 4.8k
5 个回答

直接使用阿里云的敏感词过滤,不过是收费的.但是功能肯定比自己做更加完善

function word_filter($str, $type)
{
    $str = strip_tags(htmlspecialchars_decode($str));
    if (empty($str)) {
        return true;
    }
    if ($type == 1) {
        $sss = 'antispam';//不能有联系方式,用于论坛
    }
    if ($type == 2) {
        $sss = 'keyword';//级别低
    }
    import('Ylfc.Aliyuncs.aliyun-php-sdk-core.Config', EXTEND_PATH); //此处包含类文件根据自己的当时包含
    $ak['accessKeyId'] = 'ggrhrLTAI16kjtyjtjt4FqtSotuB9';
    $ak['accessKeySecret'] = 'gerhkyuklytCXggRQqkIQEggerxD8NOSdJwzRDEimQQP';
    //请替换成你自己的accessKeyId、accessKeySecret
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", $ak["accessKeyId"], $ak["accessKeySecret"]);
    DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
    $client = new DefaultAcsClient($iClientProfile);
    $request = new \Green\Request\V20170112\TextScanRequest();
    $request->setMethod("POST");
    $request->setAcceptFormat("JSON");
    $task1 = array('dataId' => uniqid(),
        'content' => $str
    );
    $request->setContent(json_encode(array("tasks" => array($task1), "scenes" => array($sss))));
    $response = $client->getAcsResponse($request);
    date_default_timezone_set('PRC');
    if (200 == $response->code) {
        $taskResults = $response->data;
        $arr = json_decode(json_encode($taskResults), true);
        foreach ($taskResults as $taskResult) {
            if (200 == $taskResult->code) {
                $sceneResults = $taskResult->results;
                foreach ($sceneResults as $sceneResult) {
                    $scene = $sceneResult->scene;
                    $suggestion = $sceneResult->suggestion;
                    if ($suggestion != 'pass') {
                        return false;
                    }
                }
            }
        }
    }
    return true;
}

我们是在用户注册以及修改用户名是进行这个敏感词过滤。
redis中存储着敏感词库。
用户输入,之后通过kmp算法匹配敏感词是否在用户输入中

据我所知,绝大多数实时敏感词过滤都是node栈

新手上路,请多包涵

业务量小的时候用 2~3人工审核+简单的关键词库就能搞定,量大的时候人工审核成本较高,可以用机器做一遍判断,拿不准的再交给人工审核,可以极大提高识别稳定性以及降低审核成本。说白了,识别效果依赖于三个因素:对政策的熟悉度、敏感词库丰富度和识别算法复杂度,想做好肯定是个大工程,我正在做这块服务,有兴趣可以私聊~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题