如何通过Python从XML字幕提取纯文本用于语言模型训练
嘿,我来帮你搞定从XML字幕里提取纯文本的需求!针对你给出的XML结构,用Python的内置XML解析库就能轻松实现,不用额外装依赖,简单高效。
具体实现方案
思路拆解
我们的核心目标是定位到XML里所有<w>标签的文本内容,按顺序拼接成连贯的纯文本,再输出成你想要的格式,最后保存为TXT文件。
代码示例
import xml.etree.ElementTree as ET def extract_subtitle_text(xml_content): # 解析XML字符串 root = ET.fromstring(xml_content) # 递归查找所有<w>标签(不管嵌套层级) word_nodes = root.findall('.//w') # 提取每个<w>的文本内容 text_segments = [node.text for node in word_nodes] # 处理特殊情况:如果第一个<w>是单独的"-",可以选择跳过(根据你的期望输出调整) # 如果你不需要开头的那个"-",就用下面这行替换上面的text_segments # text_segments = [node.text for node in word_nodes if node.text.strip() != '-'] # 拼接成完整文本并加上你要的前缀 final_text = "- " + ' '.join(text_segments) return final_text # 测试你的示例XML sample_xml = '''<?xml version="1.0" encoding="utf-8"?> <document> <s id="1"> <time id="T1S" value="00:00:14,660" /> <w id="1.1">-</w> <w id="1.2">Všetko</w> <w id="1.3">v</w> <w id="1.4">poriadku</w> <w id="1.5">.</w> </s></document>''' # 获取提取结果 output_text = extract_subtitle_text(sample_xml) print(output_text) # 输出:- - Všetko v poriadku . # 如果启用了跳过开头"-"的逻辑,输出就是你期望的:- Všetko v poriadku . # 保存到TXT文件 with open('subtitle_text.txt', 'w', encoding='utf-8') as txt_file: txt_file.write(output_text)
代码说明
- XML解析:用
ET.fromstring()直接解析XML字符串,不需要先保存为文件(如果你的输入是本地XML文件,可以用ET.parse()替代)。 - 标签定位:
root.findall('.//w')会递归查找所有<w>元素,就算XML里有多个<s>段落也能全部覆盖。 - 文本拼接:用
' '.join()把每个单词/符号用空格分隔,保证文本格式和原字幕一致。 - 保存文件:用
utf-8编码保存TXT,避免特殊字符(比如示例里的斯洛伐克语字符)出现乱码。
如果你的XML文件更大、结构更复杂(比如多个<document>或<s>标签),这个代码也能无缝适配,因为它是递归查找所有<w>元素的。
内容的提问来源于stack exchange,提问作者Jozef Kondáš
相关产品推荐
相关产品推荐

