如何用Python从TEI XML提取含标签ID的连贯文本?
解决TEI XML中标签的xml:id提取与文本格式化问题
直接上可运行的代码方案,精准匹配你的需求:
核心处理逻辑
- 用
lxml.etree解析TEI XML文档 - 定位所有
<ab>标签并提取xml:id属性 - 清理标签内文本的多余换行、连续空格,生成连贯内容
- 按「xml:id值: 连贯文本」的格式输出
代码实现
from lxml import etree import re # 示例TEI XML内容(替换为你的文件路径或实际XML字符串) tei_content = """ <TEI xmlns="http://www.tei-c.org/ns/1.0"> <text> <body> <ab xml:id="para_001">这是第一段文本, 包含多余换行和零散空格。</ab> <ab xml:id="para_002">第二段文本格式混乱, 需要整理成连贯的一句话。</ab> </body> </text> </TEI> """ # 解析XML(本地文件用etree.parse('你的TEI文件.xml')) root = etree.fromstring(tei_content) # TEI默认命名空间配置 tei_ns = {'tei': 'http://www.tei-c.org/ns/1.0'} # 遍历所有<ab>标签处理 for ab_tag in root.xpath('//tei:ab', namespaces=tei_ns): # 提取xml:id属性(需用完整XML命名空间URI) ab_id = ab_tag.get('{http://www.w3.org/XML/1998/namespace}id') # 提取并清理文本:移除多余换行、连续空白,转为连贯字符串 raw_text = ab_tag.text_content() clean_text = re.sub(r'\s+', ' ', raw_text.strip()) # 按要求格式输出 print(f"{ab_id}: {clean_text}")
关键细节说明
- xml:id属性获取:
xml:属于特殊命名空间,必须用完整URI{http://www.w3.org/XML/1998/namespace}id才能准确提取属性值,直接用ab_tag.get('xml:id')可能因命名空间规则失效。 - 文本清理:
re.sub(r'\s+', ' ', raw_text.strip())会把所有连续的换行、空格、制表符替换为单个空格,彻底解决格式混乱问题。 - 命名空间处理:TEI XML通常带默认命名空间,xpath查询时必须指定
namespaces参数,否则无法定位到<ab>标签。
内容的提问来源于stack exchange,提问作者bsteo
相关产品推荐
相关产品推荐

