全部產品
Search
文件中心

Content Moderation:自訂文本庫

更新時間:Jul 06, 2024

本文介紹了如何使用Java SDK管理自訂文本庫,以滿足文本反垃圾檢測情境的個人化需求。

功能描述

根據文本類型的不同,文本庫分為關鍵詞文本庫和相似文本庫;根據管控目的不同,文本庫分為白名單、黑名單、疑似名單。關於參數的詳細資料,請參見自訂文本庫API文檔

您需要使用Alibaba Content Security Service的API接入地址,調用本SDK介面。關於API接入地址的資訊,請參見接入地址(Endpoint)

前提條件

  • 安裝Java依賴。關於安裝Java依賴的具體操作,請參見安裝Java依賴

    說明

    請一定按照安裝Java依賴頁面中的版本安裝,否則會導致調用失敗。

  • 如果使用本地檔案或者二進位檔案檢測,請下載並在專案工程中引入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);
        // 關鍵詞文本庫ID。無異常則表示建立成功。
        String libId = describeKeywordLibResponse.getId();
    } 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);
        // 相似文本庫ID。無異常則表示建立成功。
        String libId = describeKeywordLibResponse.getId();
    } catch (ClientException e) {
        e.printStackTrace();
    }

修改文本庫

更新文本庫庫名以及修改文本庫所使用的檢測情境。

UpdateKeywordLibRequest updateKeywordLibRequest = new UpdateKeywordLibRequest();
// 設定待操作的文本庫ID。
updateKeywordLibRequest.setId(0);
// 設定新的文本庫名稱。
updateKeywordLibRequest.setName("修改後的名稱");
// 設定新的BizType。
updateKeywordLibRequest.setBizTypes(JSON.toJSONString(Arrays.asList("新的BizType_1", "新的BizType_2")));

try {
    UpdateKeywordLibResponse updateKeywordLibResponse = client.getAcsResponse(updateKeywordLibRequest);
    // 請求ID。無異常則表示修改成功。
    String requestId = updateKeywordLibResponse.getRequestId();
} catch (ClientException e) {
    e.printStackTrace();
}

刪除文本庫

重要

刪除文本庫也將刪除文本庫下的文本。系統迴流的文本庫不允許刪除。

DeleteKeywordLibRequest deleteKeywordLibRequest = new DeleteKeywordLibRequest();
// 設定待刪除的文本庫ID。
deleteKeywordLibRequest.setId(3353);

try {
    DeleteKeywordLibResponse deleteKeywordLibResponse = client.getAcsResponse(deleteKeywordLibRequest);
    // 請求ID。無異常則表示刪除成功。
    String requestId = deleteKeywordLibResponse.getRequestId();
} catch (ClientException e) {
    e.printStackTrace();
}

尋找文本

預設分頁擷取所有文本。如果設定了Keyword欄位,將模糊尋找包含該欄位值的文本。

DescribeKeywordRequest describeKeywordRequest = new DescribeKeywordRequest();
// 設定待查詢的文本庫ID。
describeKeywordRequest.setKeywordLibId(0);
describeKeywordRequest.setPageSize(10);
describeKeywordRequest.setCurrentPage(1);
// 可選,用於模糊查。
describeKeywordRequest.setKeyword("查詢文本");
try {
    DescribeKeywordResponse describeKeywordResponse = client.getAcsResponse(describeKeywordRequest);
    // 總數。
    Integer totalCount = describeKeywordResponse.getTotalCount();
    // 當前頁。
    Integer currentPage = describeKeywordResponse.getCurrentPage();
    // 分頁大小。
    Integer pageSize = describeKeywordResponse.getPageSize();
    for (DescribeKeywordResponse.Keyword keywordItem : describeKeywordResponse.getKeywordList()) {
        // 關鍵詞主鍵ID。
        Integer id = keywordItem.getId();
        // 建立時間。
        String createTime = keywordItem.getCreateTime();
        // 關鍵詞的匹配叫用次數。
        Integer hitCount = keywordItem.getHitCount();
        // 關鍵詞。
        String keyword = keywordItem.getKeyword();
    }
} catch (ClientException e) {
    e.printStackTrace();
}

添加文本

CreateKeywordRequest createKeywordRequest = new CreateKeywordRequest();
// 設定待操作的文本庫ID。
createKeywordRequest.setKeywordLibId(0L);
// 待添加的文本。
createKeywordRequest.setKeywords(JSON.toJSONString(Arrays.asList("關鍵詞_1", "關鍵詞_2")));

try {
    CreateKeywordResponse createKeywordResponse = client.getAcsResponse(createKeywordRequest);
    // 已成功添加的關鍵詞數量。
    Integer successCount = createKeywordResponse.getSuccessCount();
    // 無效的關鍵詞列表,即未添加成功的關鍵詞。
    List<String> invalidKeywordList = createKeywordResponse.getInvalidKeywordList();
} catch (ClientException e) {
    e.printStackTrace();
}

刪除文本

DeleteKeywordRequest deleteKeywordRequest = new DeleteKeywordRequest();
// 設定待操作的文本庫ID。
deleteKeywordRequest.setKeywordLibId(String.valueOf("文本庫ID"));
// 待刪除的文本。
deleteKeywordRequest.setIds(JSON.toJSONString(Arrays.asList(1, 2)));

try {
    DeleteKeywordResponse deleteKeywordResponse = client.getAcsResponse(deleteKeywordRequest);
    // 請求ID。無異常則表示刪除成功。
    String requestId = deleteKeywordResponse.getRequestId();
} catch (ClientException e) {
    e.printStackTrace();
}