/Youtube-Sub-Maker

πŸ’Ώ λ³΄κΈ°μ‰¬μš΄ 유튜브 μžλ™μžλ§‰ 제곡 μ„œλΉ„μŠ€ - 크둬 μ΅μŠ€ν…μ…˜

Primary LanguagePython

CCC - λ³΄κΈ°μ‰¬μš΄ 유튜브 μžλ™μžλ§‰ 제곡 μ„œλΉ„μŠ€

image

유튜브 μžλ™μžλ§‰μ„ μž¬κ°€κ³΅ν•˜μ—¬ 보기쉽고 μœ μ˜λ―Έν•œ μžλ§‰μ„ μ œκ³΅ν•˜λŠ” 크둬 μ΅μŠ€ν…μ…˜ μ„œλΉ„μŠ€ μž…λ‹ˆλ‹€.
Chrome Extension Store - 'CCC 유튜브 μžλ™μžλ§‰ 생성기'

πŸ‘¨πŸ»β€πŸ’» κΈ°μˆ μŠ€νƒ

  • Chrome extension
  • React
  • Javascript
  • Vite
  • Python
  • Flask

πŸ“œ ν”„λ‘œμ νŠΈ λͺ©ν‘œ 및 κΈ°λŒ€νš¨κ³Ό

  • μžλ™μžλ§‰μ˜ 배치λ₯Ό λ‹€λ₯΄κ²Œ κ΅¬μ„±ν•˜μ—¬ 보기 μ‰¬μš΄ μžλ™μžλ§‰μ„ μ œκ³΅ν•¨
  • μ˜μƒμ„ 가리지 μ•ŠλŠ” μ μ ˆν•œ μœ„μΉ˜μ—μ„œ μ‚¬μš©μžμ˜ μ˜μƒμ‹œμ²­ κ²½ν—˜μ„ 높일 수 있음
  • λ¬Έμž₯ λ‹¨μœ„λ‘œ μžλ§‰μ„ μž¬κ΅¬μ„±ν•˜μ—¬, μœ μ˜λ―Έν•œ μžλ§‰μ„ μ œκ³΅ν•¨
  • μΆ”ν›„ μžλ§‰μ˜ ν…μŠ€νŠΈλ₯Ό λΆ„μ„ν•˜κΈ°μ— μš©μ΄ν•˜κ³  정보전달λ ₯을 λ†’μž„
  • ν…μŠ€νŠΈ 감성뢄석을 톡해 ν’μ„±ν•œ μžλ§‰ μ‚¬μš©κ²½ν—˜μ„ μ œκ³΅ν•¨
  • 크둬 μ΅μŠ€ν…μ…˜ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•΄ λˆ„κ΅¬λ‚˜ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ 함

πŸ’Ώ κ΅¬ν˜„μˆœμ„œ

  1. 크둬 μ΅μŠ€ν…μ…˜ ν”„λ‘ νŠΈμ—”λ“œ (React) ꡬ좕
  2. DOM을 μ‘°μž‘ν•΄ μžλ™μžλ§‰μ„ μ˜μƒ 밑에 배치
  3. λ°±μ—”λ“œ μ„œλ²„ ꡬ좕 (Flask)
  4. ν˜•νƒœμ†Œ 뢄석을 톡해 λ¬Έμž₯으둜 μž¬κ΅¬μ„±
  5. μž¬κ΅¬μ„±ν•œ λ¬Έμž₯ 감성뢄석 진행 (Positive, Negative)
  6. λ¬Έμž₯ꡬ성 + 감성뢄석 κ²°κ³Όλ₯Ό ν† λŒ€λ‘œ μž¬κ΅¬μ„±ν•œ μžλ§‰ 제곡

πŸ“ˆ μ•„ν‚€ν…μ²˜

image

이전(문제점)

image
image

  • 유튜브 μžλ™μžλ§‰μ„ μ‚¬μš©ν•  λ•Œ ν•œ 쀄에 μžλ§‰μ΄ μ œκ³΅λ˜μ§€ μ•Šκ³ , λŠμ–΄μ„œ λ‚˜μ˜€λŠ” 문제점
  • μžλ™μžλ§‰μ΄ λ¬Έμž₯λ³„λ‘œ μ œκ³΅ν•˜μ§€ μ•Šκ³ , λŠμ–΄μ„œ μ œκ³΅ν•˜κ³  μžˆλŠ” 문제점
  • μžλ§‰μ΄ κΈΈμ–΄μ§ˆ λ•Œ 정렬이 λ˜μ–΄μžˆμ§€ μ•Šμ•„ μ˜μƒμ‹œμ²­μ„ λ°©ν•΄ν•˜λŠ” 문제점
  • 검은 λ°°κ²½, 흰 κΈ€μž μŠ€νƒ€μΌμ΄ κ³ μ •λ˜μ–΄ μžˆλŠ” 문제점

이후


