옵시디언과 ChatGPT API를 활용한 요리 레시피 데이터 관리

소개

가족들에게 요리를 해주며 쌓은 경험을 체계적으로 관리하고자 시작한 프로젝트입니다. 반응이 좋았던 요리와 변형 아이디어를 기록으로 남기고, 가족들의 취향을 데이터로 정리해 효율적인 요리 계획을 세우는 것이 목표였습니다. 이를 위해 옵시디언을 기반으로 데이터 관리 시스템을 구축했고, 크롤링 및 ChatGPT API를 활용해 요리 레시피 데이터를 수집하고 정리했습니다.


진행 방법

사용 도구 및 과정

  1. 구글 앱스 스크립트 및 커서 기반 크롤링

    • 유튜브에서 요리 영상의 제목, 설명, 스크립트를 가져오기 위해 두 가지 접근 방식을 시도했습니다.

      • 구글 앱스 스크립트를 사용해 기본적인 제목과 설명 데이터를 가져왔지만, 스크립트 데이터 추출에는 실패하여 커서를 활용한 크롤링으로 전환했습니다.

    • HTML 구조를 탐색하며 데이터를 추출하는 데 사용한 코드는 아래와 같습니다.

python

Copy code

# 유튜브 영상 제목, 설명, 스크립트 크롤링 주요 코드 title_selectors = [ 'h1.style-scope.ytd-watch-metadata', 'h1.title.style-scope.ytd-watch-metadata', 'yt-formatted-string.style-scope.ytd-watch-metadata', 'h1.title' ] ... segments_container = self.wait.until(EC.presence_of_element_located( (By.CSS_SELECTOR, 'div#segments-container'))) segments_html = segments_container.get_attribute('innerHTML') matches = re.findall(r'<div class="segment-timestamp[^>]*>([^<]+)</div>.*?<yt-formatted-string[^>]*>([^<]+)</yt-formatted-string>', segments_html, re.DOTALL) ...

  • 중요 포인트: 크롤링 작업 중 다수의 CSS Selector와 XPath를 활용하여 데이터를 정교하게 추출하였고, 각 단계마다 성공 여부를 확인하는 메시지를 출력해 디버깅 과정을 효율적으로 진행했습니다.

  1. ChatGPT API를 활용한 레시피 요약 및 정리

    • 크롤링한 데이터를 마크다운 형식의 요리 레시피로 정리하기 위해 ChatGPT API를 사용했습니다.

    • 정리된 레시피는 다음과 같은 구조로 작성되었습니다.

#### 제목  
#### 날짜: 2024-11-23  
##### 주재료: #닭고기 #감자  
##### 부재료: #양파 #당근  
##### 태그: #유튜브채널명  

---

## 요리개요  
- 소요시간: 30분  
- 난이도: 중급  
- 관련기기: 오븐  
- 주재료: 닭고기 500g, 감자 2개  
- 부재료: 양파 1개, 당근 1개  

## 레시피  
1. 닭고기를 손질한 후 밑간을 합니다.  
2. ... (과정 생략)  
- **Tip**: 감자는 물에 잠깐 담가 전분기를 빼면 더 바삭합니다.  

---

#### 반응  
- (공란)

#### 생각  
- (공란)

#### 출처  
- [유튜브 제목](https://youtube.com/...)  
  1. 프롬프트 개선

    • 처음에는 하나의 입력에 여러 요리가 포함된 경우 처리가 어려웠지만, 프롬프트를 수정하여 다중 요리 입력 처리를 구현했습니다.

    • 사용된 프롬프트(요약)는 다음과 같습니다.

- 너는 요리 강의의 레시피 정리 전문가이다. - 입력된 요리 데이터를 분석하여 각 요리별로 제목, 개요, 레시피, 반응 등을 작성한다. - 다중 요리가 포함된 경우, 각 요리를 개별적으로 분리해 작성한다. - 작성 결과는 마크다운 형식으로 가독성 높게 구성한다.

  1. 옵시디언과의 통합

    • 마크다운 파일을 옵시디언으로 가져왔습니다.

    • 커서로 옵시디언 파일을 불러와서, 테스트용으로 가족들의 반응을 랜덤으로 자동 입력을 해보았습니다. 아쉽게도 동시에 모든 글 수정은 안되었습니다. 6개 정도는 괜찮으나, 너무 많으면 4개만 됩니다.

      한국어 웹사이트 스크린샷
    • 정리된 마크다운 파일은 아래와 같습니다.

      한국사이트 스크린샷
    • 가족 구성원의 취향에 맞는 데이터를 추가 관리하고, 스마트 커넥션 플러그인을 활용해 가족별 선호 요리와 연결 관계를 시각화했습니다.

      검은 화면에 한국어 단어 목록

결과와 배운 점

  1. 성과

    • 가족들의 취향 데이터를 기반으로 요리 추천 시스템을 구축할 수 있는 기반을 마련했습니다.

    • GPT-4o-mini를 활용해 비용 효율성을 높이면서도 품질 높은 요약 데이터를 생성했습니다.

  2. 어려움과 해결 과정

    • 크롤링 과정에서 다양한 HTML 구조를 처리해야 했지만, 다중 셀렉터와 디버깅 메시지를 활용해 문제를 해결했습니다.

    • ChatGPT API를 활용할 때 초기 요약 결과물이 원하는 구조와 맞지 않았으나, 반복적인 프롬프트 수정으로 극복했습니다.

  3. 활용 팁

    • 크롤링 중에는 HTML 구조가 바뀔 수 있으므로, 여러 셀렉터를 작성하고 예외 처리를 추가하면 안정성을 높일 수 있습니다.

    • GPT API의 경우, 단순 요약 작업에서는 비용 대비 성능이 뛰어난 GPT-4o-mini를 사용하는 것이 효과적입니다.

아쉬운 점

  1. 옵시디언으로 처음 의도한 것은 메모의 모음을 뛰어넘어, 메모의 내용으로 의사결정을 도와주는 것을 기대했는데, 어려웠습니다.

    1. 가족들의 취향과 요리이력과 반응을 종합 고려한 요리 추천시스템을 목표하고 고민했습니다. "그래서, 이번 주의 요리는?"

    2. smart-composer에서 폴더 전체를 연결시키면 되지 않을까? 기대했는데... 몇 개의 글을 직접 연결시켜야 했습니다.

    3. 가족들의 반응(점수)와 요리 경과일자를 이용한 계산식을 만들어 볼까하다가, AI에게 시킬 일이지. 내가 직접 이렇게까지 할 일은 아니다... 라는 결론을 내렸습니다.

  2. 이제 업무에는 어떻게 적용시킬건가? ^^;

4
2개의 답글

👉 이 게시글도 읽어보세요