RAG文件解析利器:Deepdoc

深度学习机器發表於2024-07-29

專案結構

Deepdoc是RAG框架RAGFLOW中使用的文件解析工具。

|--deepdoc
	|--parser
	    |--resume
	        |--entities
	 		|--step_one.py
	 		|--step_two.py
	    |--docx_parser.py
	    |--pdf_parser.py
	    |--excel_parser.py
	    |--html_parser.py
	    |--json_parser.py
	    |--markdown_parser.py
	    |--ppt_parser.py
	|--vision
	    |--layout_recoginzer.py
	    |--ocr.py
	    |--ocr.res
	    |--operators.py
	    |--postprocess.py
	    |--recoginzer.py
	    |--seeit.py
	    |--t_recoginzer.py
	    |--t_ocr.py
	    |--table_structure_recognizer.py

核心元件

  • OCR
  • 版面結構分析
  • 表格結構識別
  • 解析器

解析器

簡歷型別的處理

簡歷是完全沒有規律的文件,一份簡歷可以分解為多個欄位組成的結構化資料。因此需要做特殊處理,entities中定義了一些大學、公司、產業等資訊,用於後續關鍵詞提取;整個簡歷的處理過程分為兩部進行:第一步先根據預先定義的關鍵詞提取有效資訊、接著再第二步再做一些合併以及過濾操作。

PDF文件的處理

PDF文件比較複雜,需要用到OCR模型,並且版面結構不同,內建了很多排序規則,另外還用到了XGB用於規則之外的補充。

經過實測,規則已經處理了絕大部分文字塊的排序過程,XGB作用不大,並且透過特徵重要性可以看到主要是座標型別的特徵起到了作用。

整個處理流程可以簡化如下:
文件轉圖片->版面分析->表格識別->文字識別->合併段落->後處理

其他型別的處理

每一種型別的文件都有一個對應的解析器,基本都是用現成的庫進行處理的。

視覺資訊處理

版面結構識別

不同型別的檔案具有不同的佈局,對於論文來說,會包含較多的圖表、甚至還會有公式,因此只有當準確識別出檔案的型別和佈局才能有效處理該文件。版面結構定義了以下10種類別,用於區分不同的內容:

  • 文字
  • 標題
  • 配圖
  • 配圖示題
  • 表格
  • 表格標題
  • 頁頭
  • 頁尾
  • 參考引用
  • 公式

執行命令:

python deepdoc/vision/t_recognizer.py --inputs=path_to_images_or_pdfs --threshold=0.2 --mode=layout --output_dir=path_to_store_result

表格結構識別

表的結構可能非常複雜,比如多層次結構標題、跨單元格以及行列結構不統一等。表結構識別針對表格內容定義了5種類別:

  • 列標題
  • 行標題
  • 合併單元格

執行命令:

python deepdoc/vision/t_recognizer.py --inputs=path_to_images_or_pdfs --threshold=0.2 --mode=tsr --output_dir=path_to_store_result

與版面結構分析不同,表格結構識別只會把可能是表格的區域識別出來

相關文章