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" ); } } |
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)