如何构建智能反垃圾邮件WordPress插件

在本文中,我们将看到我们如何构建一个使用机器学习来阻止垃圾邮件,成人邮件,甚至是负面评论的WordPress插件。该插件与WordPress 3.6v或更高版本兼容,并使用Datumbox API 1.0v。尽管本文讨论了WordPress插件的开发,但我们应该注意,通过使用Datumbox API,可以非常容易地保护任何类型的在线社区免受垃圾邮件,攻击性或不适当的内容侵害。阅读下面,你会看到如何达成目的。

更新:Datumbox机器学习框架现在是开源的,可以免费下载。如果要构建反垃圾邮件分类器而不触及API限制,请使用com.datumbox.applications.nlp.TextClassifier类。

您可以从WordPressGithub下载机器学习反垃圾邮件WordPress插件的完整代码。

WordPress插件的目标

我们的目标是建立一个插件,每当有人提交新的评论时就会触发。它应该使博客所有者能够选择他/她希望阻止的内容的类型。为了使插件变得智能化并利用机器学习,我们将使用Datumbox的3个可用API函数:垃圾邮件检测,成人内容检测和情感分析。

安装插件

安装插件是非常容易的:

  1. 只需下载它,解压缩zip文件,并将包含的“machine-learning-antispam”文件夹移动到WordPress插件文件夹中。
  2. 转到您的管理区域,点击插件菜单并激活插件。
  3. 最后进入左侧菜单并选择设置=>机器学习反垃圾邮件。您只需添加您的Datumbox API密钥,然后选择您要过滤的评论类型(垃圾邮件,成人或负面评论)。

使用插件需要你有一个Datumbox API密钥。您可以通过注册 Datumbox账户免费获得一个。注册号之后,到您的API证书区域复制您的API密钥并将其粘贴到上述配置页面中。

构建机器学习反垃圾邮件插件

首先,我们创建一个名为“机器学习反垃圾邮件”的文件夹。这个文件夹将包含我们的插件的所有文件。为了能够轻松地调用Datumbox API,我们下载了PHP Datumbox API客户端,并在之前的文件夹中复制了DatumboxAPI.php文件。我们这样做是因为DatumboxAPI类为我们提供了一个非常简单的接口来调用Datumbox API。同样,您将在稍后看到,本教程最简单的部分是将机器学习功能集成到您的软件中。这是因为Datumbox API非常易于使用,并且提供了多种已经实现的各种语言的API客户端。

第二步是创建一个“options.php”文件,其中将包含管理插件所需的所有配置功能和管理页面。这是我们放置添加我们的插件在设置菜单中的代码并打印配置页面的地方。要了解更多信息,我强烈建议您阅读官方WordPress指南“ 创建选项页面 ”。这里是options.php文件的代码:

<?phpif (!function_exists('add_action')) {    die();} 
add_action('admin_menu', 'machinelearningantispam_admin_menu'); 
function machinelearningantispam_admin_menu() {
    add_submenu_page('options-general.php', __('Machine Learning Antispam'), __('Machine Learning Antispam'), 'manage_options', 'machine-learning-antispam-config', 'machinelearningantispam_conf_page');         //call register settings function
    add_action( 'admin_init', 'machinelearningantispam_settings' );} 
function machinelearningantispam_settings() {
    register_setting( 'machinelearningantispam-settings-group', 'datumbox_api_key');
    register_setting( 'machinelearningantispam-settings-group', 'machinelearningantispam_filterspam');
    register_setting( 'machinelearningantispam-settings-group', 'machinelearningantispam_filteradult');
    register_setting( 'machinelearningantispam-settings-group', 'machinelearningantispam_filternegative');} 
