使用 R 语言处理和提取绿色产品 HS6 代码

今天给大家分享一个实用的数据处理案例:使用 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),该文在绿色贸易相关测度中同样涉及环境产品口径的界定。

百度接口相关:


二、整体思路

PDF 里的表格无法直接用 readxl 读取,但百度 AI 开放平台提供了”表格文字识别”接口,可以把一页 PDF 直接识别成 Excel。整个流程如下:

  1. 获取 access_token:用应用的 API Key 和 Secret Key 通过 OAuth 接口换取调用凭证;
  2. 拆分 PDF:把 subpdf.pdf 按页拆成 pdf_01.pdf … pdf_16.pdf;
  3. Base64 + URL 编码:把每一页 PDF 读成二进制、做 Base64 编码再做 URL 编码;
  4. 调用表格识别接口:把编码后的 PDF 发给 …/ocr/v1/table?return_excel=true,接口直接返回 Excel 的 Base64;
  5. 解码保存:把返回的 Excel 解码写成本地 xlsx;
  6. 合并整理:把 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)
library(jsonlite)
library(httr)
library(pdftools)
library(base64enc)
library(fs)
library(readxl)
library(writexl)

四、步骤一:获取百度 access_token

百度 AI 开放平台的接口需要先凭 API Key 与 Secret Key 换取 access_token。这两个密钥在百度智能云控制台创建”文字识别”应用后获得,替换到下方代码的 client_id 与 client_secret 处即可。

关于密钥申请与接口调用的完整说明,请见之前的课程:
https://rstata.duanshu.com/#/course/901d3f5adacb46c08be568e134289a79

# 用 client_credentials 方式换取 access_token
lst <- jsonlite::fromJSON(
"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的APIKey&client_secret=你的SecretKey"
)
lst$access_token # 后续调用接口时拼接到 URL 末尾

五、步骤二:拆分 PDF

用 pdftools::pdf_split() 把多页 PDF 拆成单页文件,便于逐页送识别。

library(pdftools)
dir.create("pdf")
pdf_split("subpdf.pdf", output = "pdf/pdf")

六、步骤三: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

# 表 1:第 1–14 页
lapply(fls[1:14], function(x) {
readxl::read_xlsx(x, col_names = FALSE) %>%
mutate_all(as.character) %>%
set_names(paste0("X", 1:ncol(.))) %>%
mutate(file = x, rowid = row_number())
}) %>% bind_rows() -> df1
df1 %>% writexl::write_xlsx("table1raw.xlsx")

# 表 2:第 15–16 页
lapply(fls[15:16], function(x) {
readxl::read_xlsx(x, col_names = FALSE) %>%
mutate_all(as.character) %>%
set_names(paste0("X", 1:ncol(.))) %>%
mutate(file = x, rowid = row_number())
}) %>% bind_rows() %>% writexl::write_xlsx("table2raw.xlsx")

# 最后再手动整理下就可以得到 table1 和 table2 了
readxl::read_xlsx("table1.xlsx")
readxl::read_xlsx("table2.xlsx")

十、结果展示

下面直接读取已经处理好的 table1.xlsx 与 table2.xlsx,看看最终提取到的绿色产品 HS6 代码长什么样。

library(readxl)
library(dplyr)
library(ggplot2)
library(stringr)

t1 <- read_xlsx("table1.xlsx")
t2 <- read_xlsx("table2.xlsx")

cat("表 1(环境产品清单)维度:", nrow(t1), "行 ×", ncol(t1), "列\n")
cat("表 2(可再生能源/关键零部件)维度:", nrow(t2), "行 ×", ncol(t2), "列\n")

t1
#> # A tibble: 153 × 6
#> `HS Code` `HS Code Description` Ex-out/ Additional P…¹ Remarks / Environmen…²
#> <chr> <chr> <chr> <chr>
#> 1 840420 "Condensers for stea… <NA> "Used to cool gas str…
#> 2 840490 "Parts for auxiliary… <NA> "Used to cool gas str…
#> 3 840510 "Producer gas or wat… "Include only those\r… "Purifiers remove con…
#> 4 841410 "Vacuum pumps" <NA> "Air handling equipme…
#> 5 841430 "Compressors of a ki… "Compressors used\r\n… "Lower water use, red…
#> 6 841440 "Air compressors mou… "Air compres-\r\nsors… "Transport or extract…
#> 7 841459 "Fans other than tab… "Fans for the trans-\… "Fans for the transpo…
#> 8 841480 "Air pumps, other th… "Industrial hoods,\r\… "Transport or extract…
#> 9 841490 "Parts of vacuum pum… <NA> "Air handling equipme…
#> 10 841960 "Machinery for lique… <NA> "For separation and r…
#> # ℹ 143 more rows
#> # ℹ abbreviated names: ¹`Ex-out/ Additional Product Specification`,
#> # ²`Remarks / Environmental Benefit`
#> # ℹ 2 more variables: `Environmental product category` <chr>,
#> # `Lists/reports` <chr>

t2

#> # A tibble: 21 × 4
#> `HS subheading (6-digit)` HS 6-digit descripti…¹ Classification Justification
#> <chr> <chr> <chr> <chr>
#> 1 854140 "Electrical apparatus… "Renewable En… "Solar PV ce…
#> 2 850231 "Electric generating … "Renewable En… "Clear corre…
#> 3 841919 "Heaters; instantaneo… "Renewable En… "The HS subh…
#> 4 841011 "Turbines; hydraulic … "Renewable En… "Clear corre…
#> 5 841012 "Turbines; hydraulic … "Renewable En… "Clear corre…
#> 6 841090 "Turbines; parts of h… "Spare parts(… "Critical in…
#> 7 730820 "Iron or steel; struc… "Renewable En… "Critical in…
#> 8 848340 "Gears and gearing, o… "Renewable En… "Critical in…
#> 9 848210 "Ball bearings" "Renewable En… "Critical in…
#> 10 848220 "Tapered roller beari… "Renewable En… "Critical in…
#> # ℹ 11 more rows
#> # ℹ abbreviated name: ¹`HS 6-digit description`

其中 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 代码

评论