<jupyter_start><jupyter_text>Instalação dos requisitos<jupyter_code>!pip3 install --upgrade webvtt-py<jupyter_output>Requirement already up-to-date: webvtt-py in /opt/conda/lib/python3.8/site-packages (0.4.5)
Requirement already satisfied, skipping upgrade: docopt in /opt/conda/lib/python3.8/site-packages (from webvtt-py) (0.6.2)<jupyter_text>Código<jupyter_code>import os
import webvtt
import sqlite3
import json
import re

diretorio_dados = f'{os.path.abspath("../dados")}{os.path.sep}'
diretorio_legendas = f'{os.path.abspath("../dados/legendas")}{os.path.sep}'
legendas_baixadas = os.listdir(diretorio_legendas)

def carregar_dados_playlist():
    with open(f'{diretorio_dados}playlist.json', 'r') as arquivo:
        return json.load(arquivo)

def carregar_legendas(conexao, legendas, dados):
    resumo = {dado['id']: dado['title']
              for dado in dados['entries'] if dado['title'] != '[Private video]'}
    dados_insercao = list()
    ids_existentes = [id_youtube[0] for id_youtube in conexao.execute(
        'select id_youtube from episodio').fetchall()]

    for legenda in legendas:
        id_video = legenda.split('.')[0]

        if not id_video in ids_existentes:
            titulo = resumo[id_video]
            resultado = re.findall(r'(#\s*)(\d+)', titulo)
            if len(resultado) > 0:
                numero_episodio = re.findall(r'(#\s*)(\d+)', titulo)[0][1]
                conexao.execute('insert into episodio values (?, ?, ?)',
                                (numero_episodio, id_video, titulo))

                for conteudo in webvtt.read(os.path.join(diretorio_legendas, legenda)):
                    conexao.execute('insert into legenda values (?, ?, ?, ?, ?)', (
                        None, numero_episodio, conteudo.start, conteudo.end, conteudo.text))

    conexao.commit()

def executar():
    with sqlite3.connect(f'{diretorio_dados}dados.db') as conexao:
        conexao.execute('''
        create table if not exists episodio (
            id_episodio integer primary key not null,
            id_youtube text not null,
            titulo text not null
        );
        ''')

        conexao.execute('''        
        create table if not exists legenda (
            id_legenda integer primary key autoincrement not null,
            id_episodio integer not null,
            inicio time not null,
            fim time not null,
            conteudo text not null,
            foreign key(id_episodio) references episodio(id_episodio)
        );
        ''')

        dados = carregar_dados_playlist()
        carregar_legendas(conexao, legendas_baixadas, dados)
        print('Processo concluído')

executar()<jupyter_output>Processo concluído
{'fraction_non_alphanumeric': 0.11932028075360178, 'fraction_numerical': 0.0066494274104174364, 'mean_word_length': 2.699453551912568, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 8, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '441214', 'license': 'MIT', 'n_tokens_mistral': 938, 'n_tokens_neox': 933, 'n_words': 188, 'path': 'processos/02_preparar_banco_dados.ipynb', 'repo_name': 'mateusalxd/busca-haruhodo', 'size': '2707'}