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

Python xmptools提取PDF XMP元数据:非RDF包裹项读取问题

问题描述

我想用Python提取PDF里的元数据,试了xmptools库,但没法提取全部元数据。以这篇IOP论文PDF为例,运行以下脚本:

from xmptools import XMPMetadata, DC
xmp = XMPMetadata.fromFile("Leonard_2015_Comment_on_‘Dimensionless_units_in_the_SI’.pdf")[0]
print( xmp.getContainerItems(DC.publisher) )

能成功得到结果[rdflib.term.Literal('IOP Publishing')],但把最后一行改成print( xmp.getContainerItems(DC.identifier) )时,返回None。

分析PDF里的XML结构后发现,dc:publisher被RDF标签包裹,而dc:identifier没有:

<dc:publisher>
            <rdf:Bag>
               <rdf:li>IOP Publishing</rdf:li>
            </rdf:Bag>
         </dc:publisher>
     <dc:identifier>doi:10.1088/0026-1394/52/4/613</dc:identifier>

请问能不能通过xmptools读取这种未用RDF标签包裹的简单元数据项?

解决方案

xmptools的getContainerItems()方法专门用来读取带RDF容器(如Bag、Seq、Alt)的元数据,对于无RDF包裹的简单节点,改用getProperty()方法即可读取。

修改后的代码如下:

from xmptools import XMPMetadata, DC
xmp = XMPMetadata.fromFile("Leonard_2015_Comment_on_‘Dimensionless_units_in_the_SI’.pdf")[0]
# 读取无RDF包裹的简单元数据项
identifier = xmp.getProperty(DC.identifier)
print(identifier)

运行后就能得到doi:10.1088/0026-1394/52/4/613的结果。

背后逻辑是xmptools基于rdflib开发,getContainerItems()会检索属性对应的RDF容器节点,而getProperty()直接读取属性关联的字面量值,刚好适配这类无容器包裹的简单元数据。

内容的提问来源于stack exchange,提问作者Blair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:00:09