Camelot識(shí)別pdf表格時(shí)的參數(shù)設(shè)置補(bǔ)充

題圖引自https://gtgraphics.de/en/wallpapers/camelot/

利用Camelot識(shí)別pdf文件中的表格,除了必須加上flavor = 'stream' 脱惰,以及指定 table_areas識(shí)別區(qū)域之外晃危,補(bǔ)充下在識(shí)別pdf表格時(shí)遇到的如多行數(shù)據(jù)稳析、上下標(biāo)等情況時(shí)的參數(shù)設(shè)置。
Camelot的安裝及基本用法見(jiàn)Python解析PDF表格——PDFPlumber vs Camelot

'pages'指定識(shí)別的頁(yè)碼

世衛(wèi)組織2020-3-18數(shù)據(jù)

世衛(wèi)組織報(bào)告中的表格位于第3-6頁(yè)(如下圖)紧憾,指定識(shí)別的頁(yè)碼用'pages'參數(shù)结笨。
默認(rèn)參數(shù)設(shè)置識(shí)別效果

增大'edge_tol'自動(dòng)擴(kuò)大識(shí)別區(qū)域

默認(rèn)參數(shù)下,Camelot未能識(shí)別出全部的表格區(qū)域尝艘。如上圖演侯,第3頁(yè)只識(shí)別出了15行,遠(yuǎn)小于表格所在頁(yè)的行數(shù)背亥。
除了在Python解析PDF表格——PDFPlumber vs Camelot介紹的用camelot.plot()命令查看表格所在區(qū)域然后再指定table_areas來(lái)處理外秒际,也可以將'edge_tol'參數(shù)指定為一個(gè)較大的數(shù)字悬赏,如本例中將edge_tol = 500,讓Camelot自動(dòng)擴(kuò)大識(shí)別區(qū)域娄徊。

camelot.plot(tables[0], kind='contour')
table_areas=['1,680,600,1']
增大'edge_tol'后識(shí)別區(qū)域擴(kuò)大

'row_tol'識(shí)別包含多行文字的表格行

單元格中有多行數(shù)據(jù)

本例中闽颇,表頭和個(gè)別數(shù)據(jù)條,單元格中包含了多行文本寄锐,有可能需要將多行文字自動(dòng)合并兵多,此時(shí)涉及到'row_tel'參數(shù)的調(diào)整。將該參數(shù)數(shù)值增大橄仆,Camelot會(huì)自動(dòng)將多行文字合并剩膘,但這樣也有可能帶來(lái)意想不到的結(jié)果。


默認(rèn)設(shè)置時(shí)的識(shí)別結(jié)果

row_tol = 40 多行文字自動(dòng)合并

如上圖盆顾,指定row_tol = 40雖然表頭部分的多行文字被自動(dòng)合并為了一行援雇,合并后的文字用'\n'連接;但下面的數(shù)據(jù)條部分椎扬,也被Camelot給合并到了一起惫搏,這顯然不是我們希望看到的結(jié)果。所以對(duì)于'row_tol'參數(shù)一定是要視情況靈活處理蚕涤,也提醒我們?cè)谧R(shí)別表格時(shí)需要隨時(shí)檢查中間結(jié)果是否識(shí)別正確筐赔。

不指定row_tol 時(shí)的識(shí)別結(jié)果

row_tol = 12時(shí)的識(shí)別結(jié)果

本例中一些國(guó)家名稱(chēng)文字較長(zhǎng),如伊朗在表格中為Iran (Islamic Republic of)揖铜,被分作兩行茴丰。默認(rèn)設(shè)置下,數(shù)據(jù)所在單元格和國(guó)家名稱(chēng)一共被識(shí)別為3行天吓;而適當(dāng)加大row_tol后(將'row_tol'指定為12)贿肩,識(shí)別的結(jié)果數(shù)據(jù)所在單元格自動(dòng)向上融合到了國(guó)家名稱(chēng)所在列的第一行。這樣更便于在后續(xù)處理時(shí)中修正國(guó)家名稱(chēng)龄寞。

'flag_size'是否識(shí)別上(下)標(biāo)文字

當(dāng)單元格中存在上標(biāo)時(shí)汰规,指定'flage_size = True',Camelot會(huì)在上標(biāo)下標(biāo)中自動(dòng)加上<s> </s>標(biāo)簽物邑,如下圖所示溜哮。


'flag_size'為識(shí)別的上(下)標(biāo)文字加標(biāo)識(shí)

'split_text'分割字符串

'flage_size參數(shù)用于指定是否分割識(shí)別的字符串,如下圖色解,'flage_size = True'時(shí)茂嗓,表格外的字符串被分割后分到了各列。在本例中科阎,這種自動(dòng)分割的結(jié)果看起來(lái)并不是必須的述吸,因?yàn)槲覀兏信d趣的是表格內(nèi)的數(shù)據(jù)部分,表格以外的文字本就會(huì)舍去锣笨。

'split_text'分割字符串

'strip_text'自動(dòng)替換文字

'strip_text參數(shù)用于指定是否分割識(shí)別的字符串蝌矛,如下圖道批,strip_text= '??§\n(<>)(</).'*,Camelot會(huì)在識(shí)別出文字后朴读,自動(dòng)刪去類(lèi)似上下標(biāo)標(biāo)準(zhǔn)'<s>'屹徘、'</s>'走趋,跨行單元格的'\n'等等衅金。

'strip_text'自動(dòng)替換文字

pandas.to_numeric轉(zhuǎn)化識(shí)別結(jié)果轉(zhuǎn)換為數(shù)字型

Camelot識(shí)別后結(jié)果,各國(guó)的疫情數(shù)據(jù)是個(gè)字符串而不是數(shù)字簿煌,因此還需要利用pandas.to_numeric氮唯,或是astype(int)將數(shù)據(jù)類(lèi)型轉(zhuǎn)換為數(shù)字型。


astype(int)將數(shù)據(jù)類(lèi)型轉(zhuǎn)換為數(shù)字型

本例中上述參數(shù)設(shè)置如下姨伟。

table_p3 = camelot.read_pdf(r'./20200318-sitrep-58-covid-19.pdf', flavor='stream',
                         pages='3', flag_size=True, row_tol=10, table_areas=['1,680,600,1'],#edge_tol=500, 
                         split_text=False, strip_text='*??§\n(<>)(</).')

最后用Pyecharts繪制地圖惩琉,結(jié)果如下:

2020-3-18中國(guó)以外的疫情數(shù)據(jù)

結(jié)論

  • 對(duì)于有文字和表格混合排版的頁(yè)面,建議采用指定table_areas指定表格識(shí)別區(qū)域夺荒,而不是增大edge_tol瞒渠,來(lái)處理。
  • row_tol的設(shè)置需要根據(jù)待識(shí)別表格的情況靈活選擇技扼,除非確有必要伍玖,不建議將該參數(shù)設(shè)置為過(guò)大的數(shù)數(shù)值。
  • 當(dāng)單元格中有上下標(biāo)時(shí)剿吻,指定**flage_size = True **更為穩(wěn)妥窍箍,否則有可能將類(lèi)似1.23^2 誤做 1.232,造成數(shù)據(jù)不準(zhǔn)確丽旅。
  • split_text椰棘、strip_text根據(jù)表格的具體情況設(shè)定。
  • 隨時(shí)檢查中間結(jié)果榄笙!隨時(shí)檢查中間結(jié)果邪狞!隨時(shí)檢查中間結(jié)果!
參考資料
  1. WHO: Coronavirus disease 2019 Situation report - 58
  2. Camelot: PDF Table Extraction for Humans
  3. Python解析PDF表格——PDFPlumber vs Camelot
  4. 用Pyecharts繪制世界地圖的避坑經(jīng)歷
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茅撞,一起剝皮案震驚了整個(gè)濱河市外恕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乡翅,老刑警劉巖鳞疲,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蠕蚜,居然都是意外死亡尚洽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)靶累,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腺毫,“玉大人癣疟,你說(shuō)我怎么就攤上這事〕本疲” “怎么了睛挚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)急黎。 經(jīng)常有香客問(wèn)我扎狱,道長(zhǎng),這世上最難降的妖魔是什么勃教? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任淤击,我火速辦了婚禮,結(jié)果婚禮上故源,老公的妹妹穿的比我還像新娘污抬。我一直安慰自己,他們只是感情好绳军,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布印机。 她就那樣靜靜地躺著,像睡著了一般门驾。 火紅的嫁衣襯著肌膚如雪射赛。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天猎唁,我揣著相機(jī)與錄音咒劲,去河邊找鬼。 笑死诫隅,一個(gè)胖子當(dāng)著我的面吹牛腐魂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逐纬,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蛔屹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了豁生?” 一聲冷哼從身側(cè)響起兔毒,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甸箱,沒(méi)想到半個(gè)月后育叁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芍殖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年豪嗽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡龟梦,死狀恐怖隐锭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情计贰,我是刑警寧澤钦睡,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站躁倒,受9級(jí)特大地震影響荞怒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜樱溉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一挣输、第九天 我趴在偏房一處隱蔽的房頂上張望纬凤。 院中可真熱鬧福贞,春花似錦、人聲如沸停士。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恋技。三九已至拇舀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜻底,已是汗流浹背骄崩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薄辅,地道東北人要拂。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像站楚,于是被迫代替她去往敵國(guó)和親脱惰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容