Этот код был разработан, чтобы сделать большое количество транскриптов Openai Whisper легко доступно для поиска. Таким образом, можно найти конкретный отрывок или термин, и в какое время в стенограмме. Тем не менее, он должен работать с любой папкой файлов.
Я использовал Whisper Openai для расшифровки подкаста «Случайные технические», и я развернул передний конец веб -сайта Live Pearch Engine здесь, работающий на этом модуле (в частности SearchTranscripts ).
Этот модуль имеет два класса:
LoadTranscripts : Это создает базу данных SQLite и виртуальную таблицу FTS5 из папки файлов транскриптов ( .vtt или .json ). Он создает более длинные куски текста (около 300 слов каждый) из коротких сегментов транскрипта в исходном файле, чтобы сделать текстовые блоки, чтобы найти поиск. Он сохраняет отдельные сегменты транскрипта в отдельной базе данных.
SearchTranscripts : Это класс Python, который использует базу данных SQLite, чтобы вернуть DataFrame Pandas верхних результатов для поискового запроса.
После того, как база данных SQLite создана с помощью LoadTranscripts , вы можете получить доступ к этой базе SearchTranscripts через любой интерфейс SQLite, который вам нравится, например, DataSette, DBEAVER, командная линия, алхимия SQL и т. Д.
Клон и компакт -диск в главный каталог репо, затем запустите:
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"')
Итак, прежде чем я понял, что Whisper создаст стандартный файл .VTT, я напрямую использовал Python API. Он генерирует список словарей Python. Сохранение этого, поскольку JSON казался логичным в то время. Я считаю, что JSON гораздо легче читабелен на машине, чем. Похоже, так:
[
{
"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"
},
]