天天看點

網頁内容提取難?ClickHouse一招快速搞定

作者:萬山資料

上篇文章中我們介紹了一種文本相似度計算的模型,今天我們來說說一種相同複雜場景下的字段處理方案。

資料字段的處理,使用SQL函數對要處理的字段進行加工。一般來說處理過程如下:

(1)确定各字段的處理規則;

(2)對要處理的字段進行分批;

(3)編寫處理SQL,每一批寫成一條處理SQL,采用以下格式:

DROP TABLE IF EXIST XX

CREATE TABLE XX ENGINE=YY AS SELECT * FROM ZZ

複雜場景下的字段處理流程和上述資料字段基本處理完全一緻。實作的具體SQL中,總結出來一個高效的方法。關鍵還是來自于clickhouse提供了數組類型的支援,提供了lambda函數支援,即在函數中提供自lambda表達式的自定義處理過程。

例如下面這個例子展現的是将一個加密的JSON字段轉換成解密後的HTML字段,具體操作如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

轉換前的字段格式如下圖:

網頁内容提取難?ClickHouse一招快速搞定

轉換後的字段格式如下圖:

網頁内容提取難?ClickHouse一招快速搞定

基于正規表達式從WEB頁面資料中提取中标人

(1)用于測試的資料表,有兩個字段,一個ID,一個CONTENT字段,CONTENT字段為從網際網路抓取的公共資源中标成交公告内容。

(2)從CONTENT字段中提取中标人,僅考慮正文中出現“中标人:XXX”一種情況;

(3)對提取出來的中标人與法人庫進行名稱合規性驗證,用于驗證的法人庫資料為69071251條,測試資料236243條。

基于正規表達式從WEB頁面資料中提取中标人測試

(1)SQL方案

分為三步走:第一步,用正規表達式将疑似中标人名稱的文本提取出來生成一個臨時表;第二步用臨時表與法人庫表進行關聯,取能關聯上的,即正确的名稱生成第二個臨時表;第三步,通過第二個時臨時表與原表的關聯,合并提取出來正确的中标人資訊,寫入目标表。實作代碼如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

(2)JAVA程式設計方案

此問題中,ETL實作複雜度過度,是以選擇JAVA程式設計方案。

JAVA程式設計邏輯:連接配接資料庫批量取出資料,然後逐條用正規表達式提取中标人資訊并用提取出來的中标人資訊查詢法人庫進行正确性測試,對測試通過的資料寫入目标資料表。

實作代碼如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

基于正規表達式從WEB頁面資料中提取中标人測試結果

(1)SQL批處理

此方案運作時間為9.8秒,共提取出18121個中标人,共計算了236243條資料,滿足該格式的正文提取完全,平均每秒處理資料超過2萬條。

運作結果如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

提取出招标人數量如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

處理後資料表如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

(2)JAVA程式設計

此方案52.8秒共執行了1000條資料,提取出99個招标人,平均每秒處理資料不到20條。

運作情況如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

提取出招标人數量如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

處理後資料表如下圖所示:

網頁内容提取難?ClickHouse一招快速搞定

(3)測評結果對比

網頁内容提取難?ClickHouse一招快速搞定

繼續閱讀