当前位置:首页>python>一篇政策文件怎么快速拆解?用 Python 完成关键词提取、语义聚类与大模型分类

一篇政策文件怎么快速拆解?用 Python 完成关键词提取、语义聚类与大模型分类

  • 2026-10-11 07:03:23
一篇政策文件怎么快速拆解?用 Python 完成关键词提取、语义聚类与大模型分类

一、案例简介

政策文本整理是一项典型的高重复性工作。面对几十篇政策文件,研究者不仅需要从长文本中提取“支持产业”“政策工具”“技术方向”等核心信息,还要判断“机器人”“工业机器人”“智能机器人”等近义表达是否属于同一类别。

人工处理容易出现三个问题:

  1. 1. 政策文件篇幅较长,核心信息分散;
  2. 2. 近义词和相似表述较多,分类口径难以统一;
  3. 3. 文件数量增加后,整理效率和结果一致性明显下降。

针对这一场景,代码构建了一套三阶段政策文本分析流程:

政策原文   ↓关键词提取   ↓语义聚类   ↓大模型结构化分类   ↓政策工具、支持产业、技术方向

原始数据为批量 .txt 政策文件,主入口为 run_pipeline.py。运行后,程序会依次完成:

  • • 利用 TF-IDF 和 TextRank 提取高价值关键词;
  • • 使用文本向量模型合并语义相近的关键词;
  • • 调用大模型识别政策工具、支持产业和技术瓶颈;
  • • 将每一步结果分别保存,便于检查和调整。

主要输出目录如下:

output/├── step1_keybert/      # 关键词提取结果├── step2_semantic/     # 语义聚类结果└── step3_llm/          # 大模型分类结果

案例代码获取:

https://ppmandata.net/codeBase/2067495942281498625

二、代码思路

整套流程的核心思路是:

先把政策长文本压缩成关键词,再将关键词压缩成语义簇,最后由大模型完成结构化理解。

1. 文本预处理

程序首先读取政策文件,并完成基础清洗,包括:

  • • 删除多余空格和特殊符号;
  • • 过滤停用词;
  • • 剔除长度过短或信息量较低的词;
  • • 保留名词、动名词等高信息量词语。

这一步可以减少“进一步”“有关部门”“积极推进”等政策套话对分析结果的干扰。

2. 关键词提取

关键词提取同时使用 TF-IDF 和 TextRank。

  • • TF-IDF 衡量词语在当前政策文件中的重要程度;
  • • TextRank 根据词语之间的共现关系识别核心词;
  • • 两种算法的分数加权合并,形成最终关键词排序。

相较于只使用一种算法,双算法融合能够兼顾词频差异和文本结构信息。

3. 语义聚类

关键词提取完成后,程序使用预训练语言模型生成文本向量,并计算关键词之间的余弦相似度。

当两个关键词的相似度超过设定阈值时,程序会将其划入同一个语义簇。例如:

工业机器人、智能机器人、机器人装备→ 机器人产业技术改造、设备更新、智能化改造→ 技术升级

语义聚类可以减少重复类别,统一不同政策文件中的表达口径。

4. 大模型分类

最后,程序将聚类后的关键词及相关原文片段发送给大模型,要求模型按照统一框架输出 JSON 结果。

主要分类维度包括:

  1. 1. 政策调节工具;
  2. 2. 支持产业重点;
  3. 3. 技术瓶颈与攻关方向。

通过限制输出格式和降低模型温度,可以提高批量分析结果的一致性。

三、核心代码

1. 双算法提取关键词

tfidf_results = jieba.analyse.extract_tags(    text,    topK=top_n * 2,    withWeight=True,    allowPOS=tuple(ALLOWED_POS))textrank_results = jieba.analyse.textrank(    text,    topK=top_n * 2,    withWeight=True,    allowPOS=tuple(ALLOWED_POS))keyword_score_map = {}for word, score in tfidf_results:    if filter_token(word):        keyword_score_map[word] = (            keyword_score_map.get(word, 0) + score * 0.5        )for word, score in textrank_results:    if filter_token(word):        keyword_score_map[word] = (            keyword_score_map.get(word, 0) + score * 0.5        )

