新闻发布时间抽取(二)
1. 再论抽取方法
在前一期实验中,对gne组件进行分析和完善,对三种时间抽取的方法进行了实验对比。
在对抽取结果进行个例分析的过程中,我发现此前实验存在几个问题:
- 抽取的1000篇新闻存在一定的重复,经过ID去重大约减少了36篇。尽管重复新闻的HTML内容并不一定完全一样,但考虑到采样合理性,在新的实验中,加入基于ID的简单去重策略。去重这个问题比较复杂,后续单开一篇来讨论。
- 基于文本的正则匹配抽取,其基于//text(),会对整个HTML下面的文本段落段落进行匹配,其中包括
<style>
(CSS样式)和<script>
(JS脚本)的内容,尤其是<script>
可能与JSON-LD
重复,且会匹配JS脚本中的非发布日期。在新的改进中,首先移除HTML中的全部<style>
和<script>
标签,然后分别对<head>
和<body>
进行匹配,即规则分为//head//text()
和//body//text()
两种。理论上来说,<head>
中如果出现日期,大概率就是<meta>
和JSON-LD
中的日期,其他<head>
标签中出现的日期即便有也不能采信。在实验中我的确发现了一例,在<title>
中出现了日期,虽然是对的,但是不如正文中的时间精确。 - 除了已经考虑的
<meta>
和JSON-LD
两种被认为较为可靠的方式外,还有其他较为可靠的方式未考虑,即<time>
标签以及带有诸如date、time样式的<span>
或<div>
标签。
2. 时间抽取结果统计
基于新采样的964篇(去重后)新闻HTML实验了多种方法,抽取结果如下。
通过将上述方法进行组合,按照meta|JSON-LD|time|other|body+re|head+re
顺序进行提取,可获得888条,召回率为92.1%;如果按照meta|JSON-LD|time|other|text+re
顺序进行提取,可获得923条,召回率为95.7%。排除其中一部分抽取结果可能错误或者格式无效问题。
3. 案例分析
为了尽量提高抽取的准确率,对抽取结果进行人工走查分析。
3.1.抽取结果分析(recalled case analysis)
对抽取的888条进行人工走查,判断是否准确。网页新闻发布时间的准确率判断有两个标准:(1)必须是合法的日期/时间/日期时间的格式。可以首先通过一组较为严格的正则表达式进行校验,对于不匹配的再进行人工核查。(2)是否的确为该网页所表达的新闻发布时间,也就是说没有误抽。
3.1.1.格式正确性分析
经自动检查和人工核查,在888条结果中,有14条抽取错误,详情如下:
1231405504,06:10 PM06:41 PM06:15 PM06:21 PM06:40 PM
1231393829,Posted yesterday at 6:09am
1231401467,06:10 PM06:41 PM06:15 PM06:21 PM06:40 PM
1231373684,06:10 PM06:41 PM06:15 PM06:21 PM06:40 PM
1231413941,5 hours ago5 hours ago5 hours ago1 day ago21 hours ago
1231423363,Published
1231429109,Posted yesterday at 8:29am
1231423418,Published
1231442966,15:4515:1315:0614:3513:4513:2413:0912:5512:3512:0411:3611:2211:1217:0016:4516:3016:0015:3515:0014:3014:0613:4513:0512:3111:5311:4011:3611:1317:0916:33
1231413993,12 Mar 2025 5:56 pm AEDT12 Mar 2025 5:48 pm AEDT12 Mar 2025 5:45 pm AEDT12 Mar 2025 5:44 pm AEDT12 Mar 2025 5:44 pm AEDT12 Mar 2025 5:34 pm AEDT12 Mar 2025 5:34 pm AEDT12 Mar 2025 5:28 pm AEDT12 Mar 2025 5:14 pm AEDT12 Mar 2025 5:12 pm AEDT12 Mar 2025 5:09 pm AEDT12 Mar 2025 5:09 pm AEDT12 Mar 2025 5:08 pm AEDT12 Mar 2025 5:02 pm AEDT12 Mar 2025 5:02 pm AEDT12 Mar 2025 5:02 pm AEDT12 Mar 2025 4:58 pm AEDT12 Mar 2025 4:54 pm AEDT12 Mar 2025 4:52 pm AEDT12 Mar 2025 4:49 pm AEDT12 Mar 2025 4:48 pm AEDT12 Mar 2025 4:48 pm AEDT12 Mar 2025 4:48 pm AEDT12 Mar 2025 4:48 pm AEDT12 Mar 2025 4:42 pm AEDT12 Mar 2025 4:42 pm AEDT12 Mar 2025 4:40 pm AEDT12 Mar 2025 4:38 pm AEDT
1231404665,12 Mar 2025 4:38 pm AEDT12 Mar 2025 4:22 pm AEDT12 Mar 2025 4:20 pm AEDT12 Mar 2025 4:13 pm AEDT12 Mar 2025 4:12 pm AEDT12 Mar 2025 4:12 pm AEDT12 Mar 2025 4:07 pm AEDT12 Mar 2025 4:07 pm AEDT12 Mar 2025 4:06 pm AEDT12 Mar 2025 4:06 pm AEDT12 Mar 2025 4:06 pm AEDT12 Mar 2025 4:00 pm AEDT12 Mar 2025 3:58 pm AEDT12 Mar 2025 3:52 pm AEDT12 Mar 2025 3:48 pm AEDT12 Mar 2025 3:48 pm AEDT12 Mar 2025 3:46 pm AEDT12 Mar 2025 3:42 pm AEDT12 Mar 2025 3:41 pm AEDT12 Mar 2025 3:40 pm AEDT12 Mar 2025 3:40 pm AEDT12 Mar 2025 3:36 pm AEDT12 Mar 2025 3:36 pm AEDT12 Mar 2025 3:30 pm AEDT12 Mar 2025 3:28 pm AEDT12 Mar 2025 3:24 pm AEDT12 Mar 2025 3:22 pm AEDT12 Mar 2025 3:22 pm AEDT
1231409967,2025-03-112024-11-072024-12-042025-01-192025-03-102025-02-272025-02-262025-02-25
1231295956,03/11/2025 - 09:5403/10/2025 - 09:4403/06/2025 - 10:29
1231402230,12 Mar 2025 8:42 pm AEDT12 Mar 2025 8:42 pm AEDT12 Mar 2025 8:22 pm AEDT12 Mar 2025 8:16 pm AEDT12 Mar 2025 8:14 pm AEDT12 Mar 2025 8:14 pm AEDT12 Mar 2025 8:08 pm AEDT12 Mar 2025 8:02 pm AEDT12 Mar 2025 8:02 pm AEDT12 Mar 2025 7:56 pm AEDT12 Mar 2025 7:46 pm AEDT12 Mar 2025 7:44 pm AEDT12 Mar 2025 7:42 pm AEDT12 Mar 2025 7:40 pm AEDT12 Mar 2025 7:34 pm AEDT12 Mar 2025 7:32 pm AEDT12 Mar 2025 7:28 pm AEDT12 Mar 2025 7:24 pm AEDT12 Mar 2025 7:12 pm AEDT12 Mar 2025 7:12 pm AEDT12 Mar 2025 7:12 pm AEDT12 Mar 2025 7:04 pm AEDT12 Mar 2025 7:02 pm AEDT12 Mar 2025 6:56 pm AEDT12 Mar 2025 6:56 pm AEDT12 Mar 2025 6:54 pm AEDT12 Mar 2025 6:50 pm AEDT12 Mar 2025 6:46 pm AEDT
可以发现其中出现了几条相对时间,如“5 hours ago”、“yesterday at 8:29am”,以及只有时间如“06:10 PM”,这类信息在缺少上下文的情况下无法推断绝对时间,应视为无效抽取。查看网页(https://www.thisdaylive.com/index.php/2025/03/11/police-rescue-two-priests-other-kidnap-victims-in-adamawa-bayelsa/):
<span class="date">5 hours ago</span>
说明是通过其他类标签匹配。同时这个信息其实并非当前新闻的发布时间,而是页面旁边的新闻列表中的时间。该页面真正的发布时间是在一个隐藏标签中:
<span class="todays-date hide-for-sm-down">Wednesday, 12th March, 2025</span>
标题下面也出现了日期:
<span class="date-container"><i class="fa-light fa-calendar-days"></i> <span class="date">21 hours ago</span></span>
date-container这个样式还在其他标签中出现了。
另外也出现了“Published”,发现是其他类标签抽取出错,HTML片段如下:
<span class="date">Published</span> <span class="entry-date updated" title="6:01 pm">March 11, 2025</span>
然后这个情况处理比较复杂,虽然可以将entry-date
updated
加入规则中,但是其日期在text()
中,时间则是在@title
中。
另一个网页中(https://98q.com/local-news-stories/efb6880a8150553e5bf8c87c87c03cac)的情况如下:
<span class="date"> Posted yesterday at 8:29am </span>
除此之外,没有任何其他位置包含时间信息。其他示例包括
<time class="article-intro__date" datetime="2025-03-11" itemprop="datePublished">March 11, 2025</time>
<span class="date updated published-date" itemprop="datePublished" content="2025-03-11T14:36:16+00:00">12 Mar 2025 1:36 am AEDT</span>
从这些个例可以看出,基于其他任意标签的时间戳往往比较随意,因此需要严格限定规则。
3.1.2.语义正确性分析
对874个抽取取正确时间格式(绝对时间)进行抽样检查,看是否为实际的新闻发布时间。
抽样了10个结果,发现9个抽取自<meta>
,1个抽取自JSON-LD
,语义全部正确。由于这一批数据大体上都在3月11日左右,因此通过筛选出与3月11日相差较大的日期(如3月9日以前),进行人工对比分析。
出现以下情况:
<meta name="articleDate" content="2025-03-11">
<time datetime="2025-03-07T16:00:00-07:00" class="tnt-date asset-date text-muted">Mar 7, 2025</time>
<div class="PromoA-timestamp" data-timestamp="1610379720000" data-date="January 11, 2021 at 10:42 AM EST" data-promo-date="January 11, 2021" data-show-timestamp="true">, January 11, 2021</div></div>
经分析,全部874个抽取结果中,抽取错误仅有2条,说明已有方法较为可靠。
3.2.未抽取网页分析(bad case analysis)
对未抽取出内容的76篇进行人工检查,统计结果如下:
对Missing类进行手工分析,发现情况比较复杂,时间可能出现在标签中,或者JS代码中,如果要采用严格的规则进行抽取,会比较困难,倒不如直接对HTML进行正则匹配,虽然有抽取错误的情况,但也可以忽略不计。
这样看来,gne
组件原始代码直接基于 //text()
进行规则匹配是有一定道理的。但是,毕竟是规则匹配,难免存在覆盖不到的情况。如何能够让机器做到跟人一样一眼就可以看到时间并通过其附近的标签、属性或样式等快速判断?这可以成为继续研究的主题。
4.结论
本文讨论了更多新闻网页发布时间的抽取方法,开展了相关实验,并对实验结果进行了案例分析。
分析发现,通过补充完善正则表达式规则,可以进一步提高时间抽取召回率。但由于正文中的时间语义较为复杂,最佳策略仍然是先通过meta
标签、JSON-LD
元数据、time
标签等较为可信的方式抽取。