11.29每日总结

今天进行软件构造的实验一

实验一:百度机器翻译SDK实验(2023.11.29日完成)

任务一:下载配置百度翻译Java相关库及环境(占10%)。

任务二:了解百度翻译相关功能并进行总结,包括文本翻译-通用版和文本翻译-词典版(占20%)。

任务三:完成百度翻译相关功能代码并测试调用,要求可以实现中文翻译成英文,英文翻译成中文(占30%)。

任务四:完成百度翻译GUI相关功能代码并测试调用,要求可以实现中文翻译成英文,英文翻译成中文(占30%)。

实验总结:(占10%)

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package Translate;
 
import okhttp3.*;
 
import org.json.JSONArray;
import org.json.JSONObject;
 
import java.io.IOException;
import java.util.Scanner;
 
public class test {
    public static final String API_KEY = "MP8dIFzyozC82HXQqcaXeT8v";
    public static final String SECRET_KEY = "6kaFGVdRGbO4Tw1c4B5TacbzGua5CilY";
    static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        translate(scanner);
    }
 
    private static void translate(Scanner scanner) {
        System.out.println("请选择翻译方向(1:中译英,2:英译中,3:退出):");
        int direction = scanner.nextInt();
        String targetLanguage = "中译英";
        if (direction == 1) {
            targetLanguage = "en";
        } else if (direction == 2) {
            targetLanguage = "zh";
        } else if (direction == 3){
            System.exit(0);
        } else {
            System.out.println("无效的选择");
            return;
        }
        System.out.println("请输入要翻译的文本:");
        scanner.nextLine(); // 读取换行符
        String textToTranslate = scanner.nextLine();
 
        try {
            String translatedText = translateText(textToTranslate, targetLanguage);
            System.out.println("翻译结果:" + translatedText);
        } catch (IOException ex) {
            System.out.println("翻译出错");
        }
        translate(scanner);
    }
 
    /**
     * 调用百度翻译API进行文本翻译
     *
     * @param textToTranslate 要翻译的文本
     * @param targetLanguage    目标语言代码
     * @return 翻译结果
     * @throws IOException IO异常
     */
    static String translateText(String textToTranslate, String targetLanguage) throws IOException {
        // 构建请求体的 JSON 对象
        JSONObject requestBodyJson = new JSONObject();
        requestBodyJson.put("from", "auto");  // 源语言自动检测
        requestBodyJson.put("to", targetLanguage);  // 目标语言根据用户选择
        requestBodyJson.put("q", textToTranslate);  // 添加要翻译的文本
 
        // 创建请求体
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, requestBodyJson.toString());
 
        // 创建HTTP请求
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=" + getAccessToken())
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();
 
        // 发起请求并获取响应
        Response response = HTTP_CLIENT.newCall(request).execute();
 
        // 解析翻译结果
        String translatedText = parseTranslationResult(response.body().string());
        return translatedText;
    }
 
    /**
     * 解析翻译结果
     *
     * @param responseBody 响应体字符串
     * @return 翻译结果
     */
    static String parseTranslationResult(String responseBody) {
        JSONObject responseJson = new JSONObject(responseBody);
        JSONArray transResultArray = responseJson.getJSONObject("result").getJSONArray("trans_result");
 
        // 假设只翻译一段文本,取第一个翻译结果
        if (transResultArray.length() > 0) {
            return transResultArray.getJSONObject(0).getString("dst");
        } else {
            return "未能获取翻译结果";
        }
    }
 
    /**
     * 从用户的AK,SK生成鉴权签名(Access Token)
     *
     * @return 鉴权签名(Access Token)
     * @throws IOException IO异常
     */
    static String getAccessToken() throws IOException {
        // 创建请求体
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
        RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY
                + "&client_secret=" + SECRET_KEY);
 
        // 创建HTTP请求
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/oauth/2.0/token")
                .method("POST", body)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .build();
 
        // 发起请求并获取响应,解析JSON获取Access Token
        Response response = HTTP_CLIENT.newCall(request).execute();
        return new JSONObject(response.body().string()).getString("access_token");
    }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package Translate;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import okhttp3.*;
 
