Skip to content

We merge pymupdf4llm and gptpdf, and we've improved the accuracy of PDF parsing.

Notifications You must be signed in to change notification settings

shiayongshen/Combine_pymupdf4llm_and_gptpdf_for_llm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基於Pymupdf與gptpdf之LLM PDF parser

想法

將PDF轉換成Markdown時,發現Pymupdf4llm在轉換成表格時所產生的座標是錯誤的,gptpdf在擷取表格時,座標會是對的,另外在擷取圖片的部分gptpdf也比Pymupdf4llm的表現來的優異,因此在思考是否能夠將兩套件做整合,結合Pymupdf4llm能夠轉成Markdown的格式,以及gptpdf優異的擷取圖片表現,提升後續轉換成向量的品質,進而提升搜索的效率。 image

實際流程

  1. 使用GPTPDF得到表格與圖片的PNG檔案,會回傳每頁的圖片座標以及圖片存放位址(image list)
  2. 使用PymuPDF得到一個Page chunk = True的文本以及Page chunk = False的純文本(因為若為False的話則不會顯示表格座標,若為True則會顯示,但因為希望文字不要被分頁切斷,因此純文字處理時會用Page chunk = False的文本(設一個為True content一個為False content。
  3. 先處理圖片資料此時會有三種狀況(以Pymupdf判斷表格數為主) (1) 該頁只有圖片 則將該頁的image list丟進LLM做Summary。 (2) 該頁只有表格 則使用正則表達式取出True content的markdown表格,並提供Image list中的圖片,一起丟進去LLM請他生成HTML的表格程式碼,最後在將False content中的表格部分的文字去除,如此一來純文字中就不會有表格的文字,避免後續Chunk時不小心把表格切錯。 (3) 該頁兩者皆有 透過座標位置來判斷該圖片是否為表格,由於Pymupdf與GPTPDF的座標邏輯皆為(x1,y1,x2,y2),且Pymupdf會分別給我們表格座標以及圖片座標,但如先前所述(x2,y2)並不準確,因此主要透過(x1,y1)的位置來判斷這張圖片是否為表格,且表格與圖片不容易重疊的特性,拿Pymupdf中的表格座標去尋找與其(x1,y1)最相近的(差值最小)且面積最相近的(差值最小),以(x1,y1)座標的差值為優先,若超過某個域值才會再找面積最相近,若還是超過某個域值則放棄,將該表格當作圖片處理,該張圖片即為GPTPDF所擷取的表格圖片,接著就分別針對表格與圖片處理(1)及(2)。 image Image為GPTPDF所得到的圖片座標(有可能是圖片或是表格),Table為Pymupdf所得到的表格座標,並拿出(x1,y1)的座標來比較,可以看到Image_1與Table_A的差值最小,因此判定Image_1和Table_A是同一張表格。
  • 33頁的東京都維基百科耗時8分鐘,PDF Parser的部分2分鐘,其餘的為LLM推理時間

Prompt

Image Prompt

role_prompt = """你是一個圖片摘要生成的機器人"""
local_prompt = """你是一個圖片摘要生成的機器人"""

Table prompt

table_role_prompt= """
你現在是一位專注於製作HTML表格的工程師,你的任務是要畫出一個可以顯示的表格。
"""
table_local_prompt = """
你現在是一個製作HTML表格的工程師,你的任務是將圖片中表格的架構以及markdown的表格中的內容作結合,你必須要做到:
1.請專注在圖片表格的結構,完整的表現出原本的架構。
2.請使用Markdown中的文字來填入表格中。
3.請注意合併儲存格,讓結構完整。                
"""

成果

2024-07-17 16:36:22,271 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"

這是一張東京都的氣候圖表,顯示了每月的平均最高和最低溫度以及降雨量。圖表分為兩部分,分別以攝氏(°C)和華氏(°F)表示溫度,降雨量則分別以毫米(mm)和英寸(in)表示。 image

攝氏(°C)和毫米(mm):

  • 溫度

    • 1月:最高10°C,最低1°C
    • 2月:最高10°C,最低2°C
    • 3月:最高14°C,最低4°C
    • 4月:最高19°C,最低9°C
    • 5月:最高23°C,最低14°C
    • 6月:最高26°C,最低18°C
    • 7月:最高29°C,最低22°C
    • 8月:最高31°C,最低23°C
    • 9月:最高27°C,最低20°C
    • 10月:最高22°C,最低14°C
    • 11月:最高16°C,最低8°C
    • 12月:最高12°C,最低4°C
  • 降雨量

    • 1月:52 mm
    • 2月:56 mm
    • 3月:118 mm
    • 4月:125 mm
    • 5月:138 mm
    • 6月:168 mm
    • 7月:154 mm
    • 8月:168 mm
    • 9月:210 mm
    • 10月:198 mm
    • 11月:93 mm
    • 12月:51 mm

華氏(°F)和英寸(in):

  • 溫度

    • 1月:最高49°F,最低34°F
    • 2月:最高51°F,最低35°F
    • 3月:最高56°F,最低40°F
    • 4月:最高66°F,最低49°F
    • 5月:最高73°F,最低57°F
    • 6月:最高78°F,最低64°F
    • 7月:最高85°F,最低71°F
    • 8月:最高87°F,最低73°F
    • 9月:最高80°F,最低67°F
    • 10月:最高71°F,最低58°F
    • 11月:最高61°F,最低47°F
    • 12月:最高53°F,最低38°F
  • 降雨量

    • 1月:2.1 in
    • 2月:2.2 in
    • 3月:4.6 in
    • 4月:4.9 in
    • 5月:5.4 in
    • 6月:6.6 in
    • 7月:6 in
    • 8月:6.6 in
    • 9月:8.3 in
    • 10月:7.8 in
    • 11月:3.6 in
    • 12月:2 in

資料來源:[28]

2024-07-17 16:36:34,824 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" image 以下是根據圖片中的表格架構以及提供的Markdown文字內容所製作的HTML表格:

月份 東京 全年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
历史最高温 °C(°F) 22.6 (72.7) 24.9 (76.8) 28.1 (82.6) 29.2 (84.6) 32.6 (90.7) 36.4 (97.5) 39.5 (103.1) 39.1 (102.4) 38.1 (100.6) 32.6 (90.7) 27.3 (81.1) 24.8 (76.6) 39.5 (103.1)
平均高温 °C (°F) 9.8 (49.6) 10.9 (51.6) 14.2 (57.6) 19.4 (66.9) 23.6 (74.5) 26.1 (79.0) 29.9 (85.8) 31.3 (88.3) 27.5 (81.5) 22.0 (71.6) 16.7 (62.1) 12.0 (53.6) 20.3 (68.5)
日均气温 °C (°F) 5.4 (41.7) 6.1 (43.0) 9.4 (48.9) 14.3 (57.7) 18.8 (65.8) 21.9 (71.4) 25.7 (78.3) 26.9 (80.4) 23.3 (73.9) 18.0 (64.4) 12.5 (54.5) 7.7 (45.9) 15.8 (60.4)
平均低温 °C (°F) 1.2 (34.2) 2.1 (35.8) 5.0 (41.0) 9.8 (49.6) 14.6 (58.3) 18.5 (65.3) 22.4 (72.3) 23.5 (74.3) 20.3 (68.5) 14.8 (58.6) 8.8 (47.8) 3.8 (38.8) 12.1 (53.8)
历史最低温 °C(°F) −9.2 (15.4) −7.9 (17.8) −5.6 (21.9) −3.1 (26.4) 2.2 (36.0) 8.5 (47.3) 13.0 (55.4) 15.4 (59.7) 10.5 (50.9) −0.5 (31.1) −3.1 (26.4) −6.8 (19.8) −9.2 (15.4)
平均降水量 mm(英寸) 59.7 (2.35) 56.5 (2.22) 116.0 (4.57) 133.7 (5.26) 139.7 (5.50) 167.8 (6.61) 156.2 (6.15) 154.7 (6.09) 224.9 (8.85) 234.8 (9.24) 96.3 (3.79) 57.9 (2.28) 1,598.2 (62.91)
平均降雪量 cm(英寸) 4 (1.6) 4 (1.6) 0 (0) 0 (0) 0 (0) 0 (0) 0 (0) 0 (0) 0 (0) 0 (0) 0 (0) 0 (0) 8 (3.1)
平均降水天数(≥ 0.5 mm) 5.3 6.1 10.3 10.9 11.1 12.8 12.0 9.4 12.3 11.8 8.2 5.8 116
平均降雪天数(≥ 1 cm) 0.7 0.8 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 1.8
平均相對濕度(%) 51 52 57 62 68 75 76 74 75 71 64 56 65
月均日照時數 192.6 170.4 175.3 178.8 179.6 124.2 151.4 174.2 126.7 129.4 149.8 174.4 1,926.8
数据来源1:[28]
数据来源2:[37]

2024-07-17 16:37:42,430 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" image 這張圖表顯示了自1920年以來東京的人口變化趨勢。圖表中的數據點和標註顯示了幾個重要的里程碑:

  • 1956年,東京人口超過800萬。
  • 1963年,東京人口超過1000萬。
  • 2001年,東京人口超過1200萬。

從圖表中可以看出,東京的人口在1920年為370萬,之後逐漸增長,並在1945年出現下降,隨後又迅速回升並持續增長。到2013年,東京的人口達到約1329萬。

2024-07-17 16:37:55,717 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" image 以下是根據圖片中的表格結構和Markdown中的文字內容製作的HTML表格:

東京都區部 足立區、荒川區、板橋區、江戶川區、大田區、葛飾區、北區、江東區、品川區、澀谷區、新宿區、杉並區、墨田區、世田谷區、台東區、中央區、千代田區、豐島 區、中野區、練馬區、文京區、港區、目黑區
多摩地域 昭島市、秋留野市、稻城市、青梅市、清瀨市、國立市、小金井市、國分寺市、小平市、狛江市、立川市、多摩市、調布市、西東京市、八王子市、羽村市、東久留米市、東村山 市、東大和市、日野市、府中市、福生市、町田市、三鷹市、武藏野市、武藏村山市
西多摩郡 奥多摩町、日之出町、瑞穗町、檜原村
東京都島嶼部 大島支廳 大島町、利島村、新島村、神津島村
三宅支廳 三宅村、御藏島村
八丈支廳 八丈町、青島村
小笠原支廳 小笠原村

2024-07-17 16:39:47,572 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 以下是根據圖片中的表格架構以及提供的Markdown文字內容所製作的HTML表格:

image

城市 國家 締結日期
紐約 美国 1960年 2月29日
北京 中华人民共和国 1979年 3月14日
巴黎 法國 1982年 7月14日
新南威爾士州 澳大利亞 1984年 5月 9日
首爾 韩国 1988年 9月 3日
雅加達 印度尼西亞 1989年10月23日
聖保羅州 巴西 1990年 6月13日
開羅省 埃及 1990年10月23日
莫斯科 俄羅斯 1991年 7月16日
柏林 德国 1994年 5月14日
羅馬 義大利 1996年 7月 5日
大倫敦 英国 2015年10月14日

這段HTML代碼將會生成一個表格,表格的結構和圖片中的表格一致,並且填入了提供的Markdown文字內容。

Reference

https://github.com/pymupdf/PyMuPDF
https://github.com/CosmosShadow/gptpdf

About

We merge pymupdf4llm and gptpdf, and we've improved the accuracy of PDF parsing.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages