Este código foi projetado para tornar um grande número de transcrições de sussurros do OpenAI facilmente pesquisáveis. Portanto, pode -se encontrar uma passagem ou termo específico e a que horas na transcrição. No entanto, ele deve funcionar com qualquer pasta de arquivos .vtt: apenas transcrições não OpenAI de podcasts.
Usei o Whisper OpenAI para transcrever o podcast acidental de tecnologia e implantei um site de site de busca ao vivo na frente do site da Web aqui, alimentado por este módulo (especificamente SearchTranscripts ).
Este módulo tem duas classes:
LoadTranscripts : Isso cria um banco de dados SQLite e uma tabela virtual FTS5 a partir de uma pasta de arquivos de transcrição (arquivos .vtt ou .json ). Ele cria pedaços mais longos de texto (cerca de 300 palavras cada) a partir dos segmentos de transcrição curta no arquivo original para tornar os blocos de texto pesquisáveis. Ele preserva os segmentos de transcrição individuais em um banco de dados separado.
SearchTranscripts : Esta é uma classe Python que usa o banco de dados SQLite para retornar um quadro de dados do Pandas dos principais resultados para a consulta de pesquisa.
Uma vez que o banco de dados SQLite é criado com LoadTranscripts , você pode acessar esse banco de dados por meio de qualquer interface sqlite que desejar, como dados de dados, dBeaver, linha de comando, alquimia SQL, etc. A classe SearchTranscripts é uma maneira simples e conveniente para acessar os dados do Python, usando o sqlite integral.
Clone e CD no diretório principal do repositório, depois execute:
pip install .
from search_transcripts import LoadTranscripts, SearchTranscripts
l = LoadTranscripts('transcripts') ## will create main.db and bm25.pickle
s = SearchTranscripts()
## Returns a pandas dataframe of the top scoring transcript sections, across all transcripts.
s.search('starship enterprise')
##find the exact phrase
s.search('"starship enterprise"')
Então, antes de perceber que o Whisper criaria um arquivo .vtt padrão, eu estava usando a API Python diretamente. Ele gera uma lista de dicionários de Python. Salvar isso como JSON parecia lógico na época. Acho o JSON muito mais facilmente legível por máquina que .vtt e posso ser facilmente convertido em VTT, então ainda suporto esse formato um tanto peculiar. Parece que sim:
[
{
"start": 606.1800000000001,
"end": 610.74,
"text": " It's important to have a goal to work toward and accomplish rather than just randomly learning and half building things"
},
{
"start": 610.74,
"end": 613.0600000000001,
"text": " Having a specific thing you want to build is a good substitute"
},
{
"start": 613.38,
"end": 619.78,
"text": " Keep making things until you've made something you're proud enough a proud of enough to show off in an interview by the time you've built a few"
},
{
"start": 619.78,
"end": 624.26,
"text": " Things you'll start developing the taste you need to make that determination of what's quote unquote good enough"
},
]