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
標簽等較為可信的方式抽取。