新闻网页信息抽取

1. 网页信息抽取

问题定义:对新闻网页(输入为HTML)提取结构化信息,包括标题、发布时间、作者、正文、图片等。
动机:由于网页(大多数为HTML格式)通常带有很多标签、样式、脚本等信息,真正有价值的标题、发布时间、正文等是混杂在网页中间的,如果不做预处理就意味着后续要处理大量无用信息。如果是用于一些大模型、机器学习等算法还会造成干扰。因此需要从网页中提取纯净的、相对结构化的内容。

下图是网页https://www.dailypolitical.com/2025/02/27/walter-public-investments-inc-purchases-3634-shares-of-msci-inc-nysemsci.html 的主要信息:
在这里插入图片描述
通过页面看到发表时间(日期,或日期+时间)为:Feb 27th, 2025。

网页信息抽取主要方法:

  1. 基于规则的方法,根据特定的网页制定抽取规则(正则表达式规则或其他规则)
  2. 基于模板的方法,对新闻网页按照一定的模板进行分类,从而利用模板内各板块的配置进行抽取
  3. 基于视觉的方法,假想人去看网页,通过视觉信息可以快速定位标题、正文、时间等信息
  4. 基于大模型的方法,通过大模型去阅读网页,利用大模型的强大语义理解能力进行识别

2. GDELT事件时间

基于新闻(主要是境外新闻)网页URL可以关联到GDETL事件信息:

GlobalEventID|Day |EventCode|NumMentions|NumSources|NumArticles|AvgTone|Actor1Code|Actor1Name|Actor1CountryCode|Actor2Code|Actor2Name|Actor2CountryCode|ActionGeo_Type|ActionGeo_Type_Fullname|ActionGeo_CountryCode|ActionGeo_Lat|ActionGeo_Long|SOURCEURL |-------------±-------±--------±----------±---------±----------±------±---------±---------±----------------±---------±---------±----------------±-------------±----------------------±--------------------±------------±-------------±----------------------------------------------------------------------------------------------------------------------+
1229119384|20250227|10|10|1|10|1.89099|BUS|COMPANY | | | | | 4| |CA | 49.7833| -118.133|https://www.dailypolitical.com/2025/02/27/walter-public-investments-inc-purchases-3634-shares-of-msci-inc-nysemsci.html|
1229120306|20250227| 50| 10| 1| 10|1.89099|MNCUSA |MSCI INC |USA | | | | 4| |CA | 49.7833| -118.133|https://www.dailypolitical.com/2025/02/27/walter-public-investments-inc-purchases-3634-shares-of-msci-inc-nysemsci.html|

GDELT中事件主要包括事件类型、发生日期(年月日)、主体名称、主体国家等信息。
进一步可通过事件提到(event-mention)表查询事件时间和提到时间:event-time和event-mention-time。

3. 新闻时间抽取

3.1.基于GDELT事件时间

在这里插入图片描述
通过GDELT可以获取两个时间:event_time和mention_time,如上图所示,采用的UTC时间戳
转换一下:UTC(1740643200000) 即 Thu Feb 27 2025 16:00:00 GMT+0800 (China Standard Time)。

3.2.基于网页元数据

对网页进行分析,发现在标签中包含了发表时间:
在这里插入图片描述
可以看到有更为精确的时间:2025-02-27T07:32:48+0000,并且采用了UTC时间格式,非常方便解析。(注意!并不是所有网页都采用UTC格式)
这里采用的meta属性为“article:published_time”,在另外一些网页中属性为“og:datePublished”为了可靠性,我兼容了两个属性,并且不考虑属性的命名空间名。

3.3 几类时间比较

