專案結構
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
與版面結構分析不同,表格結構識別只會把可能是表格的區域識別出來