今天给大家分享一个实用的数据处理案例:使用 R 语言调用百度的「表格文字识别」接口,把一份环境技术产品清单 PDF 批量转换成结构化的绿色产品 HS6 位代码表。
这个方法特别适合处理那些”只存在于 PDF 表格里、没有现成电子版”的官方清单。附件中提供了该数据处理的参考文献(UNCTAD 的 Trade in Environmentally Sound Technologies 报告、以及蒋灵多等《制度为绿色护航》一文)以及对应的 R 语言代码(main.R),本讲义即基于此整理而成。
关于百度接口的认证与调用方式,可参考之前的课程:
https://rstata.duanshu.com/#/course/901d3f5adacb46c08be568e134289a79
一、数据来源与参考文献
本案例要提取的是环境友好型技术(Environmentally Sound Technologies, EST)对应的 HS 编码(海关商品分类编码),也就是通常所说的”绿色产品 HS6 位代码”。这些代码被广泛用于测度绿色贸易、环境产品出口等研究。
核心数据来源于联合国贸发会议(UNCTAD)的报告:
- UNCTAD (2016). Trade in Environmentally Sound Technologies: Implications for Developing Countries. 该报告附录给出了按 HS 编码归类的大量环境技术产品清单(空气污染控制、可再生与清洁能源、固体废物与危险废物管理、废水与水管理、环境修复等类别)。本次处理所用的 subpdf.pdf(共 16 页)即节选自该报告的产品清单部分。
作为关联的国内研究,可参考:
- 蒋灵多、王孝松 等 (2025).《制度为绿色护航:知识产权制度完善与绿色贸易发展》(附件 制度为绿色护航:知识产权制度完善与绿色贸易发展_蒋灵多.pdf),该文在绿色贸易相关测度中同样涉及环境产品口径的界定。
百度接口相关:
- 百度 AI 开放平台 · 表格文字识别(OCR):https://ai.baidu.com/tech/ocr
- RStata 百度接口调用课程:https://rstata.duanshu.com/#/course/901d3f5adacb46c08be568e134289a79
二、整体思路
PDF 里的表格无法直接用 readxl 读取,但百度 AI 开放平台提供了”表格文字识别”接口,可以把一页 PDF 直接识别成 Excel。整个流程如下:
- 获取
access_token:用应用的 API Key 和 Secret Key 通过 OAuth 接口换取调用凭证; - 拆分 PDF:把 subpdf.pdf 按页拆成 pdf_01.pdf … pdf_16.pdf;
- Base64 + URL 编码:把每一页 PDF 读成二进制、做 Base64 编码再做 URL 编码;
- 调用表格识别接口:把编码后的 PDF 发给 …/ocr/v1/table?return_excel=true,接口直接返回 Excel 的 Base64;
- 解码保存:把返回的 Excel 解码写成本地 xlsx;
- 合并整理:把 16 个 xlsx 读入并合并(前 14 页为表 1,后 2 页为表 2),稍作人工整理得到最终的 table1.xlsx 与 table2.xlsx。
下面按步骤给出完整 R 代码。注意:第 2–6 步涉及网络请求与本地中间文件,本讲义在编译时仅展示代码、不实际执行(接口调用需要有效的百度 API 密钥;最终结果已随附件提供)。最后一节的”结果展示”则直接读取已处理好的 table1.xlsx / table2.xlsx 进行演示。
三、准备工作与 R 包加载
需要用到以下 R 包:tidyverse(数据处理)、jsonlite(解析 JSON)、httr(发送 HTTP 请求)、pdftools(拆分 PDF)、base64enc(Base64 编解码)、fs(文件遍历)、readxl / writexl(读写 Excel)。
library(tidyverse) |
四、步骤一:获取百度 access_token
百度 AI 开放平台的接口需要先凭 API Key 与 Secret Key 换取 access_token。这两个密钥在百度智能云控制台创建”文字识别”应用后获得,替换到下方代码的 client_id 与 client_secret 处即可。
关于密钥申请与接口调用的完整说明,请见之前的课程:
https://rstata.duanshu.com/#/course/901d3f5adacb46c08be568e134289a79
# 用 client_credentials 方式换取 access_token |
五、步骤二:拆分 PDF
用 pdftools::pdf_split() 把多页 PDF 拆成单页文件,便于逐页送识别。
library(pdftools) |
六、步骤三:Base64 + URL 编码
百度表格识别接口接收的是”PDF 文件的 Base64 字符串”。我们读取二进制、做 Base64 编码,再用 URLencode() 处理特殊字符后即可放入请求体。
以第一页为例:
此处代码需要下载讲义材料查看~
七、步骤四:调用百度「表格文字识别」接口
把编码后的 PDF 通过 httr::POST() 发到表格识别接口,并带上 return_excel=true 让接口直接返回 Excel;返回结果里的 excel_file 字段是 Excel 文件的 Base64 字符串,解码后即得到这一页的表格。
此处代码需要下载讲义材料查看~
如果只想在浏览器里查看识别结果,可以用
listviewer::jsonedit(content(res))交互式查看返回结构。
八、步骤五:循环所有页面并转换
把上面的逻辑套进循环,逐页识别并保存为 xlsx_01.xlsx … xlsx_16.xlsx。
此处代码需要下载讲义材料查看~
九、步骤六:合并与整理
把 16 个 xlsx 读入、统一加列名后按行合并。前 14 页对应表 1(共 153 项环境产品),第 15–16 页对应表 2(21 项可再生能源/关键零部件)。合并后先导出为 table1raw.xlsx / table2raw.xlsx,再做少量人工整理(清理换行、统一类别名称等)得到最终成果 table1.xlsx / table2.xlsx。
fs::dir_ls("xlsx") -> fls |
十、结果展示
下面直接读取已经处理好的 table1.xlsx 与 table2.xlsx,看看最终提取到的绿色产品 HS6 代码长什么样。
library(readxl) |
#> # A tibble: 153 × 6 |
t2
#> # A tibble: 21 × 4 |
其中 Table A1.1 是涵盖各类环保技术商品(EST-EGs)的完整分析清单,包含大量多用途产品,用于宏观整体贸易统计;Table A1.2 是从中筛选出 21 项环保终端用途清晰的环保技术商品子集,用于产业竞争力测算与可持续性深度评估。
其中 EST-EGs:
EST = Environmentally Sound Technologies 无害环境技术(环保技术)
EGs = Environmental Goods 环境商品
EST-EGs = goods related to environmentally sound technologies
直译:与无害环境技术相关的产品,即环保技术类环境商品
点击这里跳转到 RStata 短书平台获取附件:使用 R 语言处理和提取绿色产品 HS6 代码
评论