image
image

  • ν˜•νƒœμ†Œ 뢄석을 톡해 μžλ§‰μ„ λ¬Έμž₯으둜 μž¬κ΅¬μ„±ν•¨
  • μžλ™μžλ§‰μ„ μ‚¬μš©ν•  λ•Œ μ˜μƒ ν•˜λ‹¨μ— μžλ§‰μ„ λ°°μΉ˜ν•˜μ—¬ μ˜μƒμ‹œμ²­μ— λ°©ν•΄κ°€ λ˜μ§€μ•Šλ„λ‘ ν•˜μ˜€κ³ , ν•œ μ€„λ‘œ λ³΄κΈ°μ‰½κ²Œ ν‘œν˜„
  • 이전 μžλ§‰κ³Ό λ‹€μŒ μžλ§‰μ„ 같이 ν‘œμ‹œν•˜μ—¬, μœ μ €μ˜ μžλ§‰ μ‚¬μš©κ²½ν—˜μ„ λ†’μž„

πŸ–₯ 비ꡐ뢄석


image [κ·Έλ¦Ό1]

1) μžλ§‰λ°°μΉ˜ λ³€κ²½

  • μžλ§‰μ΄ μ˜μƒμ„ κ°€λ¦¬λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ˜μƒ μ•„λž˜λ‘œ μžλ§‰μ„ λ°°μΉ˜ν–ˆλ‹€. [κ·Έλ¦Ό 1]의 1번과 2λ²ˆμ„ 비ꡐ해보면 1λ²ˆμ€ κΈ°μ‘΄ μœ νŠœλΈŒμ—μ„œ μ œκ³΅ν•˜λŠ” μžλ™μžλ§‰ μ„œλΉ„μŠ€μ΄κ³  2λ²ˆμ€ λ³Έ μ„œλΉ„μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” μžλ§‰μ΄λ‹€. κΈ°μ‘΄ μžλ™ μžλ§‰μ€ 배치λ₯Ό μˆ˜μ •ν•  수 μžˆμ§€λ§Œ, μ˜μƒ μ™ΈλΆ€λ‘œ λ°°μΉ˜ν•  수 μ—†μ–΄μ„œ μ˜μƒ μ‹œμ²­μ— λΆˆνŽΈν•¨μ΄ μžˆλ‹€. λ˜ν•œ μžλ§‰μ΄ κΈΈμ–΄μ§€κ²Œ 되면 μ˜μƒμ΄ 가렀지고, μ •ν˜•ν™” λ˜μ§€ μ•Šμ€ μžλ§‰μ°½ 크기둜 인해 μ˜μƒ μ‹œμ²­μ— 큰 뢈편이 μžˆλ‹€. κ·Έλž˜μ„œ DOM을 μ‘°μž‘ν•˜μ—¬ μ˜μƒ 밑에 μžλ§‰μ°½μ„ λ°°μΉ˜ν•˜κ³ , μ˜μƒ μ‹œμ²­μ‹œκ°„κ³Ό μžλ§‰ 리슀트λ₯Ό λΉ„κ΅ν•˜μ—¬ μ‹€μ‹œκ°„μœΌλ‘œ μžλ§‰μ„ λ³΄μ—¬μ£ΌλŠ” κΈ°λŠ₯을 λ„μž…ν–ˆλ‹€. μ΄λ‘œμΈν•΄ μ‚¬μš©μžλŠ” μžλ§‰μ΄ μ˜μƒμ„ κ°€λ¦¬λŠ” 일 없이 μ‹œμ²­ν•  수 있게 λœλ‹€.

2) μžλ§‰ λ¬Έμž₯ν™” 및 이전과 λ‹€μŒ μžλ§‰ 제곡

  • μžλ§‰μ„ λ¬Έμž₯으둜 μž¬κ΅¬μ„±ν•˜κ³ , 이전과 λ‹€μŒ μžλ§‰μ„ ν•¨κ»˜ μ œκ³΅ν•˜μ—¬ 가독성 κ²½ν—˜μ„ λ†’μ˜€λ‹€. [κ·Έλ¦Ό 1]μ—μ„œ 1번의 μžλ§‰μ„ 보면 μžλ§‰μ΄ λ¬Έμž₯으둜 μ œκ³΅λ˜μ§€ μ•Šκ³  λ¬΄μž‘μœ„λ‘œ λ³΄μ—¬μ§€λŠ” 것을 확인할 수 μžˆλ‹€. μ΄λŠ” μžλ§‰μ„ λ³΄λŠ” μ‚¬λžŒλ“€λ‘œ ν•˜μ—¬κΈˆ 가독성을 κ°μ†Œμ‹œν‚€λŠ” λ¬Έμ œκ°€ μžˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Python의 mecab 라이브러리λ₯Ό ν™œμš©ν•˜μ—¬ [κ·Έλ¦Ό 1]의 2번과 같이 λ¬Έμž₯으둜 μž¬κ΅¬μ„±ν•˜μ˜€λ‹€. [κ·Έλ¦Ό 1]의 3λ²ˆμ„ 보면 μœ νŠœλΈŒμ—μ„œ μ œκ³΅ν•˜λŠ” μžλ™μžλ§‰ 슀크립트λ₯Ό 확인할 수 μžˆλŠ”λ°, 이λ₯Ό μˆœμ„œλŒ€λ‘œ νƒμƒ‰ν•˜λ©° ν•œ κΈ€μžμ”© 배열에 μΆ”κ°€ν•˜κ³ , EF(μ’…κ²°μ–΄λ―Έ) ν˜Ήμ€ EC(μ—°κ²°μ–΄λ―Έ)둜 λλ‚˜λŠ” λ¬Έμž₯이 λ§Œλ“€μ–΄μ§€λ©΄ μžλ§‰μ„ μ œκ³΅ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆλ‹€. μ΅œμ’…μ μœΌλ‘œ [κ·Έλ¦Ό 1]의 4번과 같이 이전과 ν˜„μž¬, λ‹€μŒ μžλ§‰μ„ κ΅¬λΆ„ν•˜κ³  ν˜„μž¬ μ˜μƒ μ‹œμ²­μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ, 3λ¬Έμž₯을 ν•¨κ»˜ μ œκ³΅ν•˜μ˜€λ‹€. 이둜 인해 μ‚¬μš©μžλŠ” λ¬Έμž₯ν™” λ˜μ–΄μ§„ μžλ§‰μ„ λ³Ό 수 있고, 이전과 λ‹€μŒ μžλ§‰μ„ 톡해 μžλ§‰μ˜ λ¬Έλ§₯을 νŒŒμ•…ν•˜λŠ”λ° 도움이 λœλ‹€.

