From 0cf6fb0dee6bfe0a0306c5a1342295f59f87aed2 Mon Sep 17 00:00:00 2001 From: Kim Jiyoon Date: Wed, 14 Aug 2024 01:21:31 +0900 Subject: [PATCH] =?UTF-8?q?hotfix:=20=EC=9C=84=EB=8F=84=20=EA=B2=BD?= =?UTF-8?q?=EB=8F=84=EB=A5=BC=20=EC=9D=B8=EC=8B=9D=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EB=AA=BB=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/gpt/config/GptConfig.java | 61 +++++++++---------- .../domain/gpt/constant/ParsingConstants.java | 4 +- .../domain/gpt/entity/GptScheduleParser.java | 49 ++++++--------- .../domain/gpt/service/GptService.java | 2 - 4 files changed, 48 insertions(+), 68 deletions(-) diff --git a/backend/src/main/java/com/isp/backend/domain/gpt/config/GptConfig.java b/backend/src/main/java/com/isp/backend/domain/gpt/config/GptConfig.java index 8d8c0338..a7c3247b 100644 --- a/backend/src/main/java/com/isp/backend/domain/gpt/config/GptConfig.java +++ b/backend/src/main/java/com/isp/backend/domain/gpt/config/GptConfig.java @@ -24,50 +24,47 @@ public class GptConfig { 위 정보들을 토대로 일정을 만들어줘 - 너가 주의해야 할 사항은 아래 네가지야. - 1. 고객이 원하는 목적지를 기반으로 여행 계획을 만들어 줘야 하는데, 너무 멀리 있는 장소들을 묶으면 안돼. 2. 하루에 최소 세 개의 명소를 방문하고 싶어. - 3. 하루에 최소 9시간을 돌아다닐거야. - 4. 3일 간의 여행이면 3일짜리 계획을 만들어주면 돼. - 5. 장소의 좌푯값도 소수점까지 함께 알려줘. - 6. 일정마다 입장료나 이용 비용을 여행지 화폐에 맞춰 작성해줘. + 5. 예를 들어 8월 15일부터 8월 18일까지의 여행이면 4일짜리 계획을 만들어주면 돼. + 6. 장소의 좌푯값도 소수점까지 함께 알려줘. + 7. 일정마다 입장료나 이용 비용을 여행지 화폐에 맞춰 작성해줘. 8. 식사 비용이나 입장료 같은 경우 (0.0)으로 작성해줘. - 9. 특수 문자를 사용하지 않고, 아래 예시대로 일정을 작성해줘. - 10. 일정 외의 다른 주의사항이나 추가 문장은 추가하지마. - 11. 비용은 반드시 숫자로만 추가해줘. - - 4번의 예시는 아래와 같아 + 10. 비용은 반드시 숫자로만 추가해줘. + 11. 반드시 "-\\s*(.*?):\\s*([\\d.]+,\\s*[\\d.]+)?\\s*\\[(.*?)\\]" 이 포맷을 지켜줘. + 12. 일정은 반드시 한글로만 작성해줘. + + 예시는 아래와 같아 <2024.02.06> - - 세비야 대성당:37.38610100, -5.99220400 (11.0) - - 알카사르 세비야:37.38338500, -5.99051600 (12.0) - - 점심식사 에스피넬리 글로리아: 37.39404600, -5.99379500 (0.0) - - 히랄다 탑:37.38603000, -5.99303300 (13.0) - - 스페인 광장:37.37722200, -5.98694400 (0.0) - - 저녁식사 바루로:37.37734300, -5.98742700 (0.0) - - 쇼핑 세비야 엘 코르테 잉글레스:37.38942400, -5.99407200 (0.0) + - 세비야 대성당: 37.38610100, -5.99220400 [11.0] + - 알카사르 세비야: 37.38338500, -5.99051600 [12.0] + - 점심식사 에스피넬리 글로리아: 37.39404600, -5.99379500 [0.0] + - 히랄다 탑: 37.38603000, -5.99303300 [13.0] + - 스페인 광장: 37.37722200, -5.98694400 [0.0] + - 저녁식사 바루로: 37.37734300, -5.98742700 [0.0] + - 쇼핑 세비야 엘 코르테 잉글레스: 37.38942400, -5.99407200 [0.0] <2024.02.07> - - 세비야 대성당:37.38610100, -5.99220400 (11.0) - - 알카사르 세비야:37.38338500, -5.99051600 (12.0) - - 점심식사 에스피넬리 글로리아: 37.39404600, -5.99379500 (0.0) - - 히랄다 탑:37.38603000, -5.99303300 (13.0) - - 스페인 광장:37.37722200, -5.98694400 (0.0) - - 저녁식사 바루로:37.37734300, -5.98742700 (0.0) - - 쇼핑 세비야 엘 코르테 잉글레스:37.38942400, -5.99407200 (0.0) + - 세비야 대성당: 37.38610100, -5.99220400 [11.0] + - 알카사르 세비야: 37.38338500, -5.99051600 [12.0] + - 점심식사 에스피넬리 글로리아: 37.39404600, -5.99379500 [0.0] + - 히랄다 탑: 37.38603000, -5.99303300 [13.0] + - 스페인 광장: 37.37722200, -5.98694400 [0.0] + - 저녁식사 바루로: 37.37734300, -5.98742700 [0.0] + - 쇼핑 세비야 엘 코르테 잉글레스: 37.38942400, -5.99407200 [0.0] <2024.02.08> - - 세비야 대성당:37.38610100, -5.99220400 (11.0) - - 알카사르 세비야:37.38338500, -5.99051600 (12.0) - - 점심식사 에스피넬리 글로리아: 37.39404600, -5.99379500 (0.0) - - 히랄다 탑:37.38603000, -5.99303300 (13.0) - - 스페인 광장:37.37722200, -5.98694400 (0.0) - - 저녁식사 바루로:37.37734300, -5.98742700 (0.0) - - 쇼핑 세비야 엘 코르테 잉글레스:37.38942400, -5.99407200 (0.0) + - 세비야 대성당: 37.38610100, -5.99220400 [11.0] + - 알카사르 세비야: 37.38338500, -5.99051600 [12.0] + - 점심식사 에스피넬리 글로리아: 37.39404600, -5.99379500 [0.0] + - 히랄다 탑: 37.38603000, -5.99303300 [13.0] + - 스페인 광장: 37.37722200, -5.98694400 [0.0] + - 저녁식사 바루로: 37.37734300, -5.98742700 [0.0] + - 쇼핑 세비야 엘 코르테 잉글레스: 37.38942400, -5.99407200 [0.0] 날짜 형식은 반드시 을 지켜줘. 매일 점심과 저녁은 레스토랑에서 먹을 거니까, 실제로 맛있고 유명한 레스토랑도 일정에 포함시켜줘. diff --git a/backend/src/main/java/com/isp/backend/domain/gpt/constant/ParsingConstants.java b/backend/src/main/java/com/isp/backend/domain/gpt/constant/ParsingConstants.java index b54f9952..2d3563c3 100644 --- a/backend/src/main/java/com/isp/backend/domain/gpt/constant/ParsingConstants.java +++ b/backend/src/main/java/com/isp/backend/domain/gpt/constant/ParsingConstants.java @@ -13,10 +13,8 @@ public enum ParsingConstants { PRICE_PREFIX("("), PRICE_SUFFIX(")"), DETAIL_PREFIX("- "), - PRICE_FREE("무료"), - PRICE_VAR("변동"), + DETAIL_SUFFIX(": "), DEFAULT_PRICE(0.0), - DETAIL_SUFFIX(":"), DEFAULT_COORDINATE(0.0); private final String stringValue; private final Double doubleValue; diff --git a/backend/src/main/java/com/isp/backend/domain/gpt/entity/GptScheduleParser.java b/backend/src/main/java/com/isp/backend/domain/gpt/entity/GptScheduleParser.java index 4d9ffdb9..21ed299f 100644 --- a/backend/src/main/java/com/isp/backend/domain/gpt/entity/GptScheduleParser.java +++ b/backend/src/main/java/com/isp/backend/domain/gpt/entity/GptScheduleParser.java @@ -14,7 +14,8 @@ @Component public class GptScheduleParser { - private static final Pattern LINE_PATTERN = Pattern.compile("-\\s*(.*?):\\s*([\\d.]+,\\s*[\\d.]+)?\\s*\\((.*?)\\)"); + private static final Pattern LINE_PATTERN =Pattern.compile("-\\s*(.*?):\\s*([\\d.]+),\\s*([-\\d.]+)\\s*\\[(\\d+(\\.\\d+)?)\\]"); + public List parseScheduleText(String scheduleText) { System.out.println(scheduleText); @@ -35,16 +36,23 @@ public List parseScheduleText(String scheduleText) { Matcher matcher = LINE_PATTERN.matcher(line); if (matcher.find()) { - String detail = matcher.group(1); - String coordinatesStr = matcher.group(2); - String priceStr = matcher.group(3); - - Coordinate coordinate = parseCoordinates(coordinatesStr); - double price = parsePriceString(priceStr); - - scheduleDetails.add(new GptScheduleDetail(detail, price, coordinate)); + try { + String detail = matcher.group(1); + String latitude = matcher.group(2); + String longitude = matcher.group(3); + String priceString = matcher.group(4); + + Coordinate coordinate = new Coordinate(Double.parseDouble(latitude), Double.parseDouble(longitude)); + double price = parsePriceString(priceString); + + scheduleDetails.add(new GptScheduleDetail(detail, price, coordinate)); + } catch (Exception e) { + System.err.println("Error processing line: " + line); + e.printStackTrace(); + throw new NonValidatedParsingException(); + } } else { - System.out.println("767867889"); + System.out.println("No match found for line: " + line); throw new NonValidatedParsingException(); } } @@ -59,26 +67,6 @@ private String parseDate(String line) { return line.trim().replace(ParsingConstants.DATE_SUFFIX.getStringValue(), ""); } - private Coordinate parseCoordinates(String coordinatesStr) { - if (coordinatesStr == null || coordinatesStr.isEmpty()) { - return new Coordinate(ParsingConstants.DEFAULT_COORDINATE.getDoubleValue(), ParsingConstants.DEFAULT_COORDINATE.getDoubleValue()); - } - - String[] parts = coordinatesStr.split(","); - if (parts.length != 2) { - System.out.println("1546351"); - throw new NonValidatedParsingException(); - } - - try { - double latitude = Double.parseDouble(parts[0].trim()); - double longitude = Double.parseDouble(parts[1].trim()); - return new Coordinate(latitude, longitude); - } catch (NumberFormatException e) { - System.out.println("1234"); - throw new NonValidatedParsingException(); - } - } private double parsePriceString(String priceStr) { if (ParsingConstants.PRICE_FREE.getStringValue().equals(priceStr)) { @@ -88,7 +76,6 @@ private double parsePriceString(String priceStr) { try { return Double.parseDouble(priceStr.replaceAll("[^\\d.]", "")); } catch (NumberFormatException e) { - System.out.println("5678"); return ParsingConstants.DEFAULT_PRICE.getDoubleValue(); } } diff --git a/backend/src/main/java/com/isp/backend/domain/gpt/service/GptService.java b/backend/src/main/java/com/isp/backend/domain/gpt/service/GptService.java index 8305168c..7c2ef2fd 100644 --- a/backend/src/main/java/com/isp/backend/domain/gpt/service/GptService.java +++ b/backend/src/main/java/com/isp/backend/domain/gpt/service/GptService.java @@ -12,7 +12,6 @@ import com.isp.backend.domain.gpt.entity.GptMessage; import com.isp.backend.domain.gpt.entity.GptSchedule; import com.isp.backend.domain.gpt.entity.GptScheduleParser; -import com.isp.backend.domain.schedule.service.ScheduleService; import com.isp.backend.global.exception.schedule.CountryNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -37,7 +36,6 @@ public class GptService { private final GptScheduleParser gptScheduleParser; private final CountryRepository countryRepository; - private final ScheduleService scheduleService; private final WebClient webClient; @Value("${api-key.gpt-trip}")