本文介绍了使用内容检测API Java SDK管理自定义文本库的示例代码。您可以使用Java SDK自定义文本库并管理文本库中的文本内容,满足文本反垃圾检测场景的个性化需求。根据文本类型的不同,文本库分为关键词文本库和相似文本文本库;根据管控目的不同,分本库分为白名单、黑名单、疑似名单。

准备工作

在进行具体的服务调用之前,请参见以下步骤,完成准备工作:
  1. 创建阿里云AccessKeyId和AccessKeySecret。具体请参见创建AccessKey
  2. 安装Java依赖。具体请参见安装Java依赖
  3. 下载并在项目工程中引入Extension.Uploader工具类

获取文本库列表

  • 获取关键词文本库列表
    DescribeKeywordLibRequest describeKeywordLibRequest = new DescribeKeywordLibRequest();
            describeKeywordLibRequest.setServiceModule("open_api");
    
            try {
                //该方法将返回所有文本库,包括文本反垃圾的关键词文本库、文本反垃圾的相似文本文本库、图片广告的关键词文本库、语音反垃圾的关键词文本库
                DescribeKeywordLibResponse describeKeywordLibResponse = client.getAcsResponse(describeKeywordLibRequest);
                System.out.println(JSON.toJSONString(describeKeywordLibResponse));
    
                //过滤出文本反垃圾场景配置的文本库
                List<DescribeKeywordLibResponse.KeywordLib> allLibs = describeKeywordLibResponse.getKeywordLibList();
                List<DescribeKeywordLibResponse.KeywordLib> textAntispamKeywordLibs = new ArrayList<DescribeKeywordLibResponse.KeywordLib>();
                for (DescribeKeywordLibResponse.KeywordLib keywordLib : allLibs) {
                    String LibType = keywordLib.getLibType();
                    String resourceType = keywordLib.getResourceType();
                    String source =  keywordLib.getSource();
                    //获取文本反垃圾自定义的关键词文本库
                    if ("textKeyword".equals(LibType) && "TEXT".equals(resourceType)  && "MANUAL".equals(source)) {
                        textAntispamKeywordLibs.add(keywordLib);
                    }
                    //获取文本反垃圾回流的关键词文本库
                    if ("textKeyword".equals(LibType) && "TEXT".equals(resourceType)  && "FEEDBACK".equals(source)) {
                        textAntispamKeywordLibs.add(keywordLib);
                    }
                }
    
                System.out.println(JSON.toJSONString(textAntispamKeywordLibs));
            } catch (ClientException e) {
                e.printStackTrace();
            }
  • 获取相似文本文本库列表(包含自定义和系统回流的相似文本文本库)
    DescribeKeywordLibRequest describeKeywordLibRequest = new DescribeKeywordLibRequest();
            describeKeywordLibRequest.setServiceModule("open_api");
    
            try {
                //该方法将返回所有文本库,包括文本反垃圾的关键词文本库、文本反垃圾的相似文本文本库、图片广告的关键词文本库、语音反垃圾的关键词文本库
                DescribeKeywordLibResponse describeKeywordLibResponse = client.getAcsResponse(describeKeywordLibRequest);
                System.out.println(JSON.toJSONString(describeKeywordLibResponse));
    
                //过滤出相似文本文本库
                List<DescribeKeywordLibResponse.KeywordLib> allLibs = describeKeywordLibResponse.getKeywordLibList();
                List<DescribeKeywordLibResponse.KeywordLib> similarTextLibs = new ArrayList<DescribeKeywordLibResponse.KeywordLib>();
                for (DescribeKeywordLibResponse.KeywordLib keywordLib : allLibs) {
                    String LibType =  keywordLib.getLibType();
                    String resourceType = keywordLib.getResourceType();
                    String source =  keywordLib.getSource();
                    //获取文本反垃圾自定义的相似文本文本库
                    if("similarText".equals(LibType) && "TEXT".equals(resourceType)  && "MANUAL".equals(source)) {
                        similarTextLibs.add(keywordLib);
                    }
    
                    //获取文本反垃圾回流的相似文本文本库
                    if("similarText".equals(LibType) && "TEXT".equals(resourceType)  && "FEEDBACK".equals(source)) {
                        similarTextLibs.add(keywordLib);
                    }
                }
    
                System.out.println(JSON.toJSONString(similarTextLibs));
            } catch (ClientException e) {
                e.printStackTrace();
            }

