許玉德/同濟(jì)大學(xué)道路與交通工程教育部重點(diǎn)實(shí)驗(yàn)室
胡述筌 劉思磊 徐國(guó)堯/上海市軌道交通結(jié)構(gòu)耐久與系統(tǒng)安全重點(diǎn)實(shí)驗(yàn)室
當(dāng)前,電子文件電子化歸檔和電子檔案電子化管理成為檔案工作的重要發(fā)展趨勢(shì)?,F(xiàn)有工作實(shí)踐表明,圖紙檔案數(shù)字化成果信息采集已形成比較成熟的工作模式,但學(xué)界、實(shí)踐部門(mén)很少討論檢驗(yàn)圖紙名稱(chēng)準(zhǔn)確性的方式方法。目前管理系統(tǒng)對(duì)檔案信息的命名有所限制,>、<、/等特殊符號(hào)不能作為檔案名稱(chēng),容易導(dǎo)致圖紙數(shù)字化成果名稱(chēng)與數(shù)據(jù)庫(kù)目錄上的圖紙名稱(chēng)不完全一致;加之?dāng)?shù)據(jù)庫(kù)的位置與圖紙數(shù)字化成果檔案的實(shí)際存儲(chǔ)位置通常不會(huì)在同一個(gè)地方,二者聯(lián)系需要通過(guò)超鏈接來(lái)實(shí)現(xiàn),如數(shù)據(jù)庫(kù)目錄與圖紙數(shù)字化成果名稱(chēng)不一致,二者超鏈接就會(huì)失效,無(wú)法通過(guò)數(shù)據(jù)庫(kù)的目錄查閱圖紙數(shù)字化成果。工作中,需要對(duì)圖紙檔案數(shù)字化成果名稱(chēng)一致性進(jìn)行復(fù)核。
中國(guó)鐵路上海局集團(tuán)有限公司上海高鐵維修段對(duì)段內(nèi)形成的所有圖紙檔案進(jìn)行數(shù)字化掃描,受數(shù)據(jù)庫(kù)系統(tǒng)不接受特殊符號(hào)、重復(fù)命名等限制,圖紙數(shù)字化成果名稱(chēng)與數(shù)據(jù)庫(kù)系統(tǒng)目錄中的名稱(chēng)很難保證完全一致,需要對(duì)名稱(chēng)一致性進(jìn)行復(fù)核。統(tǒng)計(jì)發(fā)現(xiàn),需要復(fù)核的圖紙超過(guò)10000張,若采用人工復(fù)核的方式,會(huì)造成效率低下、正確率得不到保障等問(wèn)題。需要設(shè)計(jì)新的方法,復(fù)核圖紙數(shù)字化成果檔案名稱(chēng)的一致性。
名稱(chēng)一致性復(fù)核流程如下。一是選用擅長(zhǎng)處理海量數(shù)據(jù)的Python分別爬取已建立數(shù)據(jù)庫(kù)目錄上的檔案名稱(chēng)、實(shí)際存儲(chǔ)位置的圖紙數(shù)字化成果檔案名稱(chēng);二是以Python中內(nèi)建的模糊匹配函數(shù),進(jìn)行數(shù)據(jù)庫(kù)、實(shí)際圖紙數(shù)字化成果檔案名稱(chēng)一致性復(fù)核,模糊匹配函數(shù)中的匹配度,在檢查過(guò)程中需要進(jìn)行循環(huán)調(diào)整,每檢查一次逐漸拉高匹配度;三是每次匹配完成后,以Excel VBA中的SQL語(yǔ)句檢驗(yàn)兩者名稱(chēng)是否不一致、是否存在冗余數(shù)據(jù);四是反復(fù)進(jìn)行二、三流程,直至兩者名稱(chēng)完全對(duì)應(yīng)。
存放圖紙的路徑分為3個(gè)層次,即線路層、線路內(nèi)的檔案層、檔案內(nèi)的圖紙層,每條線路包含了數(shù)量眾多的檔案,檔案中又包含了眾多圖紙。上海高鐵維修段數(shù)據(jù)庫(kù)共搭建了3個(gè)存儲(chǔ)路徑,即滬寧城際(含虹橋聯(lián)絡(luò)線)、滬杭高鐵、寧杭高鐵,每條線路竣工文檔冊(cè)數(shù)分別為25555冊(cè)、12327冊(cè)、16206冊(cè),包含圖紙張數(shù)分別為4646張、3447張、4628張。
一是讀取外部?jī)?chǔ)存圖紙數(shù)字化成果名稱(chēng)。Python自帶的函數(shù)庫(kù)os,提供針對(duì)系統(tǒng)檔案信息管理的操作接口,利用該函數(shù)庫(kù)提供的函數(shù),可以實(shí)現(xiàn)批量讀取檔案存儲(chǔ)路徑、檔案更名、檔案存儲(chǔ)位置移動(dòng)、檔案刪除等功能。本次數(shù)據(jù)庫(kù)使用了批量讀取檔案存儲(chǔ)路徑的接口函數(shù)os.walk(file_dir),作為爬取檔案路徑、圖紙數(shù)字化成果檔案名稱(chēng)的手段。
二是建立外部?jī)?chǔ)存圖紙數(shù)字化成果檔案名稱(chēng)的字典。Python提供了一種特殊的數(shù)據(jù)類(lèi)型dictionary,具體格式如下[1]。
(式中key1、key2表示添加數(shù)據(jù)的鍵;value1、value2表示添加數(shù)據(jù)值)
該數(shù)據(jù)格式為每個(gè)數(shù)據(jù)提供唯一的鍵(key),通過(guò)查閱鍵找到添加數(shù)據(jù)值(value),添加數(shù)據(jù)值的形式不限于單一值,可以是數(shù)組(array)、列表(list)或字典(dictionary)。由于此次上海高鐵維修段數(shù)據(jù)庫(kù)共搭建了3個(gè)存儲(chǔ)路徑,存儲(chǔ)的圖紙數(shù)量較為龐大,所以需要用到雙層字典,將第一層字典稱(chēng)為d_total,第二層字典稱(chēng)為d。其中d_total的鍵為線路名稱(chēng),添加數(shù)據(jù)值為d,包含該線路下所有檔案文件夾;d的鍵為存儲(chǔ)文件夾名稱(chēng),添加數(shù)據(jù)值為文檔冊(cè)內(nèi)的圖紙。通過(guò)此方式,可以完整有序地讀取文件夾內(nèi)所有圖紙數(shù)字化成果名稱(chēng),具體格式如下。
d_total={‘線路1’: d{檔案1-1: [圖紙1-1-1,圖紙1-1-2], 檔案2: [圖紙1-2-1,圖紙1-2-2]…},‘線路2’: d{檔案2-1: [圖紙2-1-1,圖紙2-1-2], 檔案2-2: [圖紙2-2-1,圖紙2-2-2]…},….}
三是模糊查找方法與實(shí)現(xiàn)。引入Python中的xlwt、xlrd兩個(gè)函數(shù)庫(kù),讀取xlsx檔格式的內(nèi)部查詢(xún)數(shù)據(jù)庫(kù)圖紙目錄,以列表(List)變量的形式暫存,作為遍歷查找的母體。
由于數(shù)據(jù)庫(kù)目錄與圖紙數(shù)字化成果檔案名稱(chēng)不完全一致,如以目錄名稱(chēng)與圖紙數(shù)字化成果檔案名稱(chēng)完全相同作為檢查判斷語(yǔ)句的條件,則太過(guò)苛刻,所以通過(guò)Python中difflib庫(kù)里的difflib.get_close_matches(word, possibilities,n,cutoff)函數(shù),使用模糊查找的方式進(jìn)行一致性檢核,其輸入?yún)?shù)解釋如下所示[2]。
word為需要查找的字符串,是讀取Excel中的數(shù)據(jù)庫(kù)圖紙目錄后,存于列表中的各個(gè)元素;possibilities為搜索匹配數(shù)據(jù)集,由創(chuàng)建字典的鍵、添加數(shù)據(jù)值,分別截取成為列表進(jìn)行輸入;n為達(dá)到匹配相似度的模糊搜索結(jié)果,按照相似度大小依序輸出,默認(rèn)值是輸出的3個(gè)結(jié)果,本文只取最大匹配相似度的搜索結(jié)果,即令n等于1;cutoff為控制匹配相似度,取值0—1,默認(rèn)值為0.6,設(shè)置1為精確查找,如搜索結(jié)果的匹配相似度超過(guò)既定的cutoff值,則函數(shù)按照匹配相似度大小依序輸出查找結(jié)果。
該函數(shù)按照式(2)計(jì)算匹配相似度Ratio,若計(jì)算出來(lái)的Ratio大于cutoff值,代表查找字符串的匹配度超過(guò)默認(rèn)值,通過(guò)檢核要求。
式中,len(word)為查找字符串word的長(zhǎng)度,len(possibility)為搜索匹配數(shù)據(jù)集內(nèi)某一元素字符串possibility的長(zhǎng)度,T為word、possibility兩字符串內(nèi)容完全一致的長(zhǎng)度。
審核存于列表(List)的目錄所有標(biāo)題,與讀取存儲(chǔ)圖紙數(shù)字化成果檔案名稱(chēng)而建立的字典d_total進(jìn)行模糊匹配,查找相似度最高的存儲(chǔ)文件夾名稱(chēng)、圖紙數(shù)字化成果檔案名稱(chēng)。經(jīng)反復(fù)試驗(yàn),發(fā)現(xiàn)設(shè)置cutoff為0.7時(shí)模糊查找的效果最好,設(shè)置0.8以上則不合格率太高,無(wú)助于復(fù)驗(yàn)。由于匹配的結(jié)果要導(dǎo)出Excel進(jìn)行一致性檢驗(yàn),必須詳細(xì)記錄存儲(chǔ)文件夾、圖紙數(shù)字化成果檔案的名稱(chēng),與數(shù)據(jù)庫(kù)目錄名稱(chēng)的異同,所以如果模糊匹配結(jié)果返回空值,必須要進(jìn)行標(biāo)記。
數(shù)據(jù)庫(kù)目錄上的檔案都有固定、唯一、連續(xù)編排的序號(hào),可利用Excel VBA中的SQL語(yǔ)句,遍歷選取模糊匹配而來(lái)的存儲(chǔ)文件夾名稱(chēng),如一個(gè)存儲(chǔ)文件夾名稱(chēng)選取出來(lái)的數(shù)據(jù)條數(shù),與對(duì)應(yīng)的數(shù)據(jù)庫(kù)目錄數(shù)量一致,則無(wú)需進(jìn)行人工修正;如連續(xù)編排序數(shù)與選取總條數(shù)不一致,代表發(fā)生資料冗余、數(shù)據(jù)缺失、匹配錯(cuò)誤等現(xiàn)象,需對(duì)特定目錄名稱(chēng)、存儲(chǔ)文件夾名稱(chēng)進(jìn)行人工修正。檢查完目錄上的檔案標(biāo)題后,如未發(fā)現(xiàn)存儲(chǔ)文件夾存在數(shù)據(jù)冗余、數(shù)據(jù)缺失、匹配錯(cuò)誤等問(wèn)題,再用Excel VBA中的SQL語(yǔ)句往下遍歷選取該存儲(chǔ)文件夾內(nèi)所有模糊匹配成功得到的圖紙數(shù)字化成果檔案名稱(chēng),若模糊匹配所對(duì)應(yīng)的圖紙數(shù)字化成果檔案名稱(chēng)選取結(jié)果條數(shù)大于1,代表存在圖紙數(shù)據(jù)冗余或匹配錯(cuò)誤,需要進(jìn)行人工修正。
進(jìn)行數(shù)據(jù)條數(shù)核對(duì)后,可以找出數(shù)據(jù)冗余、數(shù)據(jù)缺失、匹配錯(cuò)誤等問(wèn)題,再進(jìn)行人工修改標(biāo)題,然后再次利用difflib庫(kù)里的difflib.get_close_matches(word, possibilities,n,cutoff)函數(shù),參照修正更新后的字典進(jìn)行n=1、cutoff=1精確查找,查找完的數(shù)據(jù)匯總至Excel內(nèi),再次使用Excel VBA中的SQL語(yǔ)句進(jìn)行遍歷,對(duì)比目錄上的檔案名稱(chēng),依次循環(huán)直到目錄中的數(shù)據(jù)百分之百通過(guò)復(fù)核。
按照流程進(jìn)行循環(huán)復(fù)核,各循環(huán)階段復(fù)核的結(jié)果如表1所示,可以發(fā)現(xiàn)第一次模糊查找的正確率為81.3%,對(duì)沒(méi)有匹配上的目錄名稱(chēng)、存儲(chǔ)文件夾名稱(chēng)、圖紙數(shù)字化成果檔案名稱(chēng)進(jìn)行人工修正;再次進(jìn)行第二次匹配度為1的復(fù)核循環(huán),即可得到99.8%的正確率;修正后第三次復(fù)核正確率達(dá)到100%。
根據(jù)反復(fù)測(cè)試的結(jié)果,若初始模糊查找的相似度太高,則目錄與實(shí)際存儲(chǔ)數(shù)字化成果名稱(chēng)不匹配的條數(shù)過(guò)多,后續(xù)修正的工作量過(guò)大,故改采用降低模糊查找相似度(本次取0.7),可有效降低不匹配的數(shù)據(jù)條數(shù),再利用Excel VBA,進(jìn)行相關(guān)數(shù)據(jù)冗余、數(shù)據(jù)缺失、匹配錯(cuò)誤檢核,解決因不同檔案文件夾、圖紙數(shù)字化成果檔案名稱(chēng)相似度太高,導(dǎo)致重復(fù)匹配的問(wèn)題,最后檢核出來(lái)需人工修正數(shù)據(jù)為2385條,占比全部圖紙目錄條數(shù)約18.7%。第一次模糊查找修正完后,第二次精確查找的正確率就可達(dá)到99.8%。若沒(méi)有特定的輔助手段,則全部電子化名稱(chēng)皆須人工復(fù)核,且正確率難以保證,故該方法可以達(dá)到實(shí)現(xiàn)與實(shí)際檔案文件夾名稱(chēng)、圖紙數(shù)字化成果檔案名稱(chēng)匹配正確率100%,且兼顧復(fù)核效率的目標(biāo)。本次數(shù)據(jù)冗余、數(shù)據(jù)缺失、匹配錯(cuò)誤是使用Excel VBA進(jìn)行復(fù)核,其運(yùn)行效率較為低下,往后可以針對(duì)該部分再進(jìn)行相關(guān)算法的優(yōu)化。
表1:圖紙復(fù)核結(jié)果統(tǒng)計(jì)表