歐杰
摘要:制度及規(guī)范性文件是內(nèi)部審計(jì)人員開展現(xiàn)場審計(jì)工作以及審計(jì)發(fā)現(xiàn)問題定性時(shí)的重要依據(jù),經(jīng)常需要反復(fù)檢索查閱,但由于政府機(jī)關(guān)的電子制度文件主要以紙質(zhì)掃描圖片或電子公文系統(tǒng)生成的pdf文件等形式保存,無法進(jìn)行全文檢索。為此,筆者運(yùn)用Tesseract-OCR開源OCR引擎,將圖片和pdf文件中的文字內(nèi)容識別并提取出來,為實(shí)現(xiàn)制度內(nèi)容的全文檢索奠定了基礎(chǔ)。
關(guān)鍵詞: OCR技術(shù);python;制度文件
中圖分類號:TP311? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)09-0201-02
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 背景
制度及規(guī)范性文件是內(nèi)部審計(jì)人員開展現(xiàn)場審計(jì)工作以及審計(jì)發(fā)現(xiàn)問題定性時(shí)的重要依據(jù),常需要反復(fù)檢索查閱,但由于大量相關(guān)文件均為紙質(zhì)掃描圖片或由電子公文系統(tǒng)生成的pdf文件,難以全文檢索快速定位,為提高審計(jì)發(fā)現(xiàn)的效率和精準(zhǔn)度帶來極大不便。
為解決上述問題,筆者基于python和開源的OCR引擎Tesseract-OCR實(shí)現(xiàn)了將圖片、PDF格式的制度文件批量轉(zhuǎn)換為可編輯的doc文件的工具。
2文件可編輯轉(zhuǎn)換研究
制度文件可編輯轉(zhuǎn)換是在廣西人民銀行內(nèi)審監(jiān)督制度庫項(xiàng)目背景下的一項(xiàng)研究,由于廣西人民銀行系統(tǒng)內(nèi)歷史及現(xiàn)行制度的電子保存格式主要以tif、jpg、png、pdf等難以讀取文字內(nèi)容的文件格式為主,不利于對制度內(nèi)容的全文檢索,給審計(jì)人員快速查閱制度帶來障礙。因此需要將相關(guān)制度內(nèi)容進(jìn)行全文錄入,但如果僅依靠人力錄入,則耗時(shí)費(fèi)力。
Tesseract-OCR是由惠普公司開發(fā)的一個(gè)開源OCR引擎(Optical Character Recognition,光學(xué)字符識別),可識別多種格式的圖像文件并將其轉(zhuǎn)換成文本[1]。利用此項(xiàng)技術(shù),為快速提取相關(guān)制度文件文字內(nèi)容提供了可能。
2.1 圖像糾偏
對于通過掃描形成的制度及規(guī)范性文件,由于人工操作原因,圖像傾斜的情況在所難免。而傾斜的圖片使得文字識別正確效率大大降低,因此,在文字識別前需要對傾斜的圖像先進(jìn)行校正。對于圖像糾偏,本文主要運(yùn)用霍夫(Hough)變換算法來檢測圖像中的直線,再根據(jù)直線的斜率判斷圖片傾斜的角度來進(jìn)行糾偏。糾偏前后效果對比如圖1、2所示:
2.2 文件可編輯轉(zhuǎn)換研究
(1)jpg、png等一般圖片文件轉(zhuǎn)換
對于jpg、png等一般圖片格式的文件,可以利用Tesseract-OCR直接進(jìn)行圖片中文字識別,關(guān)鍵代碼如下:
[from PIL import Image
import pytesseract
img = Image.open(path)# path是圖片文件地址
text = pytesseract.image_to_string(img,lang='chi_sim')
#chi_sim為中文簡體字庫 ]
(2)tif格式文件轉(zhuǎn)換
tif文件多包含多張掃描圖片,需要分別對各張圖片進(jìn)行識別后再進(jìn)行合并,關(guān)鍵代碼如下:
[img = Image.open(path)
text = ''
for i in range(img.n_frames)#遍歷獲得tif文件內(nèi)包含的每張圖像
img.seek(i)
text=text+pytesseract.image_to_string(img,lang='chi_sim') ]
(3)pdf格式文件轉(zhuǎn)換
pdf文件是一種格式化、面向頁面的文檔,包含文本、圖像及其他多媒體內(nèi)容[2]。雖然可以通過pdfminer等第三方庫解析pdf文件來獲得其中的文本內(nèi)容,但在實(shí)際使用中發(fā)現(xiàn),對pdf文件中圖像所包含的文本內(nèi)容無法通過解析獲得。因此,考慮使用PyMuPDF第三方庫,將pdf文件逐頁轉(zhuǎn)換成圖片,再對各個(gè)圖片進(jìn)行文字識別。關(guān)鍵代碼如下:
[import fitz #fitz是PyMuPDF中的一個(gè)模塊
doc = fitz.open(path)
for pg in range(doc.pageCount):#逐頁遍歷pdf文件
page = doc[pg]
pp = page.getPixmap(alpha=False)
pp.writePNG('%s%s.png' %path+'/',pg))#按頁碼命名保存pdf文件中的各頁 ]
3批量制度文件轉(zhuǎn)換程序設(shè)計(jì)
3.1 流程設(shè)計(jì)
利用PyQt5進(jìn)行人機(jī)操作界面設(shè)計(jì),并采用PyInstaller進(jìn)行封裝后,形成可移植程序(見圖3)。
用戶在選擇需要進(jìn)行轉(zhuǎn)換的文件類型、路徑及結(jié)果保存路徑后,即可執(zhí)行轉(zhuǎn)換程序,根據(jù)不同的文件類型分別進(jìn)行處理,具體流程詳見圖4。
(1)對于jpg、png等一般類型的圖片,系統(tǒng)在進(jìn)行圖像糾偏后,再進(jìn)行圖片識別,最后將結(jié)果輸出為word文檔。
(2)對于pdf文件,系統(tǒng)會首先將pdf文件逐頁轉(zhuǎn)換為圖像,再對圖像進(jìn)行糾偏,然后再對各個(gè)圖片進(jìn)行圖像文字識別,最后將識別結(jié)果輸出為word文檔。
(3)對于tif文件,系統(tǒng)會首先讀取文件內(nèi)的各個(gè)圖像分頁,再對各個(gè)圖像分頁進(jìn)行糾偏,然后再對各個(gè)圖像分頁內(nèi)的文字進(jìn)行識別,最后將識別結(jié)果輸出為word文檔。
3.2 效果分析
以圖1為例進(jìn)行識別,識別效果如圖5所示。
從識別結(jié)果可以看出,由于制度文件采用的均為印刷體文字,在對制度文件進(jìn)行識別時(shí),文字識別率較高。經(jīng)過測試,文字識別率能達(dá)到95%以上,但是對于標(biāo)點(diǎn)符號識別正確率較低,這和文件的掃描質(zhì)量相關(guān),而通過對Tesseract-OCR所使用的中文字庫進(jìn)行訓(xùn)練后,可進(jìn)一步提高識別準(zhǔn)確率。
4結(jié)論
通過運(yùn)用OCR技術(shù),對以jpg、tif、pdf等格式保存的制度文件進(jìn)行文字內(nèi)容識別提取,可以有效提高工作效率,減少不必要的工作量,為實(shí)現(xiàn)制度文件內(nèi)容的全文檢索奠定了基礎(chǔ)。
參考文獻(xiàn):
[1] 龍之冠.征地檔案數(shù)字識別研究與應(yīng)用[J].國土資源導(dǎo)刊,2019,16(4):81-86.
【通聯(lián)編輯:聞翔軍】