一種pdf文檔的文本提取方法和裝置的制造方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明屬于閱讀和數(shù)據(jù)加工
技術(shù)領(lǐng)域:
,具體涉及一種PDF文檔的文本提取方法和目.ο【
背景技術(shù):
】[0002]隨著數(shù)字出版技術(shù)的快速發(fā)展,越來越多的出版機構(gòu)開始以數(shù)字形式,即電子文檔形式發(fā)行圖書。目前,在編輯、加工和印刷的過程中,這些圖書的電子文檔是由排版軟件(例如方正書版或方正飛騰)所創(chuàng)建,排版后導(dǎo)出大樣文件用于印刷。由于大樣文件只能用于印刷,不能用于電子閱讀,因此,一般使用排版軟件提供的工具將大樣文件轉(zhuǎn)換為便攜文件(PortableDocumentFormat,PDF)用于電子閱讀。[0003]圖1為采用排版軟件導(dǎo)出的PDF文檔示意圖,圖2為采用排版軟件導(dǎo)出的PDF文檔的排版空間的示意圖,圖3為采用現(xiàn)有方法提取的由排版軟件導(dǎo)出的TOF電子文件的文本示意圖。如圖1至圖3所示,由于排版軟件的編碼系統(tǒng)與國際通用的編碼系統(tǒng)不一致,造成大樣文件中的字符(例如:英文字母、數(shù)字、符號等)轉(zhuǎn)換為PDF文檔后,這些字符被轉(zhuǎn)換為全角文字,使得將PDF文檔手動拷貝到電子文檔中時英文單詞的排版空間之間沒有空余空間,甚至還有重疊(如圖2所示),然而電子閱讀應(yīng)用是根據(jù)字符排版空間之間的間隔來判斷空格,全角字符的情況下,英文內(nèi)容會連接在一起(如圖3所示),使得PDF文檔中提取文本的準(zhǔn)確性和可靠性差,在電子閱讀的過程中一方面不利于電子文檔的檢索,另一方面用戶需要對提取的文本進行手動編輯,這種操作費時費力?!?br/>發(fā)明內(nèi)容】[0004]有鑒于此,本發(fā)明提出了一種PDF文檔的文本提取方法和裝置,使得從排版軟件導(dǎo)出來的PDF文檔中提取出來的字符(例如:英文、數(shù)字、符號等)內(nèi)容不會連接在一起,提高PDF文檔的文本提取的準(zhǔn)確性和可靠性。[0005]—方面,本發(fā)明提供了一種PDF文檔的文本提取方法,所述方法包括:根據(jù)PDF文檔中各字符的顯示空間獲得所述各字符的排版空間;判斷相鄰字符的排版空間之間的間隔是否大于第一預(yù)設(shè)閾值,若是,則在所述相鄰字符的排版空間之間插入空格。[0006]進一步地,所述根據(jù)PDF文檔中各字符的顯示空間獲得所述各字符的排版空間包括:獲取PDF文檔中各字符的顯示空間;計算所述顯示空間中各字符的柵格區(qū)域;增大所述柵格區(qū)域后獲取所述各字符的排版空間。[0007]進一步地,所述PDF文檔的排版方式為橫版,所述柵格區(qū)域為顯示空間中各字符的像素寬度,所述像素寬度包括像素寬度左邊界和像素寬度右邊界,增大所述柵格區(qū)域包括:將所述像素寬度左邊界向左增大第二預(yù)設(shè)閾值;以及將所述像素寬度右邊界向右增大第三預(yù)設(shè)閾值;進一步地,所述PDF文檔的排版方式為豎版,所述柵格區(qū)域為顯示空間中各字符的像素高度,所述像素高度包括像素高度上邊界和像素高度下邊界,增大所述柵格區(qū)域包括:將所述像素高度上邊界向上增大第四預(yù)設(shè)閾值;以及將所述像素高度下邊界向下增大第五預(yù)設(shè)閾值。[0008]進一步地,在判斷相鄰字符的排版空間之間的間隔是否大于第一預(yù)設(shè)閾值之前,所述方法還包括:判斷當(dāng)前字符的排版空間前為空,若是,則判斷所述當(dāng)前字符為行首,在所述當(dāng)前字符的排版空間之前不插入空格。[0009]另一方面,本發(fā)明提供了一種PDF文檔的文本提取裝置,所述裝置包括:排版空間獲取模塊,用于根據(jù)PDF文檔中各字符的顯示空間獲得所述各字符的排版空間;第一判斷模塊,用于判斷相鄰字符的排版空間之間的間隔是否大于第一預(yù)設(shè)閾值,若是,則在所述相鄰字符的排版空間之間插入空格。[0010]進一步地,所述排版空間獲取模塊包括:顯示空間獲取單元,用于獲取PDF文檔中各字符的顯示空間;計算單元,用于計算所述顯示空間中各字符的柵格區(qū)域;增大單元,用于增大所述柵格區(qū)域后獲取所述各字符的排版空間。[0011]進一步地,所述PDF文檔的排版方式為橫版,所述柵格區(qū)域為顯示空間中各字符的像素寬度,所述像素寬度包括像素寬度左邊界和像素寬度右邊界,所述增大單元包括:第一增大子單元,用于將所述像素寬度左邊界向左增大第二預(yù)設(shè)閾值;以及第二增大子單元,用于將所述像素寬度右邊界向右增大第三預(yù)設(shè)閾值。[0012]進一步地,所述PDF文檔的排版方式為豎版,所述柵格區(qū)域為顯示空間中各字符的像素高度,所述像素高度包括像素高度上邊界和像素高度下邊界,所述增大單元包括:第三增大子單元,用于將所述像素高度上邊界向上增大第四預(yù)設(shè)閾值;以及第四增大子單元,用于將所述像素高度下邊界向下增大第五預(yù)設(shè)閾值。[0013]進一步地,所述裝置還包括:第二判斷模塊,用于判斷當(dāng)前字符的排版空間前為空,若是,則判斷所述當(dāng)前字符為行首,在所述當(dāng)前字符的排版空間之前不插入空格。[0014]本發(fā)明提供的PDF文檔的文本提取方法和裝置,通過TOF文檔中各字符的顯示空間獲得各字符的排版空間,通過PDF文檔中相鄰字符的排版空間之間的間隔是否大于第一預(yù)設(shè)閾值來判斷是否需要在相鄰字符之間插入空格,避免了采用排版軟件導(dǎo)出PDF文檔后提取的文本中英文、數(shù)字或符號等字符連接在一起的現(xiàn)象,提高了PDF文檔的文本提取的準(zhǔn)確性和可靠性?!靖綀D說明】[0015]通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:圖1為采用排版軟件導(dǎo)出的PDF文檔示意圖;圖2為采用排版軟件導(dǎo)出的PDF文檔的排版空間的示意圖;圖3為采用現(xiàn)有方法提取的由排版軟件導(dǎo)出的TOF電子文件的文本示意圖;圖4為本發(fā)明第一實施例提供的PDF文檔的文本提取方法的流程圖;圖5為本發(fā)明第一實施例提供的方法中獲得各字符的排版空間的示意圖;圖6為采用本發(fā)明第一實施例提供的方法對PDF文檔中的文本進行提取的結(jié)果示意圖;圖7為本發(fā)明第二實施例提供的PDF文檔的文本提取裝置的結(jié)構(gòu)圖?!揪唧w實施方式】[0016]下面結(jié)合附圖和實施例對本發(fā)明作進一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部內(nèi)容。[0017]本發(fā)明實施例提供的PDF文檔的文本提取方法和裝置,可以用于從現(xiàn)有的排版軟件導(dǎo)出的PDF文檔中提取文本,所述現(xiàn)有的排版軟件包括但不限制于:方正書版、方正維思或方正飛騰等,該方法能夠解決現(xiàn)有排版軟件導(dǎo)出的PDF文檔中提取出的字符(該字符例如為:阿拉伯?dāng)?shù)目字、英文字母、標(biāo)點符號、特殊符號)連接在一起的問題,從而提高文本提取的準(zhǔn)確性和可靠性,方便用戶進行電子文檔檢索并且不需要用戶對提取的文本進行手動編輯,增強了用戶體驗。[0018]需要說明的是,本發(fā)明實施例提供的PDF文檔包括橫版PDF文檔和豎版PDF文檔,由于常見的英文PDF文檔為橫版,因此,本發(fā)明實施例將以橫版PDF文檔的文本提取為例進行說明,對于豎版PDF文檔的文本提取可參考橫版PDF文檔的文本提取進行理解,本發(fā)明實施例將不再贅述。[0019]圖4為本發(fā)明第一實施例提供的PDF文檔的文本提取方法的流程圖,下面結(jié)合圖4對所述方法進行詳述,如圖4所示,所述方法包括:步驟11、根據(jù)PDF文檔中各字符的顯示空間獲得所述各字符的排版空間。[0020]在本步驟中,PDF文檔為現(xiàn)有排版軟件導(dǎo)出的文件,字符包括該PDF文檔中的阿拉伯?dāng)?shù)字、英文字母、標(biāo)點符號、特殊符號等,通過現(xiàn)有排版軟件導(dǎo)出的PDF文檔中的字符為全角字符,各字符占用2個字符位置。各字符的顯示空間為各字符的黑色像素所占據(jù)的空間,各字符的排版空間為排版時候字符的兩個光標(biāo)之間的位置,即排版軟件中一個字符所占據(jù)的空間。[0021]優(yōu)選的,步驟11中根據(jù)PDF文檔中各字符的顯示空間獲得所述各字符的排版空間可包括:步驟111、獲得PDF文檔中各字符的顯示空間。[0022]具體地,可以從TrueType(TrueType是由Apple公司和Microsoft公司聯(lián)合提出的一種新型數(shù)學(xué)形描述技術(shù)。它用數(shù)學(xué)函數(shù)描述字體輪廓外形,含有字形構(gòu)造、顏色填充、數(shù)字描述函數(shù)等指令)中根據(jù)編碼從PDF文檔獲取各字符的矢量圖,當(dāng)然,也可通過現(xiàn)有的其他方法獲得PDF文檔中各字符的顯示空間。[0023]步驟112、計算所述顯示空間中各字符的像素寬度。[0024]在本步驟中,可以先獲取字符的矢量數(shù)據(jù),由于每種字體的格式不盡相同,因此可以用FreeType(是一個可移植的字體引擎,它提供統(tǒng)一的接口來訪問多種字體格式文件,包括TrueType,OpenType,Typel,CID,CFF,WindowsFON/FNT,XllPCF等)開源項目獲取各字符的矢量數(shù)據(jù),該矢量數(shù)據(jù)為一包含(x,y)的數(shù)組,再從該數(shù)組中獲取最小值xmin和最大值xmax即得到了各字符的像素寬度。如圖5中所示字母“g”的xmin和xmax之間的距離width即為字母“g”的像素寬度。[0025]步驟113、增大所述像素寬度后得到所述各字符的排版空間。[0026]在本步驟中,所述像素寬度包括像素寬度左邊界(xmin)和像素寬度右邊界(xmax),具體地,增大所述像素寬度可通過將所述像素寬度左邊界向左增大第二預(yù)設(shè)閾值(如圖5中bearingXl),以及將所述像素寬度右邊界向右增大第三預(yù)設(shè)閾值(如圖5中bearingX2)來實現(xiàn),從而得到各字符的排版空間,如圖5中advance所示的寬度。其中,所述第二預(yù)設(shè)閾值可以等于所述第三預(yù)設(shè)閾值也可以不等于所述第三預(yù)設(shè)閾值。[0027]步驟1當(dāng)前第1頁1 2