比较一下几种时间:

  1. 页面可视时间,可能不够精细(只到日,没有详细时间),且格式千差万别,容易抽取错误。例如,通过gne或Constor抽取的时间,出现了不少时间为2025-12-2,实际应该是2025-2-12。
  2. GDELT事件时间,不够准确。GDELT事件时间一般只到15分钟的粒度,对于有的网页与发布时间的差异可能达到半个小时。
  3. meta标签时间,这个是最准确的。不过对于早期的不规范的网页,可能没有meta信息。有的网页虽然存在meta标签,但没有新闻发布时间。
  4. LD-json。与meta作用类似,以一种结构化JSON数据提供,方便网页元数据共享,其中发布时间字段为datePublished。但对于很多网页可能没有提供。LD-json示例如下(https://www.telecomasia.net/news/mma/fedor-emelianenko-has-no-plans-to-fight-in-mcgregorundefineds-league/):
<script type="application/ld+json">{"@context": "https:\/\/schema.org","@type": "NewsArticle","description": "Famous Russian mixed martial artist Fedor Emelianenko has no plans to participate in bare-knuckle fights.","mainEntityOfPage": {"@type": "WebPage","@id": "https:\/\/www.telecomasia.net\/news\/mma\/fedor-emelianenko-has-no-plans-to-fight-in-mcgregorundefineds-league\/"},"headline": "Fedor Emelianenko Has No Plans to Fight in McGregor's League","datePublished": "2025-02-17T10:53:31+03:00","dateModified": "2025-02-17T10:55:41+03:00","image": "https:\/\/www.telecomasia.net\/upload\/iblock\/1aa\/1aa24aa8e228aec85967fb45c607e666.jpg","author": {"@type": "Person","name": "Marina Magomedova","url": "https:\/\/www.telecomasia.net\/authors\/marina-magomedova\/"},"publisher": {"@type": "Organization","name": "Telecom Asia Sport","url": "https:\/\/www.telecomasia.net","logo": {"@type": "ImageObject","url": "https:\/\/www.telecomasia.net\/local\/templates\/main\/img\/logo-shema-ta.png","width": "1300","height": "300"}}
}</script>

3.4 时间统计

选取几百个新闻网页HTML进行抽取实验,结果如下:
在这里插入图片描述
从中可以得出几点结论:

  • 仅通过meta标签或ld-json抽取时间,会出现大量抽取失败
  • meta标签和ld-json可能同时包含时间,可能一个有另一个没有,也可能都没有
  • gne组件的时间抽取基于meta标签和正文内容正则提取,但没有考虑ld-json。下一步需要调研一下其他新闻信息抽取组件(如newspaper3k)。

3.5 综合策略

综合上面几种情况,可以按照这个优先级顺序获取新闻发布时间:

  1. 首先查看meta时间。建议基于gne等组件,其内置了多个可能关于新闻发布时间的meta标签。下图中是gne采用的时间抽取xpath规则:
PUBLISH_TIME_META = [  # 部分特别规范的新闻网站,可以直接从 HTML 的 meta 数据中获得发布时间'//meta[starts-with(@property, "rnews:datePublished")]/@content','//meta[starts-with(@property, "article:published_time")]/@content','//meta[starts-with(@property, "og:published_time")]/@content','//meta[starts-with(@property, "og:release_date")]/@content','//meta[starts-with(@itemprop, "datePublished")]/@content','//meta[starts-with(@itemprop, "dateUpdate")]/@content','//meta[starts-with(@name, "OriginalPublicationDate")]/@content','//meta[starts-with(@name, "article_date_original")]/@content','//meta[starts-with(@name, "og:time")]/@content','//meta[starts-with(@name, "apub:time")]/@content','//meta[starts-with(@name, "publication_date")]/@content','//meta[starts-with(@name, "sailthru.date")]/@content','//meta[starts-with(@name, "PublishDate")]/@content','//meta[starts-with(@name, "publishdate")]/@content','//meta[starts-with(@name, "PubDate")]/@content','//meta[starts-with(@name, "pubtime")]/@content','//meta[starts-with(@name, "_pubtime")]/@content','//meta[starts-with(@name, "weibo: article:create_at")]/@content','//meta[starts-with(@pubdate, "pubdate")]/@content',
]
  1. 看是否有LD-json时间。gne组件目前未考虑LD-json元数据。因为需要按照JSON进行数据解析,相比meta增加了解析JSON和查找JSON中特定字段的时间。
  2. 基于一组可能的网页标签。通过xpathcss匹配可能为新闻发布时间的标签,提取其文本内容。虽然标签查找很高效,但存在未命中或抽取内容非时间的可能,后者可进一步结合规则进行判断。
  3. 基于新闻文本。对网页新闻文章区域的文本进行时间识别。如果确定文章区域比较困难,则可使用网页body作为候选。gne通过xpath//*[@class="article__content"]确定文章区域,通过一组日期时间的正则表达式抽取发布时间,规则如下图所示。不过可以看出,有一些典型英语国家表达的时间格式是不支持的,例如3rd March 2025, 22:18 GMT+11,需要进一步补充规则。另外,文本中出现的时间可能不一定是新闻发布时间,而是某个事件发生的语义时间,这种情况可能需要对时间时间所在上下文进行判断。
DATETIME_PATTERN = ["(\d{4}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[0-1]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{4}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[2][0-3]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{4}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[0-1]?[0-9]:[0-5]?[0-9])","(\d{4}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[2][0-3]:[0-5]?[0-9])","(\d{4}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[1-24]\d时[0-60]\d分)([1-24]\d时)","(\d{2}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[0-1]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{2}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[2][0-3]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{2}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[0-1]?[0-9]:[0-5]?[0-9])","(\d{2}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[2][0-3]:[0-5]?[0-9])","(\d{2}[-|/|.]\d{1,2}[-|/|.]\d{1,2}\s*?[1-24]\d时[0-60]\d分)([1-24]\d时)","(\d{4}年\d{1,2}月\d{1,2}日\s*?[0-1]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{4}年\d{1,2}月\d{1,2}日\s*?[2][0-3]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{4}年\d{1,2}月\d{1,2}日\s*?[0-1]?[0-9]:[0-5]?[0-9])","(\d{4}年\d{1,2}月\d{1,2}日\s*?[2][0-3]:[0-5]?[0-9])","(\d{4}年\d{1,2}月\d{1,2}日\s*?[1-24]\d时[0-60]\d分)([1-24]\d时)","(\d{2}年\d{1,2}月\d{1,2}日\s*?[0-1]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{2}年\d{1,2}月\d{1,2}日\s*?[2][0-3]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{2}年\d{1,2}月\d{1,2}日\s*?[0-1]?[0-9]:[0-5]?[0-9])","(\d{2}年\d{1,2}月\d{1,2}日\s*?[2][0-3]:[0-5]?[0-9])","(\d{2}年\d{1,2}月\d{1,2}日\s*?[1-24]\d时[0-60]\d分)([1-24]\d时)","(\d{1,2}月\d{1,2}日\s*?[0-1]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{1,2}月\d{1,2}日\s*?[2][0-3]:[0-5]?[0-9]:[0-5]?[0-9])","(\d{1,2}月\d{1,2}日\s*?[0-1]?[0-9]:[0-5]?[0-9])","(\d{1,2}月\d{1,2}日\s*?[2][0-3]:[0-5]?[0-9])","(\d{1,2}月\d{1,2}日\s*?[1-24]\d时[0-60]\d分)([1-24]\d时)","(\d{4}[-|/|.]\d{1,2}[-|/|.]\d{1,2})","(\d{2}[-|/|.]\d{1,2}[-|/|.]\d{1,2})","(\d{4}年\d{1,2}月\d{1,2}日)","(\d{2}年\d{1,2}月\d{1,2}日)","(\d{1,2}月\d{1,2}日)"
]

对于上述从文本内容中抽取的新闻发布时间,要跟事件时间当前时间进行对比,避免或过滤出现的明显无效结果。如果可以牺牲一定程度的准确度,则可直接使用事件时间,不过需要注意新闻发布时间应该早于GDELT时间时间。

4. 结论

通过本文实验,对新闻类网页的信息抽取,重点是发布时间抽取进行了实验。目前大多数较为规范的网页会通过提供meta标签或application/ld+json类型的script提供网页元数据,其中可能会包含较为精确的发布时间,以及其他信息,比如文章作者、文章关键词、主要图片等。但是对于HTML的元数据并不是一个强制性规范,存在数据确实或数据结构不规范、不统一的问题,因此仍然需要通过规则辅助进行信息抽取。

当前大模型技术由于具备较强的文本理解能力,因此也可以用于辅助网页信息抽取。不过由于大模型运行成本较高,需要进行合理选择权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Attention又升级!Moonshot | 提出MoE注意力架构:MoBA,提升LLM长文本推理效率

源自: AINLPer&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-13 更多&#xff1a;>>>>大模型/AIGC、学术前沿的知识分享&#xff01; 引言 对于大模型来说&#xff0c;有效扩展上下文长度对于实现通用…

人工智能与我何干

思考一下&#xff0c; 如果打破这样的磁场&#xff0c;当我焦虑的时候&#xff0c;总是想要看一些负面的内容&#xff0c;这是错误的&#xff0c;不应该这样做&#xff0c;要坚定自己的信念&#xff0c;我为什么和人工智能去争抢呢&#xff0c;不能和人工智能争抢&#xff0c;这…

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…

智能三防手持终端破解传统仓储效率困局

在数字化浪潮的推动下&#xff0c;传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理&#xff0c;上海岳冉三防智能手持终端机以RFID技术为核心&#xff0c;结合工业级三防&#xff08;防水、防摔、防尘&#xff09;设计&#xff0…

13. Pandas :使用 to_excel 方法写入 Excel文件

一 to_excel 方法的相关参数 用它来指定要将 DataFrame 写入哪些工作表的哪些单元格&#xff0c;以及是否需要包含列标题和 DataFrame 索引。如何处理特殊值&#xff08;如 np.nan 和 np.inf&#xff09;。 1.指定工作表和单元格 sheet_name&#xff1a;指定将 DataFrame 写入的…

星越L_发动机舱开启及油液加注讲解

目录 1.拉手 2打开前机盖 3.冷却液加注口 4.玻璃水加注口 5.机油加注口 6.刹车油加注口 7.电瓶 1.拉手 中控台左下方有个拉手,拉动两次前机盖解锁。 2打开前机盖 向上抬打开前机盖。 3.冷却液加注口

基于Flink SQL的实时指标多维分析模型

数据流程介绍 1.创建源表kafka接入消息队列数据&#xff0c;定义字段映射规则&#xff1b; 2.创建目标表es_sink配置Elasticsearch输出&#xff1b; 3.通过多级视图&#xff08;tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby&#xff09;实现数据清洗、去重、状态计算&#x…

专题|Python贝叶斯金融数据应用实例合集:随机波动率SV模型、逻辑回归、参数更新、绩效比较BEST分析亚马逊股票、普尔指数...

原文链接&#xff1a;https://tecdat.cn/?p41020 本专题合集系统梳理了贝叶斯方法在金融数据分析与分类建模中的前沿应用。合集聚焦于PyMC3概率编程框架&#xff0c;深度探讨了共轭先验参数更新、贝叶斯逻辑回归、贝叶斯夏普比率等核心算法在实际场景中的落地实践&#xff08;…

qwen2.5-vl使用vllm部署gradio页面调用

想在服务器上用vllm部署qwen2.5-vl, 然后使用gradio页面在本地调试&#xff0c;官方代码给了两条命令&#xff0c;列出的request body体结构&#xff0c; 不过要与gradio连用&#xff0c; 还需要重新组织代码。 官方服务代码如下&#xff1a; vllm serve Qwen/Qwen2.5-VL-7B-I…

论文笔记 - ULTRA-SPARSE MEMORY NETWORK

1、目前Transformer模型现状 dense模型相同激活参数下&#xff0c;性能远低于MOE模型&#xff0c;因此大家倾向于训练MOE模型虽然同激活参数下&#xff0c;MOE性能比dense好&#xff0c;但MOE模型内存访问高&#xff0c;因此推理速度相比dense要慢不少。比如top2的moe&#xf…

人工智能基础知识笔记四:聚类分析

1、什么是聚类分析&#xff1f; 聚类分析是一种将数据分组的技术&#xff0c;目的是让同一组内的数据点彼此相似&#xff0c;而不同组之间的数据点差异较大。你可以把它想象成整理一堆杂乱无章的物品&#xff0c;把相似的物品放在一起&#xff0c;比如把书放在一个书架&#x…

DeepSeek结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)转载