创建文本库

  • 创建关键词文本库
    CreateKeywordLibRequest createKeywordLibRequest = new CreateKeywordLibRequest();
            createKeywordLibRequest.setServiceModule("open_api");
            createKeywordLibRequest.setName("测试关键词文本库");
            //设置为文本反垃圾场景使用
            createKeywordLibRequest.setResourceType("TEXT");
            //设置类型为关键词
            createKeywordLibRequest.setLibType("textKeyword");
            //关键词只能创建黑库
            createKeywordLibRequest.setCategory("BLACK");
    
            try {
                CreateKeywordLibResponse describeKeywordLibResponse = client.getAcsResponse(createKeywordLibRequest);
                System.out.println(JSON.toJSONString(describeKeywordLibResponse));
            } catch (ClientException e) {
                e.printStackTrace();
            }
  • 创建相似文本文本库
    CreateKeywordLibRequest createKeywordLibRequest = new CreateKeywordLibRequest();
            createKeywordLibRequest.setServiceModule("open_api");
            createKeywordLibRequest.setName("测试相似文本文本库");
            //设置为文本反垃圾场景使用
            createKeywordLibRequest.setResourceType("TEXT");
            //设置类型为相似文本
            createKeywordLibRequest.setLibType("similarText");
            //相似文本文本库支持创建黑名单库、白名单、疑似名单
            createKeywordLibRequest.setCategory("BLACK");
    
            try {
                CreateKeywordLibResponse describeKeywordLibResponse = client.getAcsResponse(createKeywordLibRequest);
                System.out.println(JSON.toJSONString(describeKeywordLibResponse));
            } catch (ClientException e) {
                e.printStackTrace();
            }

修改文本库

更新文本库库名以及修改文本库所适用的bizType。

UpdateKeywordLibRequest updateKeywordLibRequest = new UpdateKeywordLibRequest();
        //设置要操作的文本库id
        updateKeywordLibRequest.setId(2693);
        //设置新的文本库名称
        updateKeywordLibRequest.setName("测试修改名称");
        //设置新的bizType
        updateKeywordLibRequest.setBizTypes(JSON.toJSONString(Arrays.asList("comment", "title")));

        try {
            UpdateKeywordLibResponse updateKeywordLibResponse = client.getAcsResponse(updateKeywordLibRequest);
            System.out.println(JSON.toJSONString(updateKeywordLibResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

删除文本库

注意 删除文本库也将删除文本库下的文本。系统回流的文本库不允许删除。
DeleteKeywordLibRequest deleteKeywordLibRequest = new DeleteKeywordLibRequest();
        //设置要删除的文本库id
        deleteKeywordLibRequest.setId(3353);

        try {
            DeleteKeywordLibResponse deleteKeywordLibResponse = client.getAcsResponse(deleteKeywordLibRequest);
            System.out.println(JSON.toJSONString(deleteKeywordLibResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

查找文本

默认分页获取所有文本。如果设置了Keyword字段,将模糊查找包含该字段值的文本。

DescribeKeywordRequest describeKeywordRequest = new DescribeKeywordRequest();
        //要查询的文本库id
        describeKeywordRequest.setKeywordLibId(2693);
        describeKeywordRequest.setPageSize(10);
        describeKeywordRequest.setCurrentPage(1);
        //可选,用于模糊查
        describeKeywordRequest.setKeyword("你");
        try {
            DescribeKeywordResponse describeKeywordResponse = client.getAcsResponse(describeKeywordRequest);
            System.out.println(JSON.toJSONString(describeKeywordResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

添加文本

CreateKeywordRequest createKeywordRequest = new CreateKeywordRequest();
        //设置文本库id
        createKeywordRequest.setKeywordLibId(2693);
        //要添加的文本
        createKeywordRequest.setKeywords(JSON.toJSONString(Arrays.asList("你好吗", "棒棒哒")));

        try {
            CreateKeywordResponse createKeywordResponse = client.getAcsResponse(createKeywordRequest);
            System.out.println(JSON.toJSONString(createKeywordResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }

删除文本

DeleteKeywordRequest deleteKeywordRequest = new DeleteKeywordRequest();
        //设置文本id
        deleteKeywordRequest.setKeywordLibId(String.valueOf(2693));
        //要删除的文本id
        deleteKeywordRequest.setIds(JSON.toJSONString(Arrays.asList(1, 2)));

        try {
            DeleteKeywordResponse deleteKeywordResponse = client.getAcsResponse(deleteKeywordRequest);
            System.out.println(JSON.toJSONString(deleteKeywordResponse));
        } catch (ClientException e) {
            e.printStackTrace();
        }