Udemy에서 영어 자막을 무리하게 일본어 번역해 보았다

동기



Udemy에서 재미있을 것 같은 강좌 봐!!
와우! 일본어 자막이 없어 ...
영어 공부는 귀찮기 때문에
일본어로 번역하시겠습니까!!!

소개



필자는 격노했다.
반드시 카나치 폭력의 왕 영어 자막을 제외해야 한다고 결의했다.
필자에게는 영어를 모른다.
필자는, 달리기의 신인 프로그래머이다.
키보드를 두드려 마우스를 굴리고 살아왔다.
하지만 귀찮은 것에 대해서는, 사람 한배에 민감했다.
(죄송합니다, 하고 싶었을 뿐입니다)

필자에게도 다소 영어의 읽고 쓰기 능력은 있기 때문에 전혀 읽을 수 없는 것은 아니다.
다만 네이티브의 스피드에는 붙어서는 안 되므로 축제 동영상을 멈추고 사전 한손으로 번역할 필요가 있다.
하지만 그런 비효율적인 것은 귀찮아서 하고 싶지 않다.
그래서 현재 자막을 자동으로 일본어로 번역해 본다.

영어 자막 취득



Udemy의 많은 동영상에는 영어 자막이 존재하고, 동영상의 오른쪽 하단에 있는 아래의 버튼을 누르면 그 동영상의 모든 자막이 표시된다.
그리고 강사가 말하는 곳의 자막은 밝은 하늘색으로 하이라이트된다.

즉, 이 하이라이트 되고 있는 자막을 취득할 수 있으면 번역할 수 있을 것이다.

스크래핑



넷에서 「Python 스크래핑」이라고 검색하면 Selenium이라는 모듈이 있는 것을 알았으므로 이것을 사용해 본다.

파이썬에서 Selenium을 사용하여 스크래핑 (기본)

위의 기사를 보면, 아무래도 id나 class,name로 요소를 취득할 수 있는 것 같다.
필자는 HTML이나 CSS는별로 한 적이 없기 때문에 잘 모르겠지만,
우선 원하는 자막의 id나 class를 알면 어떻게든 취득할 수 있을 것 같다.

원하는 요소에 대해



Udemy의 적당한 강좌 페이지로 이동하여 개발자 도구에서 강조된 자막을 조금 살펴보았다.

하이라이트가 붙은 자막

highlight.html
<span data-purpose="cue-text" class="transcript--highlight-cue--1bEgq">Highlight text</span>

하이라이트가 없는 자막

nonhighlight.html
<span data-purpose="cue-text" class="">Non highlight text</span>

실제로 동영상을 재생하면서 확인해 보니 보통 자막과 하이라이트된 자막에서는 class 속이 바뀌었다.
분명히 강조 표시된 요소의 클래스는 transcript--highlight-cue--1bEgq가 될 것 같습니다.

자막 취득의 소스 코드



실제로 다음 코드를 사용하여 Selenium에서 자막을 얻었다.

scraping.py
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome(driver_path)
driver.get(r'https://www.udemy.com/join/login-popup/?next=/home/my-courses/learning/')
last_text = None

while True:
    try:
        ret = driver.find_element_by_class_name('transcript--highlight-cue--1bEgq')
        #0.2秒間隔で要素を取得しているので前回取得した要素と違う時だけprintする
        if ret.text != last_text:
            last_text = ret.text
            print(last_text)
    except NoSuchElementException:
        #要素が見つからない場合は例外が発生するのでこの時だけ握りつぶす
        pass
    except Exception as e:
        #それ以外の例外のときはとりあえず終了する
        print(e)
        print('終了します')
        exit()

    #0.2秒は適当
    time.sleep(0.2)

무사히 취득할 수 있을 것 같기 때문에 우선 다음.

일본어로 번역



번역이라고 하면 Google 선생님.
조사해 보면 Python으로 Google 번역이 가능하다.

파이썬에서 googletrans을 사용하여 번역

위의 기사를 참고로 소스 코드를 추가했다.

최종 소스 코드



translate.py
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from googletrans import Translator

driver = webdriver.Chrome(driver_path)
driver.get(r'https://www.udemy.com/join/login-popup/?next=/home/my-courses/learning/')
last_text = None

translator = Translator()

while True:
    try:
        ret = driver.find_element_by_class_name('transcript--highlight-cue--1bEgq')
        #0.2秒間隔で要素を取得しているので前回取得した要素と違う時だけprintする
        if ret.text is not None and ret.text != last_text:
            last_text = ret.text
            print(last_text)
            print(translator.translate(last_text, dest='ja').text)
    except NoSuchElementException:
        #要素が見つからない場合は例外が発生するのでこの時だけ握りつぶす
        pass
    except Exception as e:
        #それ以外の例外のときはとりあえず終了する
        print(e)
        print('終了します')
        exit()

    #0.2秒は適当
    time.sleep(0.2)

마지막으로



우선, 실시간으로 일본어로 번역 할 수 있었으므로 요시!
스크립트를 실행할 때마다 로그인해야 하거나 때로는 수수께끼 예외로 종료하거나 원래 영어 자막이 잘못되어 일본어가 엉망이 되거나 사전 한손으로 번역하는 것보다 스트레스 없이 할 수 있으므로 앞으로도 사용해 나가려고 생각한다.

좋은 웹페이지 즐겨찾기