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

NLP助力非结构化文本抽取:实体关系提取实战

爬虫代理

一、关键数据分析:微博热帖背后的隐含网络

微博每天产生数百万条内容,这些内容天然包含了大量非结构化文本信息,包括人物、品牌、事件、观点等实体以及它们之间的复杂关系。为了实现“自动识别+归类分析”,我们采用如下实体-关系抽取流程:

🧩 目标数据结构化示例:

发帖用户内容摘要评论情感实体1关系实体2
用户A小米汽车上市首日大涨正面小米发布汽车
用户B华为和荣耀又要打擂台?中性华为对比荣耀

我们从微博热搜中抽取:

  • 原始发帖文本
  • 评论区信息
  • 实体关系三元组(如“华为-竞争-荣耀”)
  • 情感倾向(正面/负面/中性)

二、核心技术路线图谱

🧠 本项目技术模块如下图所示:

┌────────────┐
│ 爬虫代理模块 │────┐
└────────────┘    │▼┌────────────┐│ 请求配置模块 │(含cookie/user-agent)└────────────┘│▼┌────────────┐│ 微博页面采集 │(热搜 + 评论)└────────────┘│▼┌─────────────────┐│ 中文NLP抽取模块   │(实体识别+关系抽取+情感分析)└─────────────────┘│▼┌─────────────────┐│ 数据结构化&可视化 │(保存至CSV/图谱生成)└─────────────────┘

三、完整代码演变:从采集到结构化抽取

以下为主要实现代码,已集成爬虫代理设置、实体识别与关系抽取,适合初学者调试和项目集成。

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import time
import random
import jieba
import re
import csv
import spacy
from lxml import etree# ========== 1. 代理配置(亿牛云代理 www.16yun.cn)==========
proxy_host = "proxy.16yun.cn" # 代理域名
proxy_port = "3100"        # 代理端口 
proxy_user = "16YUN"          #用户名
proxy_pass = "16IP"           #密码proxies = {"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}","https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}# ========== 2. 请求头设置 ==========
ua = UserAgent()
headers = {"User-Agent": ua.random,"Cookie": "YOUR_WEIBO_COOKIE"  # 登录后的Cookie,提高访问成功率
}# ========== 3. 微博热搜采集 ==========
def get_hot_posts():url = "https://s.weibo.com/top/summary?cate=realtimehot"response = requests.get(url, headers=headers, proxies=proxies)response.encoding = 'utf-8'soup = BeautifulSoup(response.text, "html.parser")links = soup.select("td.td-02 a")titles_links = [(a.text.strip(), "https://s.weibo.com" + a.get("href")) for a in links if a.get("href")]return titles_links[:5]  # 取前5条热点# ========== 4. 实体+关系抽取(简单版)==========
def extract_entities(text):# 简单规则模拟实体对和关系,后续可引入深度学习模型或Spacy中文模型patterns = [(r"(小米|华为|荣耀|苹果|比亚迪).{1,5}(发布|对比|上市|合作|竞争).{1,5}(手机|汽车|品牌|产品)", "三元组")]results = []for pattern, label in patterns:match = re.search(pattern, text)if match:results.append((match.group(1), match.group(2), match.group(3)))return results# ========== 5. 评论情感分析模拟 ==========
def analyze_sentiment(text):if any(word in text for word in ["好", "赞", "厉害", "支持"]):return "正面"elif any(word in text for word in ["差", "垃圾", "不好"]):return "负面"return "中性"# ========== 6. 主流程 ==========
def run():hot_posts = get_hot_posts()results = []for title, link in hot_posts:time.sleep(random.uniform(1, 3))print(f"正在抓取:{title}")resp = requests.get(link, headers=headers, proxies=proxies)if resp.status_code != 200:print("请求失败")continuesoup = BeautifulSoup(resp.text, "html.parser")texts = soup.get_text()entity_relations = extract_entities(texts)sentiment = analyze_sentiment(texts)for e1, rel, e2 in entity_relations:results.append([title, e1, rel, e2, sentiment])# ========== 7. 写入CSV文件 ==========with open("weibo_entity_relations.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(["微博标题", "实体1", "关系", "实体2", "情感"])writer.writerows(results)print("数据采集完成 🎉")if __name__ == "__main__":run()

四、技术演变模式可视化

👣 版本1.0:正则规则抽取

  • 优点:简单快速,无需训练
  • 缺点:容易漏识/误识,缺乏上下文理解能力

👣 版本2.0(可扩展):BERT-BiLSTM-CRF或Prompt式实体关系识别

  • 支持微调中文预训练模型
  • 可用开源库如LTP, HanLP, Spacy-zh, BERT4NER

五、总结

💡 本文用一套「微博热帖 → 文本抽取 → 实体关系 → 情感标注」的完整流程,验证了中文非结构化文本的NLP实战价值。

http://www.xdnf.cn/news/674227.html

相关文章:

  • 【ASR】基于分块非自回归模型的流式端到端语音识别
  • qt之开发大恒usb3.0相机二
  • Pytorch
  • 题目 3341: 蓝桥杯2025年第十六届省赛真题-抽奖
  • 颠覆传统,智领未来——UMI企业智脑:重新定义企业智能化转型的全新可能
  • 不同电脑同一个网络ip地址一样吗?如何更改
  • ODSA架构与操作-1
  • 【Elasticsearch】_update api的增量更新
  • 企业级RAG技术实战指南:从理论到落地的全景解析
  • .NET用C#设置Excel单元格和工作表的背景
  • AI大模型学习三十、ubuntu安装comfyui
  • vue3简介以及创建第一个vue3工程
  • 无人机仿真环境(3维)附项目git链接
  • 仓颉入门:特性
  • Elasticsearch的运维
  • ubuntu20.04安装CUDA、Cudnn
  • 深度学习————注意力机制模块
  • Milvus向量数据库DML操作实战教程
  • android平台驱动开发(四)--系统属性节点控制GPIO
  • 字节跳动BAGEL-7B-MoT模型开源:多模态AI技术的新范式与行业涟漪
  • Python爬虫实战:研究Playwright框架相关技术
  • SD07_NVM的安装及相关操作
  • 解码STREAM:GEO技术方法论全解析
  • 多空短线决策副图指标,通达信炒股软件指标操盘图文教程
  • 安卓学习笔记-声明式UI
  • 2025年5月蓝桥杯stema省赛真题——象棋移动
  • ViewModel
  • MySQL问题:主要索引类型(聚簇、辅助、覆盖、前缀)
  • WPF中的图标闪烁功能
  • ubuntu 制作 ssl 证书