阿里云翻译使用

      • 代码
      • 阿里云翻译包

代码

package xxx.yyy.zzz;

import com.aliyun.alimt20181012.models.TranslateGeneralResponse;
import org.apache.commons.lang3.StringUtils;

import java.util.*;
import java.util.stream.Collectors;

public class AlibabaCloudTranslation {

    //默认id
    public static final String DEFAULT_ACCESS_KEY_ID = "你的id";

    //默认secret
    public static final String DEFAULT_ACCESS_KEY_SECRET = "你的密码";

    //中文
    public static final String ZH = "zh";

    //英文
    public static final String EN = "en";

    //设置格式类型
    public static final String TEXT = "text";

    // 访问的域名
    public static final String MT_ALIYUNCS_COM = "mt.aliyuncs.com";

    //设置场景为一般
    public static final String GENERAL = "general";

    public static final String EXCEPTION = "翻译失败:[阿里云的id或密码错误][网络异常]";
    
    public static final char CHARACTER_UNDERLINE = '_';
    
    public static final char NULL_CHARACTER = ' ';
    
    public static final String DELIMITER_COMMA = ",";

    /**
     * 使用AK&SK初始化账号Client
     *
     * @param accessKeyId 阿里云密钥id
     * @param accessKeySecret 阿里云密钥密码
     * @return Client 客户端
     * @throws Exception 初始化客户端异常
     */
    public static com.aliyun.alimt20181012.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        config.endpoint = MT_ALIYUNCS_COM;
        return new com.aliyun.alimt20181012.Client(config);
    }


    /**
     * 获取翻译结果  如果密钥和密码为空,则默认使用这个特定的id与密码,但有可能失效
     *
     * @param text            翻译内容
     * @param accessKeyId     阿里云密钥id
     * @param accessKeySecret 阿里云密钥密码
     * @return String 翻译结果
     */
    public static String getResults(String text, String accessKeyId, String accessKeySecret) {
        if (StringUtils.isEmpty(text)) {
            return "";
        }

        // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
        com.aliyun.alimt20181012.Client client;
        try {
            if (StringUtils.isAllEmpty(accessKeyId, accessKeySecret)) {
                client = AlibabaCloudTranslation.createClient(DEFAULT_ACCESS_KEY_ID, DEFAULT_ACCESS_KEY_SECRET);
            } else client = AlibabaCloudTranslation.createClient(accessKeyId, accessKeySecret);
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }

        com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest()
                .setFormatType(TEXT)
                .setSourceLanguage(ZH)
                .setTargetLanguage(EN)
                .setSourceText(text)
                .setScene(GENERAL);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        
        TranslateGeneralResponse translateGeneralResponse;
        try {
            // 复制代码运行请自行打印 API 的返回值
            translateGeneralResponse = client.translateGeneralWithOptions(translateGeneralRequest, runtime);
        } catch (Exception error) {
            throw new RuntimeException(EXCEPTION);
        }
        
        return translateGeneralResponse.getBody().getData().getTranslated();
    }

    /**
     * 请求一次接口获取所有文本的翻译,通过map映射  map<文本,翻译结果> 并返回
     *
     * @param textList 翻译内容集合
     * @param accessKeyId 阿里云密钥id
     * @param accessKeySecret 阿里云密钥密码
     * @return LinkedHashMap<文本,翻译结果>
     */
    public static Map<String, String> getResultsMap(List<String> textList, String accessKeyId, String accessKeySecret) {
        //去重 按,分割成字符串
        String collect = textList.stream().distinct().collect(Collectors.joining(DELIMITER_COMMA));
        
        //获取翻译结果 并去除特殊字符串
        String results = removeSpecialCharacters(getResults(collect, accessKeyId, accessKeySecret));
        
        //将结果转换成list字符串
        List<String> collected = Arrays.stream(results.split(DELIMITER_COMMA)).collect(Collectors.toList());
        
        //收集翻译前后的字符串  有序的map
        Map<String, String> resultsMap = new LinkedHashMap<>(16, 0.75f);
        
        textList = Arrays.stream(collect.split(DELIMITER_COMMA)).collect(Collectors.toList());
        int size = textList.size();
        for (int i = 0; i < size; i++) {
            //去掉字符串前后的空格
            resultsMap.put(textList.get(i).trim(), collected.get(i).trim());
        }
        
        return resultsMap;
    }

    /**
     * 去除字符串的特殊字符串  符号 ’,’ 除外
     *
     * @param text 字符串
     * @return String 字符串
     */
    public static String removeSpecialCharacters(String text) {
        return text.replaceAll("[\n`~!@#$%^&*()+=|{}':;\\[\\].<>/?!¥…()—【】‘;:”“’。,、?]", "");
//        return text.replaceAll("[\n`~!@#$%^&*()+=|{}':;'\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]", ""); //该正则可能存在重复的字符
    }

    /**
     * 翻译并改为大写 空格变为下划线  to upper case with underscore ->  TO_UPPER_CASE_WITH_UNDERSCORE 格式
     *
     * @param text 字符串
     * @return String 字符串
     */
    public static String toUpperCaseWithUnderscore(String text) {
        if (text == null || text.isEmpty()) {
            return text;
        }
        
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if (c == NULL_CHARACTER) {
                result.append(CHARACTER_UNDERLINE);
            } else {
                result.append(Character.toUpperCase(c));
            }
        }
        
        return result.toString();
    }

    /**
     * 字符串改为 大驼峰格式  to camel case -> ToCamelCase
     *
     * @param text 字符串
     * @return String 字符串
     */
    public static String toCamelCase(String text) {
        if (text == null || text.isEmpty()) {
            return text;
        }
        
        StringBuilder result = new StringBuilder();
        boolean capitalizeNext = true;
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if (c == NULL_CHARACTER || c == CHARACTER_UNDERLINE) {
                capitalizeNext = true;
            } else if (capitalizeNext) {
                result.append(Character.toUpperCase(c));
                capitalizeNext = false;
            } else {
                result.append(c);
            }
        }
        
        return result.toString();
    }

    /**
     * 大驼峰转下划线 TestEnum -> test_enum
     *
     * @param text 字符串
     * @return String 字符串
     */
    public static String toUnderCase(String text) {
        if (text == null) {
            return null;
        }

        int len = text.length();
        StringBuilder res = new StringBuilder(len + 2);
        char pre = 0;
        for (int i = 0; i < len; i++) {
            char ch = text.charAt(i);
            if (Character.isUpperCase(ch)) {
                if (pre != CHARACTER_UNDERLINE && pre != 0) {
                    res.append(CHARACTER_UNDERLINE);
                }
                res.append(Character.toLowerCase(ch));
            } else {
                res.append(ch);
            }
            pre = ch;
        }
        
        return res.toString();
    }
}

阿里云翻译包


    com.aliyun
    alimt20181012
    1.1.0


你可能感兴趣的:(机器翻译,阿里云)