Científico de Datos: Implementación de Tecnología de YouTube

Científico de Datos: Implementación de Tecnología de YouTube

Si este es el primer articulo que lees, te sugerimos revisar la primera fase (implementación de tecnología) wit.ai y segunda (implementación de la tecnología PubChem) en donde podrás conocer al respecto de cómo estructurar los códigos de programación y verificar si los puedes modificar y adecuar a tus requerimientos. Los articulos estan explicados de manera detallada para que puedas entender al respecto de la funcionalidad y ventajas de utilizar Mandy – El acompañante inteligente.

El paso final de la implementación de PubChem se alcanza cuando configura la función content_sorted. La función guarda los datos en algunas variables principales que luego se enviarán por correo electrónico. Las principales variables que tienes que modificar son ureceiver y usender de forma que ureceiver es el correo de destino final y usender es el correo desde el que enviarás toda la información.

Los correos electrónicos contendrán los datos extraídos que se recuperaron de las funciones handling_store, ghs_classification y toxicity.

Implementación de la transcripción de audio de Youtube

La implementación de la transcripción de audio de Youtube consta de dos secciones, transcripción completa de audio y resumen de texto. En primer lugar, es importante comprender que el uso de productos químicos en el hogar o en cualquier otro lugar debe tomarse en serio, por lo que se sugiere confiar en información confiable de Internet. PubChem proporciona información confiable en la que puede confiar, sin embargo, todos saben que la teoría a veces no sucede como se esperaba. Esta aplicación espera alcanzar los conocimientos que se han aplicado y que se pueden obtener de personas con experiencia que grabaron audio o video con fines de capacitación.

El propósito de esta sección es que se obtenga información práctica de un video de youtube para que obtengas el texto completo y un pequeño resumen. Es posible que no tenga tiempo suficiente para ver todo el video, por lo que solo necesita el pequeño resumen y verificar el contenido completo si le interesó. En última instancia, podría terminar viendo el video para obtener más información y una comprensión más precisa de lo que necesita saber sobre un compuesto químico específico.

Las bibliotecas de Python que utiliza esta aplicación son:

• youtube_search
• youtube_dl
• bs4
• nltk
• heapq
• unicode_literals
• time

Puede instalar esas bibliotecas de Python con pip install [nombre de la biblioteca] en la consola terminal.

Texto completo del Video – Funcion get_large_audio_transcription

La función get_large_audio_transcription es la que puedes modificar si quieres mejorar la transcripción de todo el audio en un video que se encuentra en Youtube. Esta función se basa en los algoritmos de aprendizaje automático y las herramientas de inteligencia artificial que utiliza YouTube para sugerirle videos. Por lo tanto, puede dejar esta función como está o intentar modificarla como desee.

Resumen de texto – Funcion summaryizing_video

La función summaryizing_video es la función principal de la implementación de la transcripción de audio de Youtube, ya que se basa en la función get_large_audio_transcription para obtener el resumen de texto del video elegido. Puede cambiar el número de oraciones que contendrá su resumen para que tenga 10 oraciones por defecto y el criterio de selección de la oración se base en la frecuencia de palabras en el audio.

El código de programación que puede modificar para esta implementación es:

def summarizing_video(chemical_compound): confirmation_video=”” summary=” formatted_article_text=” max_elements=1

#results=YoutubeSearch('Benzene',max_results=5).to_json()
results=YoutubeSearch(chemical_compound,max_results=max_elements).to_dict()
#print(results)

def validate_reply(confirmation_video):

    confirmation_verified=''
    if confirmation_video=='YES' or confirmation_video=='NO':
        confirmation_verified=confirmation_video
        return confirmation_verified
    else:
        print('Please confirm that you want me to transcribe it?')
        confirmation_video=input('(yes/no):').upper()
        return validate_reply(confirmation_video)