import org.json.JSONArray;
import org.json.JSONObject;
 
import java.io.IOException;
 
public class TranslateApp extends Application {
    public static final String API_KEY = "MP8dIFzyozC82HXQqcaXeT8v";
    public static final String SECRET_KEY = "6kaFGVdRGbO4Tw1c4B5TacbzGua5CilY";
    static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("中英互译");
 
        // 创建输入文本框和按钮
        Label inputLabel = new Label("输入文本:");
        TextField inputTextField = new TextField();
        Button translateButton = new Button("翻译");
 
        // 创建目标语言选择下拉框
        ComboBox<String> languageComboBox = new ComboBox<>();
        languageComboBox.getItems().addAll("英译中", "中译英");
        languageComboBox.setValue("中译英");
 
        // 创建显示翻译结果的标签
        Label translationLabel = new Label();
 
        // 设置按钮点击事件
        translateButton.setOnAction(e -> {
            try {
                String textToTranslate = inputTextField.getText();
                String targetLanguage = languageComboBox.getValue();
                String languageCode = "";
                if (targetLanguage.equals("英译中")) {
                    languageCode = "zh";
                } else if (targetLanguage.equals("中译英")) {
                    languageCode = "en";
                }
 
                String translatedText = translateText(textToTranslate, languageCode);
                translationLabel.setText("翻译结果:" + translatedText);
            } catch (IOException ex) {
                translationLabel.setText("翻译出错");
            }
        });
 
        // 创建布局并设置组件间的间距和边距
        VBox vbox = new VBox(10);
        vbox.setPadding(new Insets(10, 10, 10, 10));
        vbox.getChildren().addAll(inputLabel,inputTextField, languageComboBox, translateButton, translationLabel);
 
        // 创建场景并显示窗口
        Scene scene = new Scene(vbox, 500, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 
    /**
     * 调用百度翻译API进行文本翻译
     *
     * @param textToTranslate 要翻译的文本
     * @param languageCode  目标语言代码
     * @return 翻译结果
     * @throws IOException IO异常
     */
    static String translateText(String textToTranslate, String languageCode) throws IOException {
        // 构建请求体的 JSON 对象
        JSONObject requestBodyJson = new JSONObject();
        requestBodyJson.put("from", "auto");  // 源语言自动检测
        requestBodyJson.put("to", languageCode);  // 目标语言根据用户选择
        requestBodyJson.put("q", textToTranslate);  // 添加要翻译的文本
 
        // 创建请求体
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, requestBodyJson.toString());
 
        // 创建HTTP请求
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=" + getAccessToken())
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();
 
        // 发起请求并获取响应
        Response response = HTTP_CLIENT.newCall(request).execute();
 
        // 解析翻译结果
        String translatedText = parseTranslationResult(response.body().string());
        return translatedText;
    }
 
    /**
     * 解析翻译结果
     *
     * @param responseBody 响应体字符串
     * @return 翻译结果
     */
    static String parseTranslationResult(String responseBody) {
        JSONObject responseJson = new JSONObject(responseBody);
        JSONArray transResultArray = responseJson.getJSONObject("result").getJSONArray("trans_result");
 
        // 假设只翻译一段文本,取第一个翻译结果
        if (transResultArray.length() > 0) {
            return transResultArray.getJSONObject(0).getString("dst");
        } else {
            return "未能获取翻译结果";
        }
    }
 
    /**
     * 从用户的AK,SK生成鉴权签名(Access Token)
     *
     * @return 鉴权签名(Access Token)
     * @throws IOException IO异常
     */
    static String getAccessToken() throws IOException {
        // 创建请求体
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
        RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY
                + "&client_secret=" + SECRET_KEY);
 
        // 创建HTTP请求
        Request request = new Request.Builder()
                .url("https://aip.baidubce.com/oauth/2.0/token")
                .method("POST", body)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .build();
 
        // 发起请求并获取响应,解析JSON获取Access Token
        Response response = HTTP_CLIENT.newCall(request).execute();
        return new JSONObject(response.body().string()).getString("access_token");
    }
}

  

 

posted @   漏网鲨鱼  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
点击右上角即可分享
微信分享提示