function machinelearningantispam_conf_page() {
        ?>    <div class="wrap">    
        <h2><?php echo __('Machine Learning Antispam'); ?></h2>     
        <?php        
        if(get_option('datumbox_api_key')=='') {    
        ?>        
        <p><b><?php 
        echo __('In order to use this plugin you must have a Datumbox API key. Sign up for a Free Datumbox Account:'); ?></b></p>        
        <button onclick="window.location='http://www.datumbox.com/users/register/';" class="button button-primary"><?php echo __('Register Now'); 
        ?></button>        
        <br/>       
        <br/>        
        <hr/><br/>    
        <?php        
        }    
        ?>         
        <form method="post" action="options.php">       
         <?php settings_fields( 'machinelearningantispam-settings-group' ); 
        ?>        
        <?php //do_settings( 'machinelearningantispam-settings-group' ); 
        ?>        
        <table class="form-table">            
        <tr valign="top">            
        <th scope="row"><?php echo __('Datumbox API Key'); ?></th>            
        <td><input type="text" name="datumbox_api_key" value="<?php echo get_option('datumbox_api_key'); ?>" /></td>            
        </tr>            <tr valign="top">           
        <th scope="row"><?php echo __('Filter Spam Comments'); ?></th>            
        <td><input type="checkbox" name="machinelearningantispam_filterspam" value="1" <?php 
        echo (get_option('machinelearningantispam_filterspam'))?'checked="checked"':''; ?> /></td>            
        </tr>            
        <tr valign="top">            
        <th scope="row"><?php echo __('Filter Adult Comments'); ?></th>            
        <td><input type="checkbox" name="machinelearningantispam_filteradult" value="1" <?php echo (get_option('machinelearningantispam_filteradult'))?'checked="checked"':''; ?> /></td>            
        </tr>            
        <tr valign="top">            
        <th scope="row"><?php echo __('Filter Negative Comments'); ?></th>            
        <td><input type="checkbox" name="machinelearningantispam_filternegative" value="1" <?php echo (get_option('machinelearningantispam_filternegative'))?'checked="checked"':''; ?> /></td>            
        </tr>        
        </table>                 
        <?php submit_button(); ?>    
        </form>    
        </div>   
<?php } ?>

第三步,我们继续开发我们插件的核心文件。我们创建一个名为machine-learning-antispam.php的文件,并在其中放入每次提交新评论时运行的machinelearningant_pam_check_comment()函数。该功能检查选项并调用DatumboxAPI服务,以验证评论是垃圾邮件,成人邮件还是负面邮件。如果评论被Datumbox服务分类为垃圾邮件或成人评论被标记为“垃圾邮件”,而如果它被证明是负面的,则被标记为“等待”。这里是文件的代码:

