You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:12:04