for i in range(max_elements):

    url="https://www.youtube.com/watch?v="+results[i]['id']
    title_video=results[i]['title']
    duration=results[i]['duration']
    views=results[i]['views']
    print('I found this video, do you want me to transcribe it?\n')
    print('****************')
    print("Title: ",title_video)
    print('Duration',duration)
    print("Url",url)
    print("Views",views)
    print("***************")
    confirmation_video=input('Transcribing video? (yes/no):').upper()
    confirmation_verified=validate_reply(confirmation_video)
    print('out',confirmation_verified)
    if confirmation_verified=='YES':
        print('in',confirmation_verified)
        ydl_opts={
            'format':'bestaudio/best',
            'postprocessors': [{
                'key':'FFmpegExtractAudio',
                'preferredcodec':'wav',
                'preferredquality':'192',       
            }],
        }
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.download([url])
            info_dict = ydl.extract_info(url)
            fn = ydl.prepare_filename(info_dict)
            path=fn[:-4]+"wav"


        r=sr.Recognizer()
        print("started..")
        def get_large_audio_transcription(path):
            sound=AudioSegment.from_wav(path)
            chunks=split_on_silence(sound,
                                    min_silence_len=500,
                                    silence_thresh=sound.dBFS-14,
                                    keep_silence=500,)
            folder_name="audio-chunks"
            if not os.path.isdir(folder_name):
                os.mkdir(folder_name)
            whole_text=""
            for i,audio_chunk in enumerate(chunks,start=1):
                chunk_filename=os.path.join(folder_name,f"chunk{i}.wav")
                audio_chunk.export(chunk_filename,format="wav")
                with sr.AudioFile(chunk_filename) as source:
                    audio_listened=r.record(source)

                    try:
                        text=r.recognize_google(audio_listened,language="en-US")
                    except sr.UnknownValueError as e:
                        pass
                        #print("Error:",str(e))
                    else:
                        text=f"{text.capitalize()}. "
                        #print(chunk_filename,":",text)
                        whole_text+=text

            return whole_text

        # (starting here:)#path="Audacity FFMpeg codec install for Windows-v2J6fT65Ydc.wav"
        #print("\nFull text:",get_large_audio_transcription(path))
        article_text=get_large_audio_transcription(path)

        article_text=re.sub(r'\[[0-9]*\]',' ',article_text)
        article_text=re.sub(r'\s+',' ',article_text)

        formatted_article_text=re.sub('^a-zA-Z',' ',article_text)
        formatted_article_text=re.sub(r'\s+',' ',formatted_article_text)

        #print(formatted_article_text)  #final text from audio

        print('*********************')
        print("Summaryzing..")
        #tokenization
        sentence_list=nltk.sent_tokenize(article_text)

        stopwords=nltk.corpus.stopwords.words('english')
        word_frequencies={}
        for word in nltk.word_tokenize(formatted_article_text):
            if word not in stopwords:
                if word not in word_frequencies.keys():
                    word_frequencies[word]=1
                else:
                    word_frequencies[word]+=1

        #print(list(map(str,word_frequencies)))

        #word frequency
        maximum_frequency=max(word_frequencies.values())
        for word in word_frequencies.keys():
            word_frequencies[word]=(word_frequencies[word]/maximum_frequency)

        #print(word_frequencies)

        #sentence score
        sentence_scores={}
        for sent in sentence_list:
            for word in nltk.word_tokenize(sent.lower()):
                if word in word_frequencies.keys():
                    if len(sent.split(' '))<50:
                        if sent not in sentence_scores.keys():
                            sentence_scores[sent]=word_frequencies[word]
                        else:
                            sentence_scores[sent]+=word_frequencies[word]

        #top 7 most frequent sentences
        summary_sentences=heapq.nlargest(10,sentence_scores,key=sentence_scores.get)
        summary=' '.join(summary_sentences)

return (summary,formatted_article_text)

Te sugerimos consultar el diagrama de flujo de Mandy el Acompañante Inteligente para que entiendas las etapas y funciones que se activan en determinado momento en el proceso de la transcripción del audio de tus videos. La fase de implementación de modulo de youtube es la fase final por lo que puedes verificar la primera fase (implementación de tecnología) wit.ai y segunda (implementación de la tecnología PubChem).

Esperamos sera de tu agrado este tutorial y si hay preguntas puedes realizar tus preguntas en la seccion de comentarios que aparece a continuación.