陳慧,郭暉
(1.北京中煤礦山工程有限公司 北京 100013;2.中聯(lián)煤層氣有限責任公司 北京 100015)
中國煤層氣資源豐富,總資源量約為 36.8 萬億m3,居世界前列(白振瑞等,2015;朱慶忠等,2017)。目前,中國煤層氣生產也進入了快速發(fā)展階段,并在鉆完井、產量計量、天然氣集輸、氣水處理等環(huán)節(jié)產生了大量數據(秦勇等,2015;宋巖等,2012)。因此,高效、準確的采集和分析數據對于保障煤層氣生產計劃順利實施、提高煤層氣產量具有重要的意義。
近年來,大數據技術在中國能源企業(yè)已廣泛應用,其在油田生產中的應用為實現(xiàn)油氣智能化、自動化生產提供了有效支撐(張仙偉等,2020;高偉華,2018;劉宏偉,2010)。運用大數據技術對煤層氣生產數據進行多維度分析也是煤層氣企業(yè)降本增效的有效途徑。其中,一線生產數據快速、高效的提取和采集是保障大數據技術在煤層氣生產過程中順利應用的重要前提。目前煤層氣生產數據采集多沿用傳統(tǒng)的工作模式,主要存在以下幾個方面的問題:①生產一線缺少標準數據庫和專業(yè)數據管理軟件,大部分數據以靜態(tài)報表分散存儲,數據管理效率較低,給后期數據統(tǒng)計和應用帶來不便。②生產一線數據以靜態(tài)報表的方式以電子郵件的形式傳送,依靠人工收集數據的工作步驟繁瑣,且不能充分發(fā)揮網絡資源的作用。③數據利用效率較低,各類數據須通過人工方式錄入Excel表格中,降低了工作效率并容易出現(xiàn)錯誤。這種傳統(tǒng)的生產數據采集模式制約了數據篩選、數據分析及結果可視化及驗證,從而嚴重影響了煤層氣生產運行的穩(wěn)定性及生產決策的準確性。因此,筆者針對煤層氣生產數據建立了一套自動數據采集系統(tǒng),實現(xiàn)煤層氣生產全過程數據準確、快速提取,以期為后續(xù)數據分析和應用奠定良好基礎,提高中國煤層氣開采效率。
數據自動采集系統(tǒng)是將煤層氣生產作業(yè)區(qū)在生產過程中產生的不同類別、不同格式和不同結構的生產數據自動識別、采集并處理成具有統(tǒng)一結構的數據格式。數據自動采集系統(tǒng)主要包括以下3個子系統(tǒng):查找表格標題、分析表格結構、提取表格數據(圖1)。該系統(tǒng)可從郵件中自動識別并判斷文件類型,提取表格標題,分析表格結構,根據指定關鍵字或表格形式進行識別提取數據。
數據自動提取技術主要針對2種常用的數據載體文件:一種是Word文件;另一種是Excel文件。針對Word文件,首先獲取文檔所有頂層節(jié)點(Node)并過濾出所有“段落(Paragraph)”、“表格(Table)”節(jié)點。對于每一個表格節(jié)點,獲取其節(jié)點下標,找出段落節(jié)點中下標分別大于、小于表格下標并最為接近的2個段落節(jié)點。任何一個段落節(jié)點中的文字如果以“表”開頭,則將其作為表格名稱。若均符合要求或均不符合要求,則以先出現(xiàn)的段落節(jié)點的文字作為表格標題。針對Excel文件,則直接使用工作表(Worksheet)名稱作為表格標題。
圖1 數據自動采集系統(tǒng)結構示意圖Fig.1 Structure of automatic data acquisition system
2.2.1 Word文件
Word中表格的存儲結構與HTML類似,主要采用“先行后列”的樹狀結構。對于常見的列合并單元格,實際存儲時并沒有存儲列合并信息,所以直接讀取表格會出現(xiàn)“錯位”的情況。分析Word表格內容需要將原始的樹狀結構標準化為二維結構。由于Word表格在每個單元格內存有列寬信息(圖2a),所以需要遍歷每一行的每個單元格,對列寬進行累加,以獲取單元格的X坐標。在遍歷完成所有單元格后,對X坐標進行去重和排序,生成一個有序數列Xi(i=0,1,2,3,…),其中i即為所對應的原始單元格在二維結構表格中的列號(即列下標)(圖2b)。此步驟同時可以整理出所有單元格橫向合并的列跨距,并使用“{←}”標識被橫向合并的單元格(圖2c、圖2d)。對于存在縱向合并的單元格,被合并的單元格可以讀出“CellMerge.Previous”標記,所以縱向合并處理比較簡單,直接處理標記即可(使用“{↑}”進行標識),此步驟兼容同時被橫縱合并的單元格。
圖2 Word中橫向合并單元格結構分析圖Fig.2 Structural analysis of horizontal merged cells in Word
2.2.2 Excel文件
針對Excel表格,可以讀取到每一個非空單元格(圖3a),通過單元格的行列號可以將數據解析至對應位置(A1、B1、B2……E2代表數據)。解析單元格的“是否被合并(IsMerged)”標記可以獲取到當前單元格的合并狀態(tài),若為被合并的單元格,可以通過“獲取合并區(qū)間(GetMergedRange)”找到其合并主體(圖3b中A1、B1和C2為合并主體)。若與合并主體處在同一列,則當前單元格視為向上合并(使用“{↑}”進行標識),否則視為向左合并(使用“{←}”進行標識)(圖3c)。
a.原始表格;b.合并主體;c.處理結果圖3 Excel單元格結構分析圖Fig.3 Structural analysis of cells in excel
表格結構分析完成之后,Word文件與Excel文件的表格內容已經展開并統(tǒng)一為同樣類型的二維表結構。在此基礎上可以進行數據提取。提取數據使用合并后的單元格(以下簡稱“簇”)作為邏輯判斷單位,以匹配表格的實際結構,由于簇與簇之間可能不完全對齊,所以同時要記錄與相鄰簇之間的關系以便后續(xù)判斷。筆者設計的常用提取表格數據方法主要有2種:①為整表導出。②為模板匹配。整表導出使用預設的正則表達式列表,當表格標題與正則表達式列表中的任何一項匹配成功時,將當前表格輸出為一個工作表,添加(若文件已存在則覆蓋)輸出目標的Excel文件中,并生成修改記錄。模板匹配主要根據用戶定義模板中所包含的正則表達式遍歷單元格,尋找每一個簇與之相匹配的模板。模板匹配主要對表格進行識別。該系統(tǒng)主要有2種表格識別的方式:①為整表識別。②為關鍵字識別。筆者重點介紹模板匹配的相關識別算法。
2.3.1 整表識別
整表識別時,先判斷被識別的表格是否屬于標準的二維表結構(分析后的表格不存在任何合并的結構)(李目海,1999)。若不是二維表結構,終止整表識別,忽略所有整表識別的模板,使用關鍵字識別。若當前表格屬于二維表結構(圖4a),則根據定義的模板,在第一行(列)中進行匹配(A1、B1、C1、D1)。匹配完成后若存在有效的匹配結果(A1、B1、D1),則從第二行(列)開始順次向下(右)遍歷每一個行(列)(A2、B2、D2……A5、B5、D5)。提取出匹配到的標題所在列(行)的單元格內的數據,最終形成一個一維的標題列表和一個二維(外層為增長方向,內層為標題對應的數據項)的數據集列表(圖4b),結束識別,輸出數據表格。
2.3.2 關鍵字識別
關鍵字識別是假設標題簇與數據區(qū)成對出現(xiàn)且數據區(qū)緊貼于標題簇的右側(下方),縱(橫)向的起止位置相同。該識別方法可進一步根據數據區(qū)域劃分為(王瑞通等,2017):單個單元格(Single)、連續(xù)多個單元格(Array)、單元格內的鍵值對(KeyValuePairs)、按行/列增長的數據表(DataTable)。
關鍵字識別首先根據一系列識別規(guī)則查找數據區(qū)域標題,按識別結果的位置拓撲關系構建數據識別模型,對數據區(qū)域周邊單元格的形狀排除沖突與歧義,對模型中的數據區(qū)域進行篩選匹配,并最終完成識別。
(1)單個單元格(Single)。獲取所有與模板匹配成功的標題簇,對于每一個標題簇:獲取4條邊界的位置、右側簇、下方簇(表格邊界在判斷上等效于標題簇);右側簇或下方簇的跨度均與本簇相同的情況下,若均為標題簇或均為非標題簇(圖5a、圖5b),則標記當前簇為無效簇,跳過當前簇,否則將并不是標題簇的作為數據簇(有效數據區(qū))(圖5c)。若右側簇或下方簇的跨度與當前簇跨度相同,且右側簇或下方簇不是標題簇,則標記為數據簇(有效數據區(qū))(圖5d),否則標記當前簇為無效簇,跳過當前簇(圖5e)。若右側簇或下方簇的跨度與當前簇跨度均不同,則標記當前簇為無效簇,跳過當前簇(圖5f)。
圖4 整表識別示意圖Fig.4 Schematic diagram of whole table identification
圖5 具有跨度相同的單個單元格識別示意圖Fig.5 Schematic diagram of identifying single cells with the same span
(2)連續(xù)多個單元格(Array)。連續(xù)多個單元格是指一個合并的標題單元格對應多個數據單元格的結構。若標題單元格為列合并,則數據區(qū)位于下方單元格;若為行合并,則數據區(qū)位于右側單元格;若同時存在行列合并,且除了標題單元格和其他單元格以外,其他方向存在非標題單元格,則提取非標題單元格為數據(圖6a、圖6b)。若右側或者下方都是標題單元格或者其他單元格,則當前單元格為無效單元格(圖6c、圖6d)。若不存在合并,則按照單個單元格的規(guī)則處理。
圖6 不同類型的連續(xù)多個單元格識別示意圖Fig.6 Schematic diagram of identifying different types of consecutive cells
(3)單元格內的鍵值對(KeyValuePairs)。單元格內的鍵值對是指單個單元格內既有標題又有數據的數據結構。不向外查找數據單元格,直接提取整個單元格內的文字,具體提取內容按照定義的提取模式進行處理。
(4)按行/列增長的數據表(DataTable)。標題單元格合并,數據區(qū)位置判定規(guī)則與“連續(xù)多個單元格”相同。數據區(qū)形狀為二維表格,向下增長,第一行為數據區(qū)的列標題。將查找指定方向上的所有單元格,直到出現(xiàn)合并方式不同的單元格或到達表格盡頭。該類數據表可分為2種:①為標題單元格為行合并(圖7a)。②為標題單元格為列合并(圖7b)。前者數據區(qū)在標題單元格的右側,所以“向右”尋找“相同行跨距”的“列”,后者數據區(qū)在標題單元格的下方,所以“向下”尋找“相同列跨距”的“行”。
按列增長的數據表與按行增長的數據表相似(數據區(qū)行列關系互換),數據區(qū)的查找方式也相同,但選擇第一列判定數據區(qū)內表頭。此外,按列增長的數據區(qū),在輸出時需要做行列轉置,統(tǒng)一為按行增長相同的數據格式。
2.3.3 數據提取
每一個識別模板中包含多個提取項,用于提取坐標信息,從識別出的數據區(qū)域內提取需要的數據,并按實際需要映射到數據庫的字段上,用以直接生成數據表條目。每個提取項有2個正則表達式,提取過程中先使用“識別匹配表達式”抽提單個字段,再使用“解析匹配表達式”抽提字段數據內容。
柿莊南區(qū)塊處在沁水盆地南部,煤炭儲量巨大,具有煤變質程度高、含氣量高、煤層埋藏深度適中等特點,為煤層氣規(guī)模化開發(fā)提供了優(yōu)良的條件(伊永祥等,2019;張松航等,2015;康清清等,2020;宿虎等,2020)。柿莊南區(qū)塊煤層氣井整體投產時間較長,至 2019年底,該區(qū)塊已建煤層氣井1 300余口。據統(tǒng)計,柿莊南區(qū)塊5個產區(qū)中每天可產生鉆井日報、煤層氣井生產日報數據多達2 300多份,這些數據信息覆蓋面廣,數據量也十分龐大,涉及鉆井、完井、測試、穩(wěn)壓、采氣、運輸、儲存等多個方面。因此,建立數據自動采集系統(tǒng)對于加快煤層氣田智能化發(fā)展、降低生產成本具有重要意義。
圖7 按行增長的數據表示意圖Fig.7 Schematic diagram of data table growing by row
3.2.1 單個單元格
本示例中,Word表格所有要提取的字段均為標題、值成對出現(xiàn)的單元格(圖8a),所以使用“單個單元格”匹配模板,多數情況下,也可以用“連續(xù)多個單元格”代替。表格結構較為繁雜,出現(xiàn)了大量列合并情況(圖8b)。其中,“一開日期”、“二開日期”等標題簇的右側均存在其他標題簇,所以數據區(qū)被認為在下方;“完鉆依據”右側和下方均無標題簇,在第一輪識別中無法確定數據區(qū)位置,在第二輪識別中由于下方簇已被標記為數據區(qū),所以將右側區(qū)域標記為數據區(qū)。在表格結構識別的基礎上根據匹配模板中包含正則表達式(標題模式和內容模式)進行標題識別和抽提數據并得到匹配結果(圖8c、圖8d)。最終完成單個單元格的數據提取(圖8e)。
3.2.2 連續(xù)多個單元格
Word單元格中坐標數據緊貼在標題簇一側、總跨距與標題簇一致(圖9a)。標題單元格縱向合并可直接使用“{↑}”進行標識(圖9b)。在此基礎上使用“連續(xù)多個單元格”匹配模板中的正則表達式匹配數據(圖9c、圖9d)。輸出結果將二維結構轉化為文本結構,使用“||”分隔每一行,使用“|”分隔每一列(圖9e)。這樣做的目的是為了將所有數據的格式均一化,方便后續(xù)的數據提取。當數據簇的外側有其他不同合并數的簇時,也可以使用“按行增長的數據表”模板得到相同的結果。
3.2.3 單元格內鍵值對
本示例中,需要提取的數據為Word單元格內部文本中的一部分(圖10a)?!皢卧駜鹊逆I值對”不向外查找數據區(qū),標題單元格自身即為數據區(qū)。在得到表格結構之后(圖10b),將根據匹配模式進行數據匹配(圖10c、圖10d)。該提取模式是從當前單元格的文本中找到以“固井:”開頭、“?!苯Y尾的字符串,然后提取其“:”和“?!敝g的內容。利用該模板可提取“固井”和“山西11固井隊”(圖10e)
3.2.4 按行增長的數據表
該數據表的坐標信息為“一個標題格+二維數據區(qū)”式的組合型數據(圖11a),所以在表格結構分析的基礎上(圖11b)使用“按行增長數據表(DataTable)” 模板進行匹配(圖11c、圖11d)。由于每個標題簇的下方均存在標題簇,所以判定數據區(qū)位于右側。數據區(qū)的判定從標題簇右側第一列開始,直到行數發(fā)生變化或出現(xiàn)其他標題簇、表格邊界。所以2組數據最終均囊括了所有的3行2列單元格簇。輸出結果將二維結構化為文本結構,使用“||”分隔每一行,使用“|”分隔行內列數據(圖11e)。這樣做的目的是為了將所有數據的格式均一化,方便后續(xù)的數據提取。
a.原始文檔;b.分析表格結構;c.匹配模板;d.匹配結果;e.識別結果圖8 單個單元格數據提取示例圖Fig.8 Example of single cell data extraction
a.原始文檔;b.分析表格結構;c.匹配模板;d.匹配結果;e.識別結果圖9 連續(xù)多個單元格數據提取示例圖Fig.9 Example of data extraction from consecutive cells
a.原始文檔;b.分析表格結構;c.匹配模板;d.匹配結果;e.識別結果圖10 單元格內鍵值對數據提取示例圖Fig.10 Example of data extraction of key value pairs in cells
a.原始文檔;b.分析表格結構;c.匹配模板;d.匹配結果;e.識別結果圖11 按行增長的數據表數據提取示例圖Fig.11 Example of data extraction from data table of row growth
(1)數據自動采集系統(tǒng)可以將不同格式、不同結構和不同類別的生產數據自動識別、采集并處理成具有統(tǒng)一結構的數據格式。該系統(tǒng)主要包含“查找表格標題、分析表格結構、提取表格數據”3個關鍵模塊。
(2)數據自動采集系統(tǒng)可分別針對Word文件和Excel文件查找表格標題和分析表格結構,在此基礎上利用整表識別或者關鍵字識別對單個單元格、連續(xù)多個單元格、單元格內的鍵值對、按行/列增長的數據表進行表格識別,實現(xiàn)數據自動采集。
(3)柿莊南煤層氣生產數據自動采集應用表明,該系統(tǒng)可以針對單個單元格、連續(xù)多個單元格、單元格內的鍵值對和按行/列增長的數據表等進行表格分析、模板匹配和數據提取,從而準確和高效地開展數據采集,為加快煤層氣田智能化發(fā)展提供有效支撐。