ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

政府工作报告绿色环保词频数据:采集清洗到统计的完整实操

政府工作报告绿色环保词频数据:采集清洗到统计的完整实操 做政府工作报告文本分析这几年突然热起来尤其是绿色发展相关的词频统计成了不少高校课题组和智库的标配数据。手头刚整理完一套覆盖2002—2025年省级、地级市层面的政府工作报告绿色环保发展词频数据从报告采集、文本清洗、关键词表搭建到词频统计整个流程踩了不少坑也总结出一些能直接复用的经验。这篇就把这套数据从零到成品的完整链路拆开讲清楚包括关键词表怎么定、统计口径怎么选、面板数据格式怎么设计以及那些软件和文档里不会写的实操细节。1. 先说价值词频数据不是简单的数数很多第一次拿到这类数据的人会问这不就是把报告里的绿色环保生态数一遍吗听起来确实简单但真正把年份、地区、行政层级串起来之后你看到的就是一张政策注意力变迁的量化地图。1.1 一次词频背后是一张政策光谱同一个词在不同年份出现的密度完全不同。以绿色为例2002年前后的省级报告里这个词大多出现在绿色食品绿色通道这类具体事务中和生态环保关系不大到2017年前后绿色发展开始成体系地出现在报告的年度工作部署里再往后碳达峰碳中和高频出现词频曲线几乎是垂直拉升的。这些变化不是拍脑袋能感受到的只有把2002—2025年的报告统一处理成数字才能清晰看到政策重心在时间轴上的移动轨迹。词频数据真正的价值在于它把重视程度变成了可计算的变量。过去研究环保政策要么靠文件文本摘录要么靠专家评分主观性强且难以复现。词频统计只要关键词表和处理流程固定任何人都能对同一批报告得到一致的结果这就为后续回归分析、区域比较、政策效果评估提供了标准化的数据基础。1.2 这套数据到底谁会用到从我做数据这段时间接触的需求来看使用者大概分三类。学术界用得最多经济学、公共管理、环境科学的论文里经常用绿色环保词频作为地方政府环保重视程度的代理变量研究它对产业结构升级、企业绿色创新、外商投资、污染排放的影响。做这类研究的人需要的是能直接合并进计量模型的省级或地级市面板数据一列是年份一列是地区后面跟着各维度词频。第二类是智库和咨询机构他们更关注词频背后的结构变化比如各区域绿色环保语境的差异或者某省五年间政策话语的转折点用来辅助撰写政策评估报告或行业白皮书。第三类是数据服务商和自媒体研究者他们会把词频整理成可视化图表配合官方统计数据做内容输出。这三类人有个共同点都希望拿到的数据是干净、连续、口径统一的而这恰恰是这类数据最难做到的。2. 数据生产线从报告文本到词频表要得到词频数据第一步不是写代码而是拿到2002年以来各省、各地级市完整的政府工作报告文本。这一步的工程量往往超出预想。2.1 报告去哪拿官网、年鉴和互补校验政府工作报告的公开渠道比较分散。最近十年大约2015年以后的报告绝大多数可以在省级人民政府官网的政府工作报告专题栏目找到地级市的情况差一些不少城市只保留近五年的报告更早年份的往往要从地方年鉴、政府公报或PDF存档里翻。早年报告2002—2010年前后有相当一部分是扫描版存在年鉴光盘或地方志网站里用的是图片格式没法直接搜索需要OCR转文字。这条渠道最磨人因为各省的存档质量参差不齐有的省份整套报告整整齐齐有的省份缺了好几年需要用统计年鉴里的政府工作报告附录去补缺。我的经验是一个严谨的采集流程应该做到双重校验先从官网或公开数据库抓一轮再以地方志、年鉴、数据平台交叉验证手工核对每个年份文件是否存在、年份标注是否准确、报告内容是否完整。千万不要完全依赖爬虫网站的目录结构、文件命名规则经常变化爬虫结果必须经过抽检才能进入样本库。2.2 文本清洗和格式统一比想象中麻烦拿到PDF或Word之后首先要统一转成纯文本才有资格谈分词和统计。这里的坑非常多。PDF转文本常见做法是直接用pdfplumber或PyPDF2处理但政府工作报告排版多样有的双栏有的带页眉页脚有的夹杂表格。我做过测试pdfplumber在三者里保留中文字符和段落结构的能力最强PyPDF2生成的文本经常把段落顺序打乱而且对扫描版无能为力。扫描版的报告必须配合OCR识别Tesseract配合中文语言包是免费方案里靠谱的但识别速度和准确率受扫描分辨率影响大300dpi以上识别效果才可用。有个细节容易被忽略报告标题下方的发布单位、日期、报告人姓名这些信息会在词频统计时引入噪声比如报告人名字里含绿字就会干扰绿色的计数。清洗时最好把标题信息单独存储只对正文进行词频统计。文本清洗的最小标准有三个统一编码为UTF-8、去除全角空格和多余空白、按段落标记保留结构。建议清洗后的文本按省份_年份.txt命名归档原始PDF不要动随时可以回溯校验。2.3 中文分词工具怎么选政府工作报告属于典型的公文语体用词规范、句法工整分词难度其实低于社交媒体文本。常用方案是第一阵营的jieba第二阵营的HanLP、LTP、THULAC。我的建议是主流数据处理用jieba就够原因就一条它的词性和词典可以精确控制而且在绿色环保生态这类双字词上很少出错。但jieba默认词典会把可持续过早切分成可持续和续的概率不高真正需要注意的是一些地名。比如张家口如果被切成张家口口单独出现频率高不影响绿色环保统计但如果把依依冉冉之类的词错切进统计范围就会污染频率排序。解决办法不是调词典而是在统计时只统计关键词表命中的词不让分词器输出全部词频这样大部分噪声都被挡在外面。2.4 清洗后的关键校验我整理过几百份报告后总结出一个经验批量处理完必须先做两个校验一个是随机抽查10份文本人工对照原文看段落是否完整另一个是把每年、每省的报告字数拉成表字数异常偏少比如某省某年只有2000字或异常偏多比如超过3万字的文件要单独排查往往意味着提取失败或混入了多份文档。报告正文字数本身也是后面算相对词频的重要分母这个字段必须可靠。3. 绿色环保关键词表这套数据的灵魂词频统计里最关键、也最容易引起争议的部分就是关键词表怎么定。不同的词典直接决定统计结果也是论文审稿人最爱挑刺的地方。3.1 关键词表的构建逻辑既要覆盖又要可控绿色环保发展词频这个说法可以拆成三个层次。第一层是环境治理的直接词汇比如污染、排放、治理、生态、环保、环境这些词从2002年就有稳定出现是整个序列的基线。第二层是绿色经济转型相关词汇比如绿色、低碳、节能、循环、可持续、新能源、减排这类词在2010年以后增长明显。第三层是顶层概念性词汇比如绿色发展、生态文明、碳达峰、碳中和、绿水青山这些词呈现出明显的政策节点特征。词表构建的常见错误是贪多。见过有人把几百个词全部放进统计范围结果安全质量节约等词与绿色环保并不对应反而被一并计入导致词频失去解释力。我的做法是锚定一批核心词配合政策文件里的高频词扩展坚持宁缺毋滥的原则。每加一个词都问一句如果这个词单独出现在报告里能不能确定和经济环境治理有关。3.2 一套可复用的分层词表按照使用场景我把关键词表分成几个模块。环境治理词是基础层环境、环保、生态、污染、排放、治理、治污、减排、节能、绿色、低碳、循环、可持续、节能环保、污染防治、生态保护、环境保护、综合治理。绿色转型词是结构层新能源、清洁能源、绿色产业、绿色制造、绿色建筑、绿色金融、循环经济、低碳发展、绿色发展、可持续发展、绿水青山、生态文明、美丽中国、碳达峰、碳中和、碳减排。附加词是可选项根据研究目标决定是否加入空气质量、PM2.5、污水、垃圾处理、水土流失、植树造林、水土保持、资源节约、集约利用、节能降碳。需要说明的是词表一旦确定就不要再改动否则跨年度的频率比较就失去口径。如果要更新词表正确做法是同时用新旧词表跑一遍2002—2025年全样本保证两个时间序列之间可比而不是只给新年份加词。3.3 组合词和单字词的处理统计时要注意词表里既有绿色这样的双字词也有绿色发展这样的四字词它们在文本中是包含关系。如果按直接计数绿色发展出现10次同时绿色也被数进去两条词频就产生了重叠。我的做法是优先统计组合词再统计单字词时采用去重叠逻辑也就是只计算绿色未被更长关键词覆盖的出现次数。这个细节决定了绿色和绿色发展的词频加起来不会虚高计算方式要在数据说明里明确交代也算是评判数据质量的一个指标。4. 统计口径与面板参数为什么有时年份词频对不上词频数据制作过程中最容易被质疑的就是统计口径。同一份报告绿色环保词频不同人做出来数字不一样往往不是统计错了而是口径不同。4.1 绝对词频和相对词频要分清楚绝对词频就是关键词在文本中出现的次数最简单也最直观。但它有一个硬伤不同年份报告的总篇幅差异很大早期有些省份的报告只有六七千字而近年很多报告超过两万字关键词语境多了出现次数自然变多这会带来与篇幅相关的虚增。更好的指标是相对词频用关键词出现次数除以报告总字数再乘以10000换算成每万字出现次数。这样不同篇幅的报告之间才有可比性。我的数据设计里同时保留绝对词频、相对词频两个字段使用者可以按需选择。另外可以构造一个绿色环保词频占比也就是该年报告绿色环保关键词的总次数除以报告段落数或标题层级数。这个指标适合测量政策议题在报告议题结构中所占的分量但从做过的测试来看稳定性不如相对词频建议作为辅助变量使用。4.2 面板数据的核心字段和结构一套完整数据最终应该输出成面板结构。省级面板的基本字段是省份、年份、报告总字数、绿色词频、环保词频、生态词频、低碳词频、碳达峰碳中和词频、绿色环保总词频、相对词频等。地级市面板则在前面基础上增加所属省份、城市所在地区东部、中部、西部、东北两个字段方便做区域分组。时间跨度从2002年到2025年有个需要特别注意的问题政府工作报告是对上一年工作的总结和新一年工作的部署历年报告的发布年度和内容指向年度是错位的。绝大多数研究用的是报告发布年份也就是哪一年发布的报告算哪一年的数据这一点必须在数据说明里写清楚否则和别人做合并时很容易出现一年错位。4.3 缺失年份的处理技巧有些地级市早年报告始终找不到这在面板数据里会形成非平衡面板。直接删除缺失值会损失信息我的建议是先从临近年份的报告中提取均值做粗略插补在数据中标注插补来源让使用者决定是否使用。更稳妥的做法是保留缺失值不强行填数因为很多计量方法本身就能处理非平衡面板。如果插补后发现分析结论显著变化那说明原始数据缺失本身可能不是随机的需要回到原始来源进一步核实。5. 实操用Python跑一遍省级词频统计理论说再多还是要落到代码。下面是一套我验证过的流程以省级面板为目标从清洗后的txt文件夹开始到输出Excel全程可复现。5.1 环境准备和文件目录建议用Python3.9以上的环境安装pandas、jieba、pdfplumber用于提取以及openpyxl或xlsxwriter用于输出Excel。文本文件统一放在working/raw_text/目录下命名格式为省份_年份.txt比如浙江省_2020.txt这样后续处理可以自动解析省份和年份字段。如果报告原文是Word格式可以用python-docx先转txt再统一进入流程。要注意Word里可能存在批注、修订痕迹、图片内文字这些都不属于正文提取时务必要清除我遇到过某个省份的Word版本报告里嵌了修订批注导致绿色多计了十几次。5.2 用Python完成批量词频统计词频统计核心逻辑在下方代码里有完整展示先读文件再导入关键词表然后用jieba的精确模式分词并计数最后按省份_年份聚合。组合词优先匹配单字词去重叠这样才能保证口径稳定。import os import jieba import pandas as pd from collections import Counter # 关键词表键为词汇类别值为包含该项词汇与派生关键词的列表 KEYWORDS { green: [绿色], env: [环保], eco: [生态], lowcarbon: [低碳], double_carbon: [碳达峰, 碳中和], green_develop: [绿色发展], sustain: [可持续], recycle: [循环经济], pollution: [污染, 污染防治, 治污], energy_save: [节能, 节能降碳, 节能减排], } def count_keywords(text, keywords): 统计一个文本中各关键词出现次数含组合词优先去重逻辑 counter Counter() for cat, words in keywords.items(): for w in words: # 统计前先替换掉组合词在文本中的出现位置用特殊标记遮蔽 masked text # 先统计组合匹配词 for compound in sorted(words, keylen, reverseTrue): cnt masked.count(compound) if cnt 0: counter[compound] cnt masked masked.replace(compound, ||masked||) # 单词匹配已遮蔽组合词后的文本再数 if w not in counter: cnt masked.count(w) if cnt 0: counter[w] cnt # 分类汇总 return counter def process_all_files(data_dir): rows [] for fname in os.listdir(data_dir): if not fname.endswith(.txt): continue province fname.split(_)[0] year fname.split(_)[1].replace(.txt, ) with open(os.path.join(data_dir, fname), encodingutf-8) as f: text f.read() total_chars len(text) counter count_keywords(text, KEYWORDS) row {省份: province, 年份: int(year), 报告字数: total_chars} for cat, words in KEYWORDS.items(): row[cat _词频] sum(counter.get(w, 0) for w in words) row[cat _相对词频] round( row[cat _词频] / total_chars * 10000, 4 ) row[绿色环保总词频] sum( row[k _词频] for k in [green, env, eco, lowcarbon, pollution] ) rows.append(row) return pd.DataFrame(rows) if __name__ __main__: df process_all_files(working/raw_text) df.sort_values([省份, 年份], inplaceTrue) df.to_excel(working/green_freq_panel.xlsx, indexFalse)运行时要留意文件的编码建议进入流程前统一转换遇到异常字符不要用errorsignore静默跳过而是记录到日志文件中便于回溯。出来的Excel可以先按省份、年份排序再抽查几个文件核对统计次数。5.3 完整流程的统计结果校验每次跑完都要做一致性抽检。我的标准是抽3个省级报告和5个地级市报告人工用文本编辑器的查找功能数一下绿色和环保的出现次数和程序结果对比误差控制在2%以内。如果误差偏大优先检查是不是组合词遮蔽逻辑写错或者文本里出现了全角半角混用导致匹配失败。另一个校验方式是统计每年全国词频总数然后画一条时间趋势线。正常的绿色环保词频曲线不会忽高忽低应该在2005年左右出现一个温和爬升、2012—2017年明显抬升、2021年以后继续抬升的形态如果曲线在某一年突然暴跌大概率是当年采集文本不完整或编码问题而不是政策真的转向了。6. 常见问题与排查技巧实录这个环节值得单独聊聊因为文本数据处理中很多坑是文档里不会写清楚的每个坑我都实际踩过也给出了对应的解决办法。6.1 早年扫描件导致绿色变成缘色2005年前后的省级报告很多是扫描图片版OCR识别时绿字容易被错识成缘碳字可能错成炭。遇到这种问题如果只跑一遍统计会漏掉一批关键词。我的办法是准备两个版本的报告正文一个是OCR直接识别的结果一个是人工纠正过的关键段落统计时以人工纠正版为准。如果整个文本OCR质量太差宁可放弃这个年份也不要硬统计错误数据进面板比缺失数据危害更大。很多早期公文里会使用异体字或旧字形这和现代OCR标准字库不兼容。我把2002—2010年的报告单独跑一次字频找出文本中高频出现的生僻字或可疑形近字建立了一份替换表批量替换后词频统计的准确性提升非常明显。6.2 分词误判和关键词覆盖范围问题减排在早期报告中经常以化学需氧量减排二氧化硫减排的形式出现分词器有时会把它切成化学需氧量减排等长词的一部分导致独立统计时漏计。解决方案很简单在分词前先对报告做一次关键词预替换把化学需氧量减排这类固定搭配用特殊占位符替换掉然后再统计减排这样就不会漏。还有绿色这个词在早期报告里会出现在绿色护照绿色食品中后者虽然和生态相关但具体指农林产品认证严格说环境保护含义有限。是否把这部分计入取决于研究目的。我在数据说明里会给出宽口径和窄口径两个版本的选择建议狭义口径下仅统计与生态环境语境直接相关的出现需要人工根据上下文判断在大规模统计中是很难完全做到的实际操作上更多靠扩展词表来逼近。6.3 跨年份口径变化问题政府工作报告的章节结构在2002到2025年间发生了明显变化。早期报告里环保内容往往归在精神文明建设或社会发展部分之后逐步独立成生态文明建设绿色发展章节。这意味着即便报告总字数不变绿色环保词汇的密度也会因为章节重排而出现结构性上升这属于真实政策变化不算统计错误。但有一种情况必须处理有些省份隔几年会重新定义报告排版把环保工作从主报告移入书面附件主报告绿色词频自然下降。如果直接拿主报告统计会出现假性的词频回落。遇到这种情况数据说明里要单独标注该省份该年发生了文本口径调整建议后续分析时使用连续性较好的相邻年份差值来检验结论是否稳健。6.4 地级市和省级数据合并时容易踩的坑地级市政府工作报告的篇幅一般比省级短词频基数小波动更剧烈。对比分析时容易出现省级词频在上升、地级市中位数却下降的错位现象。这不是数据错了而是文本篇幅结构在起作用。地级市报告倾向于用概括性表述省级报告则更系统分析时应该把政府行政层级作为控制变量放进模型或者先把省级和地级市数据分别标准化再进行比较。还有一个行政单位调整的问题比如部分县改区、市辖区合并地级市单位名称和范围会在二十多年里发生变化。数据里必须保留当年的行政区划编码和城市名称分析时用现行政区划口径去匹配历史词频还是用历史口径保持一致性这个选择会显著影响面板数据的合并结果建议在数据文档里明确说明匹配依据。7. 顺着这套数据还能怎么延伸最后分享一点个人体会。词频数据本身是死的但配合其他数据它能支撑出很多有意义的分析。比如把省级绿色环保词频和工业增加值、能源消费量、污染排放数据放在一张表格里就能看到不同经济增长阶段的环保话语变化节奏再比如把地级市词频用颜色映射在地图上可以看到绿色环保政策关注度的空间分布东部沿海和沿江省份往往比西部省份起跑更早。另一个有意思的方向是词共现网络。把报告年份分成几个阶段分别统计绿色环保低碳和转型产业创新等词的共现情况能够看出政策话语的重心是如何从末端治理转向源头转型的。这个玩法不需要额外数据只需要把词频统计阶段的共现矩阵保存下来。做这套数据最大的心得是统计词频不是追求代码多复杂而是要在每一个环节都追问这个选择会不会扭曲真实情况。词典口径、文本来源、清洗规则、去重叠逻辑每一个决定都会影响最终面板数据的质量。建议所有用户拿到数据后先用自己的流程抽检几个年份再往下走任何数据都不该直接信任这个习惯能帮你省下后面很多返工的力气。
返回列表