From 765d4048459a3863d8153b92912cae3b6ad4d535 Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 11 Jun 2025 15:34:00 +0800 Subject: [PATCH] =?UTF-8?q?TASK:=20=E5=B0=86generate=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=BE=93=E5=85=A5=E4=B8=AD=E7=9A=84=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E8=BD=AC=E6=8D=A2=E4=B8=BA=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComprehensivePunctuationConverter.java | 88 +++++++++++++++++++ .../da/service/impl/GenerateServiceImpl.java | 4 + 2 files changed, 92 insertions(+) create mode 100644 src/main/java/com/ai/da/common/utils/ComprehensivePunctuationConverter.java diff --git a/src/main/java/com/ai/da/common/utils/ComprehensivePunctuationConverter.java b/src/main/java/com/ai/da/common/utils/ComprehensivePunctuationConverter.java new file mode 100644 index 00000000..c4c4ce63 --- /dev/null +++ b/src/main/java/com/ai/da/common/utils/ComprehensivePunctuationConverter.java @@ -0,0 +1,88 @@ +package com.ai.da.common.utils; + +import java.util.HashMap; +import java.util.Map; + +public class ComprehensivePunctuationConverter { + private static final Map FULL_TO_HALF_MAP = new HashMap<>(); + + static { + // 中文标点到英文标点的映射(扩展版) + FULL_TO_HALF_MAP.put(',', ','); + FULL_TO_HALF_MAP.put('。', '.'); + FULL_TO_HALF_MAP.put(';', ';'); + FULL_TO_HALF_MAP.put(':', ':'); + FULL_TO_HALF_MAP.put('?', '?'); + FULL_TO_HALF_MAP.put('!', '!'); + FULL_TO_HALF_MAP.put('(', '('); + FULL_TO_HALF_MAP.put(')', ')'); + FULL_TO_HALF_MAP.put('【', '['); + FULL_TO_HALF_MAP.put('】', ']'); + FULL_TO_HALF_MAP.put('「', '\''); + FULL_TO_HALF_MAP.put('」', '\''); + FULL_TO_HALF_MAP.put('『', '"'); + FULL_TO_HALF_MAP.put('』', '"'); + FULL_TO_HALF_MAP.put('、', '\\'); + FULL_TO_HALF_MAP.put('~', '~'); + FULL_TO_HALF_MAP.put('—', '-'); + FULL_TO_HALF_MAP.put('.', '.'); + FULL_TO_HALF_MAP.put('〈', '<'); + FULL_TO_HALF_MAP.put('〉', '>'); + FULL_TO_HALF_MAP.put('《', '«'); + FULL_TO_HALF_MAP.put('》', '»'); + FULL_TO_HALF_MAP.put('〝', '"'); + FULL_TO_HALF_MAP.put('〞', '"'); + FULL_TO_HALF_MAP.put('﹁', '"'); + FULL_TO_HALF_MAP.put('﹂', '"'); + FULL_TO_HALF_MAP.put('…', '.'); + FULL_TO_HALF_MAP.put('﹏', '_'); + + // 全角字母和数字 + for (char c = 'A'; c <= 'Z'; c++) { + FULL_TO_HALF_MAP.put(c, (char)(c - 'A' + 'A')); + } + for (char c = 'a'; c <= 'z'; c++) { + FULL_TO_HALF_MAP.put(c, (char)(c - 'a' + 'a')); + } + for (char c = '0'; c <= '9'; c++) { + FULL_TO_HALF_MAP.put(c, (char)(c - '0' + '0')); + } + } + + /** + * 将字符串中的全角字符(包括标点、字母、数字)转换为半角字符 + */ + public static String convertToHalfWidth(String input) { + if (input == null || input.isEmpty()) { + return input; + } + + StringBuilder result = new StringBuilder(); + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + + // 检查映射表 + if (FULL_TO_HALF_MAP.containsKey(c)) { + result.append(FULL_TO_HALF_MAP.get(c)); + } + // 处理全角空格(Unicode 12288) + else if (c == ' ') { + result.append(' '); + } + // 其他字符保持不变 + else { + result.append(c); + } + } + + return result.toString(); + } + + public static void main(String[] args) { +// String text = "这是一个全角示例,包含:中文标点、全角字母(ABC)、全角数字(123) 还有全角空格!"; + String text = "birds,yellow"; + String converted = convertToHalfWidth(text); + System.out.println("原始文本: " + text); + System.out.println("转换后: " + converted); + } +} diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index 34c6c9c8..83426473 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -334,6 +334,10 @@ public class GenerateServiceImpl extends ServiceImpl i prefix = userInput.substring(0, userInput.indexOf(",")) + ", "; userInput = userInput.substring(userInput.indexOf(",") + 1); } + // 替换用户输入中的中文字符 + log.info("用户输入,处理前:{}", userInput); + userInput = ComprehensivePunctuationConverter.convertToHalfWidth(userInput); + log.info("用户输入,处理后:{}", userInput); String translated = prefix + pythonService.promptTranslate(userInput); switch (level1Type) { case "Moodboard":