รหัสนี้ได้รับการออกแบบมาเพื่อให้การถอดเสียง Whisper ของ OpenAI เป็นจำนวนมากที่สามารถค้นหาได้อย่างง่ายดาย ดังนั้นเราสามารถค้นหาข้อความหรือคำที่เฉพาะเจาะจงเกิดขึ้นและเวลาใดในการถอดเสียง อย่างไรก็ตามมันควรทำงานกับโฟลเดอร์ใด ๆ ของไฟล์. vtt: ไม่ใช่เพียงแค่การถอดเสียงของพอดคาสต์ OpenAI
ฉันใช้ Whisper OpenAI เพื่อคัดลอกพอดคาสต์ Tech Incishedal Tech และฉันปรับใช้เว็บไซต์ Search Live Search Live ที่นี่ขับเคลื่อนโดยโมดูลนี้ (โดยเฉพาะ SearchTranscripts )
โมดูลนี้มีสองคลาส:
LoadTranscripts : สิ่งนี้สร้างฐานข้อมูล SQLite และตารางเสมือน FTS5 จากโฟลเดอร์ของไฟล์การถอดเสียง ( .vtt หรือ .json ไฟล์) มันสร้างข้อความที่ยาวขึ้น (ประมาณ 300 คำแต่ละคำ) จากกลุ่มการถอดเสียงสั้น ๆ ในไฟล์ต้นฉบับเพื่อให้การค้นหาบล็อกข้อความค้นหาได้ มันเก็บรักษาส่วนการถอดเสียงแต่ละส่วนไว้ในฐานข้อมูลแยกต่างหาก
SearchTranscripts : นี่คือคลาส Python ที่ใช้ฐานข้อมูล SQLite เพื่อส่งคืน dataframe pandas ของผลลัพธ์สูงสุดสำหรับการค้นหา
เมื่อฐานข้อมูล SQLite ถูกสร้างขึ้นด้วย LoadTranscripts คุณสามารถเข้าถึงฐานข้อมูลนั้นผ่านอินเทอร์เฟซ SQLite ใด ๆ ที่คุณชอบเช่น DataSette, DBeaver, บรรทัดคำสั่ง, SQL Alchemy, ฯลฯ คลาส SearchTranscripts นั้นเป็นวิธีที่ง่ายและสะดวกในการเข้าถึงข้อมูลจาก Python
โคลนและซีดีลงในไดเรกทอรีหลักของ repo จากนั้นเรียกใช้:
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 ที่อ่านได้ง่ายกว่า. VTT และสามารถแปลงเป็น VTT ได้อย่างง่ายดายดังนั้นฉันยังคงสนับสนุนรูปแบบที่ค่อนข้างแปลก ๆ นี้ ดูเหมือนว่า:
[
{
"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"
},
]