思维速览&#xff1a; 本文将详细介绍如何利用DeepSeek结合Mermaid语法绘制各类专业图表&#xff0c;帮助你提高工作效率和文档质量。 ▍DeepSeek入门使用请看&#xff1a;deepseek保姆级入门教程&#xff08;网页端使用 本地客户端部署 使用技巧&#xff09; DeepSeek官网…

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题&#xff0c;为保障系统安全&#xff0c;需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4&#xff0c;以规避潜在风险&#xff0c;提升系统整体的安全性和稳定性。 1.1 本…

关于我和快速幂的事()

我之前只会这样的(dfs&#xff09;&#xff1a; 不懂下面这种写法的具体逻辑&#xff1a; 看完下面的推理&#xff0c;再转转我聪明的小老戴&#xff1a; 法一中&#xff1a;把2^11看成(2^5)^2 法二中&#xff1a;把2^11看成(2^2)^5

CSS3-流星雨

1. 绘制标签 <div class"container"><span></span> </div>2. 设置div背景 在百度上搜索一幅星空的图片 <style>* {/* 初始化 */margin: 0;padding: 0;}body {/* 高度100% */height: 100vh;/* 溢出隐藏 */overflow: hidden;}.contai…

P3390 【模板】矩阵快速幂

把 f&#xff08;ll k&#xff09; 写成 f&#xff08;int k&#xff09; 结果又是tle又是wa的。找了半天错误。 &#xff08;为了节省一点时间&#xff0c;因为函数不能return数组&#xff0c;还把数组改写到结构体里&#xff09; 我在想考试怎么办&#xff0c;考试不能看过…

STM32F407 cubeIDE Bootloader APP 如何写

一、bootloader 代码如下&#xff1a; #define FLASH_JUMP_ADDR (0x0800c000) /* USER CODE END PD *//* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ----------…

[Space Shooter_1] Environment | CMake | SDL

环境&#xff1a; CCMakeSDLVS code图形化界面参考&#xff1a;itch.io csp vscode 控制面板 C代码生成流程 查找路径&#xff0c;来进行 cmake 链接 跨平台 cmake 一个库 如果已经有 cmake 来实现跨平台&#xff0c;链接 也可以不用这么麻烦了 set(CMAKE_RUNTIME_OUTPUT_DI…

PyTorch 入门学习

目录 PyTorch 定义 核心作用 应用场景 Pytorch 基本语法 1. 张量的创建 2. 张量的类型转换 3. 张量数值计算 4. 张量运算函数 5. 张量索引操作 6. 张量形状操作 7. 张量拼接操作 8. 自动微分模块 9. 案例-线性回归案例 PyTorch 定义 PyTorch 是一个基于 Python 深…

Shader中着色器的编译目标级别

1. # pragma target x.0 2. # pragma require xxx 支持的“#pragma target”名称 以下是支持的着色器模型列表&#xff0c;其中包含大致增加的功能集&#xff08;在某些情况下对于平台/GPU 的要求更高&#xff09;&#xff1a; #pragma target 2.0 适用于 Unity 支持的所有平…