OpenFlow:一个舆情分析工具的诞生
项目缘起 最近一直在思考一个问题:网上吵翻天的时候,大家观点五花八门,但很多人只看到了"说什么",没想清楚"为什么这么说"。 同样一件事,知乎、微博、贴吧、小红书的用户看法可能完全不同。为什么? 立场不同 - 涉及的利益不一样 信息茧房 - 看到的片面信息不同 情绪放大 - 愤怒的声音更容易传播 于是我想做一个工具,帮助穿透表象,从纷繁复杂的观点背后,洞察各方真实的利益诉求。 这就是 OpenFlow 的由来。 核心思路 “看热闹,更要看门道” OpenFlow 做两件事: 收集主流观点 - 从多个平台把热门看法抓过来,按支持度排序 看透利益格局 - 分析这些观点背后,各方到底在争什么、怕什么、想要什么 技术架构 数据采集层 最大的挑战是各平台的反爬机制。直接 HTTP 请求基本都会被封。 解决方案:Playwright 浏览器模拟 # 启动真实浏览器,模拟用户行为 browser = await playwright.chromium.launch( headless=False, args=['--disable-blink-features=AutomationControlled'] ) # 注入脚本隐藏自动化特征 await page.add_init_script(""" Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); """) 目前支持:知乎、微博、贴吧、小红书、百度搜索 观点分析层 不是简单按时间排序,而是: 向量化 - 用 sentence-transformers 将文本转为向量 聚类 - 用 DBSCAN 将相似观点聚类 总结 - 每类观点提取关键词生成概括 排序 - 按互动量(点赞+评论×2+转发×3)计算支持度 # 观点聚类 embeddings = model.encode(texts) clustering = DBSCAN(eps=0.4, min_samples=2, metric='cosine') labels = clustering.fit_predict(embeddings) # 生成总结 summary = generate_summary(cluster_texts) support_rate = calculate_support_rate(cluster_contents) 深度分析层 用 AI 进行深度分析,但关键是提示词设计。 ...