[PYTHON] J'ai essayé de traduire de force des sous-titres anglais en japonais avec Udemy

Motivation

** Voir une conférence qui semble intéressante dans Udemy !! Wow! Il n'y a pas de sous-titres japonais ... ** ~~ Parce qu'étudier l'anglais est gênant ~~ ** Souhaitez-vous le traduire en japonais !!! **

introduction

J'ai une certaine capacité à lire et à écrire l'anglais, donc je ne peux pas du tout le lire. Cependant, comme il ne peut pas suivre la vitesse native, il est nécessaire d'arrêter la vidéo une par une et de la traduire d'une main du dictionnaire. Cependant, je ne veux pas faire une telle inefficacité parce que c'est gênant. Alors, traduisons automatiquement les sous-titres actuels en japonais.

Obtenez des sous-titres en anglais

De nombreuses vidéos Udemy ont des sous-titres en anglais, et vous pouvez appuyer sur le bouton ci-dessous en bas à droite de la vidéo pour voir tous les sous-titres de cette vidéo. Et les sous-titres de la partie où l'instructeur parle sont surlignés en bleu clair. image.png En d'autres termes, si vous pouvez obtenir ce sous-titre en surbrillance, vous devriez pouvoir le traduire.

Grattage

Quand j'ai recherché "Python scraping" sur le net, j'ai trouvé qu'il y avait un module appelé Selenium, donc je vais l'utiliser.

Grattage avec Selenium en Python (basique)

En regardant l'article ci-dessus, il semble que vous puissiez obtenir l'élément par id, classe, nom. Je ne suis pas sûr car je n'ai pas fait beaucoup de HTML et de CSS, Si vous connaissez l'identifiant et la classe du sous-titre que vous souhaitez pour le moment, il semble que vous puissiez l'obtenir d'une manière ou d'une autre.

À propos des éléments que vous souhaitez

Je suis allé à la page de cours appropriée d'Udemy et j'ai jeté un coup d'œil aux sous-titres mis en évidence dans les outils de développement.

** Sous-titres en surbrillance **

highlight.html


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

** Sous-titres sans surbrillance **

nonhighlight.html


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

Lorsque je l'ai vérifié pendant la lecture de la vidéo, l'intérieur de la classe a changé entre les sous-titres normaux et les sous-titres en surbrillance. Apparemment, la classe de l'élément en surbrillance est transcript - highlight-cue - 1bEgq.

Code source pour l'acquisition des sous-titres

J'ai en fait obtenu les sous-titres avec Selenium en utilisant le code suivant.

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.Puisque les éléments sont acquis à des intervalles de 2 secondes, imprimez uniquement lorsque les éléments sont différents des éléments précédemment acquis.
        if ret.text != last_text:
            last_text = ret.text
            print(last_text)
    except NoSuchElementException:
        #Si l'élément n'est pas trouvé, une exception se produira, alors serrez-la seulement à ce moment
        pass
    except Exception as e:
        #En cas d'autres exceptions, il se termine pour le moment
        print(e)
        print('terminer')
        exit()

    #0.2 secondes sont appropriées
    time.sleep(0.2)

Il semble que j'ai pu l'obtenir en toute sécurité, donc pour le moment, ensuite.

Traduction en japonais

En parlant de traduction, ** professeur Google **. Quand je l'ai recherché, il semble que la traduction Google soit possible avec Python.

Traduire en utilisant googletrans en Python

J'ai ajouté le code source en référence à l'article ci-dessus.

Code source final

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.Puisque les éléments sont acquis à des intervalles de 2 secondes, imprimez uniquement lorsque les éléments sont différents des éléments précédemment acquis.
        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:
        #Si l'élément n'est pas trouvé, une exception se produira, alors serrez-la seulement à ce moment
        pass
    except Exception as e:
        #En cas d'autres exceptions, il se termine pour le moment
        print(e)
        print('terminer')
        exit()

    #0.2 secondes sont appropriées
    time.sleep(0.2)

finalement

Pour le moment, j'ai pu le traduire en japonais en temps réel, alors ** Yoshi! ** Vous devez vous connecter à chaque fois que vous exécutez le script, parfois cela se termine par une mystérieuse exception, et le japonais est foiré à cause des mauvais sous-titres anglais en premier lieu, mais c'est moins stressant que de traduire d'une seule main du dictionnaire Je peux le faire, alors je continuerai à l'utiliser.

Recommended Posts

J'ai essayé de traduire de force des sous-titres anglais en japonais avec Udemy
J'ai essayé différentes méthodes pour envoyer du courrier japonais avec Python
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé d'intégrer Keras dans TFv1.1
[Python] Mémo pour traduire Matplotlib en japonais [Windows]
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de détecter un objet avec M2Det!
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'utiliser Linux avec Discord Bot
J'ai essayé d'étudier DP avec séquence de Fibonacci
J'ai essayé de démarrer Jupyter avec toutes les lumières d'Amazon
J'ai essayé de juger Tundele avec Naive Bays
J'ai essayé de déboguer.
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
J'ai essayé de déplacer Faster R-CNN rapidement avec pytorch
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé de générer ObjectId (clé primaire) avec pymongo
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de créer un pipeline ML avec Cloud Composer
J'ai essayé de découvrir notre obscurité avec l'API Chatwork
J'ai essayé de mettre Pytest dans la bataille réelle
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé d'interpoler le masque R-CNN avec un flux optique
Traduisez automatiquement DeepL en anglais avec Python et Selenium
J'ai essayé de passer par l'optimisation bayésienne. (Avec des exemples)
J'ai essayé de trouver la classe alternative avec tensorflow
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️