如何从XML格式表格中提取术语及对应定义的技术方案咨询
从XML文档提取带行内公式的术语及定义规则指导
目标区域定位规则
首先锁定术语定义的固定存放区域,避免遍历全文档浪费性能:
- 先定位
<title>标签内容为Symbole(符号说明)的章节,20份同类文档的术语都集中在该类章节下 - 该章节下
content-type="tabular.form"的<table-wrap>标签是核心提取容器,固定为两列表格,第一列存术语、第二列存对应定义
内容提取通用规则
术语列(第一列<td>)提取
按节点出现顺序拼接内容,无需调整顺序:
- 普通格式化文本(如
<italic>包裹的斜体字符)直接提取文本值,保留原格式标记 <inline-formula>包裹的MathML公式,可根据需求选择:直接保留原始MathML结构、转换为LaTeX格式、或渲染为图片存储,注意跳过无实际内容的空节点(如示例中class="generated type1"的<mrow>节点)- 示例中第一列提取后得到:
*A*+ MathML下标B,即 AB
定义列(第二列<td>)提取
混合拼接多类型节点,保证语义连贯:
- 普通文本直接提取原值,自动清理首尾多余的换行、空白字符
- 内嵌的
<inline-formula>公式处理规则和术语列一致,示例中mm后的上标2要和前面的文本拼接完整,得到mm² <xref>引用标签直接提取内部文本值即可,若需关联原文档引用可额外记录rid属性值- 示例中第二列提取后得到:
effektive Gesamt-Querschnittsfläche aller Schrauben [mm²], Gleichung (36),可按需求翻译为对应中文
批量处理实现建议
用XPath定位可以大幅提升解析效率,核心参考代码如下:
# 定位所有符号定义的行节点 //*[title/text()='Symbole']//table-wrap[@content-type='tabular.form']/table/tbody/tr # 提取当前行的所有术语节点 ./td[1]/node() # 提取当前行的所有定义节点 ./td[2]/node()
技术栈推荐用Python的lxml库解析XML,搭配pylatexenc或mathjax可完成MathML到LaTeX/可显示格式的转换,20份文档可以批量遍历执行,无需手动调整规则。
校验规则
批量处理后建议加一层校验避免错误:
- 校验术语和定义的一一对应关系,不会出现跨行匹配
- 公式内容校验:确认上下标、特殊符号没有丢失
- 单位拼接校验:定义中括号包裹的单位和公式部分不会拆分,避免出现
mm ]这类错误
内容的提问来源于stack exchange,提问作者mohamed810
相关产品推荐
相关产品推荐