<?php
/**
* Plugin Name: Machine Learning Antispam
* Plugin URI: http://www.datumbox.com
* Description: This WordPress Plugin uses Machine Learning to detect spam and adult content comments and mark them as spam. Additionally it allows you to filter negative comments and keep them pending for approval.
* Version: 1.0
* Author: Vasilis Vryniotis
* Author URI: http://www.datumbox.com
* License: GPL2
*/
if (!function_exists('add_action')) {
   die(); //block direct web requests
}
require_once(dirname( __FILE__ ).'/DatumboxAPI.php'); //require the DatumboxAPI client to easily call Datumbox 
APIif (is_admin()) { //if admin include the admin specific 
functionsrequire\_once(dirname( \_\_FILE\_\_ ).'/options.php');}
function machinelearningantispam_get_key() {
   return get\_option('datumbox\_api\_key'); //return the api key of datumbox}
function machinelearningantispam_call_datumbox($commentText,$type_of_check) {
   $apiKey=machinelearningantispam\_get\_key(); //fetch the API key
   if($apiKey==false || $apiKey=='') {
       return true; //don't block the comment if the plugin is not well configured}
   $DatumboxAPI = new DatumboxAPI($apiKey); //initialize DatumboxAPI Client
   if($type\_of\_check=='spam') {
       $response=$DatumboxAPI->SpamDetection($commentText); //Call Spam Detection service
       if($response=='spam') { //if spam return false 
       return false;}}
   else if($type\_of\_check=='adult') {
       $response=$DatumboxAPI->AdultContentDetection($commentText); //Call Adult Content Detection service
       if($response=='adult') { //if adult return false
       return false;}}
   else if($type\_of\_check=='negative') {
       $response=$DatumboxAPI->SentimentAnalysis($commentText); //Call Sentiment Analysis service
       if($response=='negative') { //if negative return false
       return false;}}
   unset($DatumboxAPI);
   return true;}
function machinelearningantispam_check_comment($commentdata) {
   if(get\_option('machinelearningantispam\_filterspam') && machinelearningantispam\_call\_datumbox($commentdata['comment\_content'],'spam')==false) {//if Spam filtering is on and the Datumbox Service considers it spam then mark it as spam
   add\_filter('pre\_comment\_approved', 'machinelearningantispam\_result\_spam');}
   else if(get\_option('machinelearningantispam\_filteradult') && machinelearningantispam\_call\_datumbox($commentdata['comment\_content'],'adult')==false) {//if Adult filtering is on and the Datumbox Service considers it adult then mark it as spam
   add\_filter('pre\_comment\_approved', 'machinelearningantispam\_result\_spam');}
   else if(get\_option('machinelearningantispam\_filternegative') && machinelearningantispam\_call\_datumbox($commentdata['comment\_content'],'negative')==false) {//if Negative filtering is on and the Datumbox Service considers it negative then mark it as pending
   add\_filter('pre\_comment\_approved', 'machinelearningantispam\_result\_pending');}
   return $commentdata;}
function machinelearningantispam_result_spam() {
   return 'spam';}
function machinelearningantispam_result_pending() {
   return 0;}
add_action( 'preprocess_comment' , 'machinelearningantispam_check_comment' );
?>

正如我们上面看到的,插件的2个主要功能是machinelearningantpam_call_datumbox()和machinelearningantpam_check_comment()。第一个函数使用Datumbox PHP API客户端来调用API函数。第二个函数检查插件是否被配置为阻止垃圾邮件,成人和负面评论,如果这些启用它调用的API。如果API将评论标记为不合适,我们将评论的状态更新为垃圾邮件或未决。

就这样!你现在有一个插件,能够打击机器学习的力量垃圾邮件!

你喜欢这篇文章吗?请花一点时间在Twitter上分享。

本文的版权归 用户1127524 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

真实实践中的MeritMS与Project Wise的校审流程对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

10510
来自专栏ImportSource

NoSQL分布式模型实现之一:Single Server

翻译内容: NoSQL Distilled 第四章 Distribution Models 作者简介: ? 本节摘要: 第四章我们主要说的是NoSQL运...

275100
来自专栏高性能服务器开发

微信、陌陌等著名IM软件设计架构详解

https://blog.csdn.net/justinjing0612/article/details/38322353

49130
来自专栏FreeBuf

CVE-2018-5711:一张GIF图片就能让服务器宕机的PHP漏洞

最近,台湾Web漏洞挖掘大牛Orange Tsai在对一些Web开发框架和程序实现模块进行安全审核的过程中,发现了一些有意思的漏洞。就比如说,这个PHP的CVE...

32090
来自专栏GA小站

UTM参数使用30问——既UTM参数使用指南(2018)

有很多缺少Google Analytics的UTM参数而导致的跟踪错误案例,我在Google Analytics Community和 Quora 看到过成千上...

44320

异步数据存储

在过去几年工作中,对NoSQL数据存储使用经验以及随着NoSQL成为主要的数据存储和检索方式,让我洞察到应用程序必经的发展方向。至少对于基于Web和基于云的应用...

237110
来自专栏微信公众号:Java团长

分布式与集群的区别

简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

17410
来自专栏Crossin的编程教室

一键下载:将知乎专栏导出成电子书

老是有同学问,学了 Python 基础后不知道可以做点什么来提高。今天就再用个小例子,给大家讲讲,通过 Python 和爬虫,可以完成怎样的小工具。

34210
来自专栏PHP在线

NoSQL数据库的分布式算法

原文出处: highlyscalable.wordpress.com 译文出处:juliashine 系 统的可扩展性是推动NoSQL运动发展的的主要理由...

33980
来自专栏机器学习算法与Python学习

推荐几个适合新人上手的Python项目

17780

扫码关注云+社区

领取腾讯云代金券