使用youtube_transcript_api转写YouTube视频输出文本无单词间隔如何解决
YouTube字幕提取单词粘连问题解决方案
问题根源
YouTubeTranscriptApi返回的每条字幕对应视频的一个时间轴片段,text字段本身末尾没有预留空格,现有代码直接拼接所有text内容时,前一个片段的末尾单词会和后一个片段的开头单词直接连接,最终产生单词粘连问题。
解决方案
方案1:修改拼接逻辑(成本最低的修复方案)
拼接每个字幕片段时主动添加空格,同时补充正则清洗多余空格、写文件指定UTF-8编码避免乱码即可,修改后的代码如下:
# 导入依赖库 from youtube_transcript_api import YouTubeTranscriptApi as yta import re # 填入目标YouTube视频ID vid_id = 'S4lTtvlFvyk' # 提取字幕数据 data = yta.get_transcript(vid_id) transcript = '' for value in data: # 直接取text字段,不需要遍历所有键 if 'text' in value: # 拼接时主动加空格,避免粘连 transcript += value['text'] + ' ' # 清洗多余空格、换行符,整理格式 # 把多个连续的空格/换行替换为单个空格 final_tra = re.sub(r'\s+', ' ', transcript).strip() # 写入文件时指定UTF-8编码避免乱码,with语法会自动关闭文件更安全 with open(r"C:\Users\user.name\Desktop\python\DATA\Video files\trans.txt", 'w', encoding='utf-8') as f: f.write(final_tra)
方案2:添加单词分割逻辑(处理残留粘连)
如果部分字幕本身就存在拼写粘连的情况,可以借助wordninja库做英文单词智能分割,进一步优化结果:
- 先安装依赖:
pip install wordninja - 在方案1的代码基础上补充分割逻辑,示例如下:
import wordninja # 接方案1的final_tra输出,处理残留粘连 fixed_words = [] for word in final_tra.split(): # 单词长度超过15个字符时大概率是粘连,做智能分割 if len(word) > 15: fixed_words.extend(wordninja.split(word)) else: fixed_words.append(word) final_tra = ' '.join(fixed_words)
内容的提问来源于stack exchange,提问作者Parul Verma
相关产品推荐
相关产品推荐