程序分别获取 TF-IDF 和 TextRank 结果,再按照相同权重合并分数。最终保留综合得分较高的关键词。

2. 计算语义相似度

embeddings = st_model.encode(    keyword_list,    convert_to_tensor=True)cosine_scores = util.cos_sim(    embeddings,    embeddings)for i in range(len(keyword_list)):    if i in cluster_assignment:        continue    current_cluster = [keyword_list[i]]    cluster_assignment[i] = len(clusters)    for j in range(i + 1, len(keyword_list)):        similarity = cosine_scores[i][j].item()        if (            j not in cluster_assignment            and similarity >= config.SIMILARITY_THRESHOLD        ):            current_cluster.append(keyword_list[j])            cluster_assignment[j] = len(clusters)    clusters.append(current_cluster)

代码先将关键词转换为语义向量,再计算两两之间的余弦相似度。超过阈值的关键词会被归入同一个语义簇。

3. 调用大模型分类

prompt = f"""你是一名公共政策分析专家。请根据政策关键词聚类结果和相关原文片段,按照以下三个维度进行分类:1. 政策调节工具2. 支持产业重点3. 技术瓶颈与攻关方向请严格输出JSON格式,不要添加额外解释。关键词聚类结果:{cluster_results}相关原文片段:{text_fragments}"""response = client.chat.completions.create(    model=config.LLM_MODEL,    messages=[        {            "role": "system",            "content": "You are a specialized JSON-outputting policy analyzer."        },        {            "role": "user",            "content": prompt        }    ],    temperature=0.1)

模型输入并非完整政策文件,而是经过筛选的关键词、语义簇和相关原文片段。这样既能减少无效信息,也能降低调用成本。

4. 批量执行完整流程

def main():    target_files = (        all_files[:config.DEMO_LIMIT]        if config.DEMO_MODE        else all_files    )    run_step1(target_files)    run_step2(target_files)    run_step3(target_files)if __name__ == "__main__":    main()

总入口将三个步骤依次串联。更换政策文件或调整参数后,只需要重新运行入口脚本即可完成全部分析。

四、结果展示

1. 关键词提取结果

以智能制造类政策文件为例,第一阶段提取出的主要关键词如下:

排名
关键词
综合得分
1
智能制造
0.886
2
工业机器人
0.842
3
技术改造
0.798
4
专项资金
0.753
5
核心零部件
0.721
6
产业链
0.684
7
示范应用
0.647
8
研发创新
0.619

[图片]

2. 语义聚类结果

第二阶段将表达相近的关键词自动合并:

代表类别
聚类包含词
机器人产业
工业机器人、智能机器人、机器人装备
技术升级
技术改造、设备更新、智能化改造
财政支持
专项资金、财政补贴、资金奖励
创新研发
技术研发、研发创新、联合攻关
示范推广
示范应用、试点建设、推广应用

经过语义聚类后,零散关键词被整理为更加统一的政策概念。

3. 大模型分类结果

最终输出可以整理为以下结构:

分类维度
识别结果
政策调节工具
财政补贴、专项资金、税收优惠、示范项目
支持产业重点
工业机器人、智能制造、核心零部件、工业软件
技术攻关方向
高精度控制器、伺服系统、智能传感器、操作系统
主要实施方式
企业申报、项目评审、资金奖励、试点推广
重点支持主体
制造企业、科研院所、专精特新企业、产业联盟

对应的 JSON 输出形式如下:

{  "政策调节工具": [    "财政补贴",    "专项资金",    "税收优惠",    "示范项目"  ],  "支持产业重点": [    "工业机器人",    "智能制造",    "核心零部件",    "工业软件"  ],  "技术瓶颈与攻关方向": [    "高精度控制器",    "伺服系统",    "智能传感器",    "工业操作系统"  ]}

通过这套流程,原本需要逐篇阅读和手工归类的政策文件,可以被初步转换为统一、可比较的结构化数据。后续还可以继续开展政策工具统计、产业支持方向比较、地区政策差异分析以及年度政策演变研究。

代码链接:

https://ppmandata.net/codeBase/2067495942281498625

C0168

转发本推文到朋友圈

添加客服

发送保留2小时并集齐10个点赞的截图

即可免费领取代码

点击阅读原文,直达代码链接

最新文章

随机文章