Python如何基于预设关键词列表拆分Google Speech-to-Text转写文本?
问题核心原因
现有逻辑的本质缺陷是没有划分关键词的文本边界,只是机械取关键词后的第一个分句当值,遇到像Observations这类后面跟着多个分句、没有紧跟内容的关键词时,就会把第一个分句(也就是Point)错当成字段值,完全不符合两个相邻关键词之间的所有内容归前一个关键词所有的拆分规则。
实现方案
按照“关键词为块起点、相邻关键词之间的所有文本为对应块的值”的规则改写逻辑,具体步骤:
- 预处理阶段保留原始文本的大小写格式,不要全局转小写导致丢失原内容的格式
- 遍历拆分后的文本片段,定位所有预设关键词的出现位置,记录每个关键词对应的片段索引
- 对每个关键词,截取从当前关键词片段之后、到下一个关键词出现位置之前的所有文本片段,拼接为该关键词的完整值;如果当前关键词后面没有其他关键词,值直接为空
- 匹配关键词时采用“片段以目标关键词开头”的判断规则,避免把包含关键词字符串的普通文本(比如把"headdress"误判为"heading")错判为字段标记
可直接衔接现有流程的代码
# 原始转写文本,保留原始格式 raw_transcript = 'Heading COVID-19 Test 2. Hypothesis. The vaccine still works. Observations. Point. Pfizer is 98% effective. Point. Moderna is 97% effective. Save' keyword_list = ['heading', 'hypothesis', 'observations', 'save'] # 按.拆分文本,清理空片段,保留原文本内容 split_parts = [part.strip() for part in raw_transcript.split('.') if part.strip()] # 定位所有关键词的位置,记录(关键词名,所在片段索引) keyword_index_map = [] for idx, part in enumerate(split_parts): part_lower = part.lower() for kw in keyword_list: if part_lower.startswith(kw): keyword_index_map.append((kw, idx)) # 生成最终结构化字典 structured_dict = {} for pos, (current_kw, part_idx) in enumerate(keyword_index_map): # 确定当前值的截取终点:下一个关键词的索引,或文本末尾 if pos < len(keyword_index_map) - 1: end_idx = keyword_index_map[pos+1][1] else: end_idx = len(split_parts) # 收集当前关键词对应的所有文本:去掉关键词本身的剩余内容 + 后续直到下一个关键词前的片段 current_part_text = split_parts[part_idx][len(current_kw):].strip() trailing_parts = split_parts[part_idx+1 : end_idx] full_value = '. '.join([current_part_text] + trailing_parts).strip('.').strip() structured_dict[current_kw] = full_value
代码运行效果
最终生成的字典完全符合预期:
{ 'heading': 'COVID-19 Test 2', 'hypothesis': 'The vaccine still works', 'observations': 'Point. Pfizer is 98% effective. Point. Moderna is 97% effective', 'save': '' }
适配优化提示
- 拿到
observations字段的值后,可直接按Point拆分内容生成列表,自动匹配HTML无序列表的结构,不需要额外硬编码定位 - 可增加索引越界容错:如果某个关键词在文本中未匹配到,字典中自动给该键赋值为空字符串,避免流程中断
- 匹配关键词时可增加空格边界判断,适配转写文本里关键词前后带多余标点的情况
内容的提问来源于stack exchange,提问作者Karan Dewani
相关产品推荐
相关产品推荐