3) μžλ§‰ μ»€μŠ€ν„°λ§ˆμ΄μ§• 및 감정뢄석

image [κ·Έλ¦Ό2]
  • μžλ§‰μ˜ κΈ€μžν¬κΈ°, 배경색상, μžλ§‰μƒ‰μƒμ„ λ³€κ²½ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ 가독성을 λ†’μ˜€κ³ , 감정뢄석에 λ”°λ₯Έ μŠ€νƒ€μΌ λ³€ν™”λ‘œ 동적인 μžλ§‰ μ‹œμ²­ κ²½ν—˜μ„ μ œκ³΅ν–ˆλ‹€. κ·Έλ¦Ό 3μ—μ„œ 1λ²ˆμ„ 보면 μŠ€νƒ€μΌλ§ ν•  수 μžˆλŠ” κΈ°λŠ₯듀이 μ œκ³΅λœλ‹€. μ‚¬μš©μžλŠ” μžμ‹ λ§Œμ˜ μžλ§‰ μŠ€νƒ€μΌμ„ μ»€μŠ€ν„°λ§ˆμ΄μ§• ν•˜μ—¬μ„œ 가독성을 높일 수 μžˆκ³ λ‹€. λ³€κ²½ λ‚΄μš©μ€ μ‹€μ‹œκ°„μœΌλ‘œ 적용이 될 수 μžˆλ„λ‘ μ›Ήμ˜ Document 객체λ₯Ό μ‚¬μš©ν–ˆκ³  DOM의 Style을 비동기 처리둜 λ³€κ²½ν•˜μ—¬ μžλ§‰ μŠ€νƒ€μΌλ§ κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆλ‹€. λ˜ν•œ 감정뢄석을 톡해 λ„μΆœλœ 긍정 및 뢀정에 따라 λ³€κ²½λ˜λŠ” μžλ§‰ 색상을 κ²½ν—˜ν•  수 μžˆλ‹€. 긍정이 μΈμ‹λ˜λ©΄ λ…Έλž€μƒ‰μœΌλ‘œ 보여지고, 뢀정이 μΈμ‹λ˜λ©΄ νŒŒλž€μƒ‰μœΌλ‘œ 보여진닀. λ˜ν•œ Konlpyλ₯Ό ν†΅ν•œ ν˜•νƒœμ†Œ 뢄석과 CNN Classifier 기법을 ν™œμš©ν•˜μ—¬μ„œ 감정을 2κ°€μ§€λ‘œ λΆ„μ„ν–ˆλ‹€. 데이터셋은 넀이버 μ˜ν™” 리뷰데이터λ₯Ό ν™œμš©ν–ˆλ‹€. κ·Έλ¦Ό3μ—μ„œ 2λ²ˆμ„ 보면 μžλ§‰ μŠ€νƒ€μΌμ΄ λ…Έλž€μƒ‰μœΌλ‘œ λ³€κ²½λœ 것을 확인할 수 μžˆλŠ”λ° 긍정과 λΆ€μ •μ˜ 감정이 각각 70% 이상 λŠκ»΄μ§€λ©΄ μŠ€νƒ€μΌμ„ λ³€κ²½ν•˜μ˜€λ‹€. 긍정일 λ•ŒλŠ” λ…Έλž€μƒ‰, 뢀정일 λ•ŒλŠ” 빨간색 μŠ€νƒ€μΌμ„ μ μš©ν•˜μ—¬μ„œ 감정을 ν‘œν˜„ν–ˆλ‹€.