在做大數(shù)據(jù)的時(shí)候,首先第一步就是要解決數(shù)據(jù)的來源,我們采用的設(shè)計(jì)方案就是使用Python來從一些政府網(wǎng)站爬數(shù)據(jù),將披露的銀行、證券、股票、信托等行業(yè)中三大報(bào)表(利潤表、資產(chǎn)負(fù)債表、現(xiàn)金流量表)數(shù)據(jù)解析并錄入數(shù)據(jù)庫,我們采用java編程來實(shí)現(xiàn)三大報(bào)表數(shù)據(jù)解析。
程序設(shè)計(jì)采用java面向?qū)ο笤O(shè)計(jì)的概念,利用java繼承、封裝、多態(tài)的特性來設(shè)計(jì),可以減去程序更改的麻煩,以前寫的類可以繼續(xù)使用。
程序設(shè)計(jì)架構(gòu)采用如下所示:
ParentTable包含三個(gè)函數(shù)。
MatchStartLine():用于查找三大報(bào)表的起始行。
MatchEndline():用于查找三大報(bào)表的結(jié)束行。
Anla():用于解析查找到的報(bào)表行。
在解析不用的PDF文件時(shí),直接進(jìn)行override這三個(gè)函數(shù),就可以實(shí)現(xiàn)解決不同的表格匹配問題。
新建一個(gè)PDFFile類,在這個(gè)類中實(shí)現(xiàn)調(diào)用ParentTable的anla函數(shù),來解析所有的PDF文件中的所有表格。
public boolean anla(){
for(ParentTable table : tables){
int nIndexStart = table.matchStartLine(lines);
int nIndexEnd = table.matchEndLine(lines);
/*取出表內(nèi)容*/
String[] arrTableLines =newString[nIndexEnd - nIndexStart +1];
System.arraycopy(lines, nIndexStart, arrTableLines,0, nTableLineCount);
if(arrTableLines.length <=0)
continue;
table.setTableLines(arrTableLines);
/*分析表內(nèi)容*/
table.anla();
}
}
在主程序中,調(diào)用PDFFile類中的anla()函數(shù),將依次解析tables參數(shù)中所有表格類型,將解決匹配所有PDF文件中表格。
下一節(jié)將解決如何使用多線程來解析PDF文件。
-
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104485 -
程序
+關(guān)注
關(guān)注
116文章
3761瀏覽量
80754 -
PDF
+關(guān)注
關(guān)注
1文章
166瀏覽量
33637
原文標(biāo)題:PDF解析程序架構(gòu)設(shè)計(jì)
文章出處:【微信號(hào):gh_757915171cb5,微信公眾號(hào):FPGA自學(xué)筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論