【AI大模型学习路线】第二阶段之RAG基础与架构——第十一章(【项目实战】基于RAG的新闻推荐)新闻数据的准备与整理 ?

【AI大模型学习路线】第二阶段之RAG基础与架构——第十一章(【项目实战】基于RAG的新闻推荐)新闻数据的准备与整理 ?

【AI大模型学习路线】第二阶段之RAG基础与架构——第十一章(【项目实战】基于RAG的新闻推荐)新闻数据的准备与整理 ?



欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/147526990


前言

  • 在构建基于 RAG 的新闻推荐系统时,新闻数据的准备与整理贯穿整个流程,其质量直接影响检索召回和生成效果
  • 因此,需要从数据源选择、数据采集、清洗预处理、结构化与标注、切分与存储五个方面做好规划,并结合 Python 工具链实现自动化流水线
  • 以下将详细阐述各环节要点,并附上核心 Python 示例,以帮助快速搭建高效、可扩展的新闻数据处理框架。

1. 数据源选择与采集

首先,需要确定新闻数据的来源,包括开放新闻 API(如 NewsAPI、NYTimes API)、网站爬虫和第三方数据集等

  • 通过 NewsAPI 等接口可以获取带有元数据(标题、摘要、发布时间、来源站点等)的规范化 JSON 格式新闻流,便于后续解析和索引。
  • 对于不提供 API 的网站,可使用 Scrapy、BeautifulSoup 等工具爬取网页,并抽取关键信息字段(正文、标签、作者、地理位置等)。
  • 也可考虑公开数据集,如 Microsoft MIND、Kaggle 上的新闻聚合数据集,既包含大规模样本又有点击行为标注,便于后续用户建模。

2. 数据清洗与预处理

在获得原始新闻文本后,必须对其进行严格的清洗与预处理,以保证后续向量化和检索的准确性。常见步骤包含:

  • 去重与去噪:剔除重复文章、广告和导航文本,保留正文主体。
  • 处理缺失与异常值:对缺失字段(如缺省发布时间)进行填补,或根据规则丢弃严重不完整的条目。
  • 文本标准化:统一字符编码、去除 HTML 标签和多余空白,保留中文或英文核心内容。
  • 分词与停用词过滤:中文可用 Jieba,英文可用 NLTK,对短词、停用词进行过滤,提升语义表达质量。

3. 结构化与标注

为了让检索模块和生成模块更好地利用新闻内容,需要对数据进行结构化存储并添加必要标注

  • 字段提取:将新闻分为标题(title)、正文(content)、摘要(summary)、发布时间(publish_time)、标签(tags)等结构化字段。
  • 分类与主题标注:利用已有分类模型或关键词规则,将新闻归入如“地震”、“疫情”、“经济”等主题类别,支持主题过滤。
  • 质量评分:可引入源站点权威度、内容长度等指标,为后续检索排序提供额外维度。

4. 数据切分与版本管理

在研发和线上部署中,需对数据进行合理切分并做好版本管理

  • 时序切分:将数据按时间窗口拆分为训练集、验证集与测试集,避免未来信息泄露。
  • 增量更新:利用 Apache Airflow 等调度工具,定时拉取新增新闻,增量清洗并追加到向量库。
  • 数据版本控制:通过 DVC 或 Delta Lake 管理数据快照,便于回滚与审计。

5. 存储与检索索引

处理完成后,应将新闻文本和向量化后的 embedding 一并存储,并搭建检索引擎

  • 文本存储:推荐使用 MongoDB、Elasticsearch 存储结构化新闻文档,支持全文检索与元数据过滤。
  • 向量索引:基于 FAISS 或 ChromaDB 构建新闻 embedding 索引,配置合适的向量维度与近邻搜索参数。
  • 元数据同步:确保文本库与向量库同步更新,以免检索到过期或已删除的内容。

6. Python 自动化示例

以下示例展示了新闻数据的收集、清洗、分词、向量化及索引构建的流水线核心步骤

import requests, json
from bs4 import BeautifulSoup
from langchain.embeddings import SentenceTransformerEmbedding
from langchain.vectorstores import FAISS
from jieba import lcut
from sklearn.model_selection import train_test_split

# 1. 新闻 API 采集(示例:NewsAPI)
api_key = "YOUR_NEWSAPI_KEY"
resp = requests.get(
    f"https://newsapi.org/v2/everything?q=earthquake&language=zh&pageSize=100&apiKey={api_key}"
)
articles = resp.json().get("articles", [])

# 2. 数据清洗与结构化
cleaned = []
for art in articles:
    title = art.get("title","").strip()
    content = art.get("content","")
    if not content: continue  # 丢弃无正文条目
    # 去除 HTML
    soup = BeautifulSoup(content, "html.parser")
    text = soup.get_text().replace("\n"," ").strip()
    # 分词 & 停用词过滤(示例词表)
    tokens = [w for w in lcut(text) if len(w)>1]
    cleaned.append({"title": title, "content": text, "tokens": tokens, "time": art["publishedAt"]})

# 3. 时序切分
train, test = train_test_split(cleaned, test_size=0.2, shuffle=False)

# 4. 向量化与索引构建
embedder = SentenceTransformerEmbedding(model_name="all-MiniLM-L6-v2")
docs = [c["content"] for c in train]
vectors = embedder.embed_documents(docs)
faiss_index = FAISS.from_embeddings(vectors, docs)

# 5. 保存索引(磁盘持久化)
faiss_index.save_local("news_faiss_index")

print("新闻数据准备与索引构建完成,共处理文章:", len(docs))

  • 本示例涵盖了从 API 采集、内容清洗、分词处理,到向量化与 FAISS 索引构建的核心流程,可据此扩展为完整的 ETL 作业,并结合调度系统实现全自动化。

通过上述步骤,即可搭建起高质量的新闻数据处理流水线,为基于 RAG 的推荐系统奠定坚实的数据基础,从而提升检索召回及生成质量,实现真正可用、可靠的智能新闻推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

985小水博一枚呀

祝各位老板前程似锦!财源滚滚!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值