当前位置: 首页 > news >正文

去重新闻数据中重复的正文内容(body 字段),并把唯一的新闻内容保存到一个新的 JSON 文件中

示例代码:

import os
import json
import nltk
from tqdm import tqdm

def wr_dict(filename,dic):
    if not os.path.isfile(filename):
        data = []
        data.append(dic)
        with open(filename, 'w') as f:
            json.dump(data, f)
    else:      
        with open(filename, 'r') as f:
            data = json.load(f)
            data.append(dic)
        with open(filename, 'w') as f:
            json.dump(data, f)
            
def rm_file(file_path):
    if os.path.exists(file_path):
        os.remove(file_path)

with open('datasource/news_filter_token.json', 'r') as file:
    data = json.load(file)
    
save_path = 'datasource/news_filter_dup.json'
count = 0
print(f"Before: {len(data)}")

doc_list = []
for d in tqdm(data):
    if d['body'] not in doc_list:
        doc_list.append(d['body'])
        wr_dict(save_path,d)
        
print(f"After: {len(doc_list)}")

✅ 一、功能概述:

🧠 输入文件:

datasource/news_filter_token.json
👉 里面是一堆字典(新闻项),每条至少有 'body' 字段。

🎯 目标:

从这些新闻中去掉正文内容重复的项,只保留第一次出现的,写入新文件:
datasource/news_filter_dup.json


🧩 二、详细代码解释

import os
import json
import nltk
from tqdm import tqdm

导入常用模块:

  • os 用于文件检查和删除
  • json 用于读取/保存 JSON 数据
  • tqdm 用于加进度条显示

👇 定义保存字典的函数

def wr_dict(filename, dic):
    if not os.path.isfile(filename):  # 文件不存在就创建
        data = []
        data.append(dic)
        with open(filename, 'w') as f:
            json.dump(data, f)
    else:  # 文件已存在,读取追加写入
        with open(filename, 'r') as f:
            data = json.load(f)
            data.append(dic)
        with open(filename, 'w') as f:
            json.dump(data, f)

这个函数用于将一条字典数据(dic)追加保存到 JSON 文件中。


👇 删除已有输出文件,避免重复追加

def rm_file(file_path):
    if os.path.exists(file_path):
        os.remove(file_path)

👇 加载原始数据文件(去重前)

with open('datasource/news_filter_token.json', 'r') as file:
    data = json.load(file)

👇 删除输出路径旧文件(否则会越追加越大)

save_path = 'datasource/news_filter_dup.json'
count = 0
print(f"Before: {len(data)}")
rm_file(save_path)

👇 开始去重逻辑

doc_list = []  # 存储已出现的正文内容
for d in tqdm(data):  # 遍历每条新闻
    if d['body'] not in doc_list:  # 如果正文不重复
        doc_list.append(d['body'])  # 添加到已出现列表
        wr_dict(save_path, d)       # 保存这一条到输出文件

👇 打印处理结果

print(f"After: {len(doc_list)}")  # 实际去重后剩下的数量

🧪 三、示例输入输出格式

✅ 输入:news_filter_token.json

[
  {
    "title": "新闻A",
    "body": "今天发生了一件大事,很多人都关注。",
    "date": "2025-04-10"
  },
  {
    "title": "新闻B",
    "body": "今天发生了一件大事,很多人都关注。",
    "date": "2025-04-11"
  },
  {
    "title": "新闻C",
    "body": "这是一条独特的新闻。",
    "date": "2025-04-11"
  }
]

你会看到虽然 title 不一样,但 body 重复了。


✅ 输出:news_filter_dup.json

[
  {
    "title": "新闻A",
    "body": "今天发生了一件大事,很多人都关注。",
    "date": "2025-04-10"
  },
  {
    "title": "新闻C",
    "body": "这是一条独特的新闻。",
    "date": "2025-04-11"
  }
]

只保留了重复正文的第一条,其余丢弃。


✅ 总结功能表

步骤说明
读入文件news_filter_token.json
条件去掉 body 内容重复的
保存只保留不重复的到 news_filter_dup.json
工具tqdm 显示进度,wr_dict 写入 JSON

如果你需要:
✅ 把这个流程封装成一个命令行工具
✅ 加上可配置参数(比如保留 title+body 一起判断重复)
✅ 或者更快的版本(用 set() 优化)

都可以告诉我,我可以继续帮你扩展!

相关文章:

  • Ubuntu 软件卸载与清理终极指南
  • 在项目中,引入【全局异常处理器】
  • Spring IoC深度解析:掌控Bean存储艺术与分层架构的智慧​​
  • 通过代码获取接口文档工具
  • 智膳优选 | AI赋能的智慧食堂管理专家 —— 基于飞书多维表格和扣子(Coze)的智能解决方案
  • 医院PACS系统源码
  • 初级社会工作者考试精选题库
  • react+Tesseract.js实现前端拍照获取/选择文件等文字识别OCR
  • TPS入门DAY04 服务器篇
  • 文件内容课堂总结
  • 14 nginx 的 dns 缓存的流程
  • 为了避免unboundLocalError和为什么X的值一直不变呢?
  • Gartner发布软件供应链安全市场指南:软件供应链安全工具的8个强制功能、9个通用功能及全球29家供应商
  • 如何查看linux history命令文件
  • 【pm2】pm2启动无法访问接口 ,node命令启动却可以
  • 使用nhdeep档案目录打印工具生成干部人事档案目录打印文件
  • 0501路由-react-仿低代码平台项目
  • [问题帖] vscode 重启远程终端
  • jsoup解析页面保留换行符
  • 计算机视觉色彩空间全解析:RGB、HSV与Lab的实战对比
  • 哪个cms做企业网站好/新闻最新消息10条
  • 温江 网站建设/电子商务营销的概念
  • 做网站在阿里云上面买哪个服务/快速排名优化
  • 夫妻做网站/sem是什么方法
  • 怎么做网站页面代码搜索/域名交易域名出售
  • 做网站用到的单词/seo关键词排名优化工具