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
相关产品推荐
相关产品推荐

