{"id":2148,"date":"2026-08-21T11:02:19","date_gmt":"2026-08-21T03:02:19","guid":{"rendered":"https:\/\/www.puzi7.net\/?p=2148"},"modified":"2026-08-21T11:03:53","modified_gmt":"2026-08-21T03:03:53","slug":"mineru-pdf-%e8%a7%a3%e6%9e%90%e5%ae%9e%e6%88%98%e6%8c%87%e5%8d%97%e4%b8%8e%e8%a1%a8%e6%a0%bc%e8%af%86%e5%88%ab%e8%a7%a3%e6%9e%90","status":"publish","type":"post","link":"https:\/\/www.puzi7.net\/?p=2148","title":{"rendered":"MinerU &#8212;- PDF \u89e3\u6790\u5b9e\u6218\u6307\u5357\u4e0e\u8868\u683c\u8bc6\u522b\u89e3\u6790"},"content":{"rendered":"<span itemprop=\"description\">\n<p class=\"wp-block-paragraph\">\u505a RAG \u6700\u5934\u75bc\u7684\u4e0d\u662f\u5411\u91cf\u68c0\u7d22\uff0c\u662f PDF \u89e3\u6790\u3002\u8868\u683c\u53d8\u4e71\u7801\u3001\u516c\u5f0f\u53d8\u56fe\u7247\u3001\u591a\u680f\u8bfb\u6210\u4e00\u6761\u7ebf\u3002MinerU \u7528\u4e09\u540e\u7aef\u67b6\u6784\u89e3\u51b3\uff1apipeline \u7eaf CPU \u65e0\u5e7b\u89c9\u3001vlm \u7cbe\u5ea6\u6700\u9ad8\u3001hybrid \u4e24\u8005\u7ed3\u5408\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MinerU \u7684\u8868\u683c\u8bc6\u522b\u4e0d\u662f OCR \u540e\u6b63\u5219\u5339\u914d\uff0c\u662f\u6a21\u578b\u7ea7\u7ed3\u6784\u7406\u89e3\u3002TableStructureRec \u505a\u7ed3\u6784\u8bc6\u522b\u8f93\u51fa HTML\uff0c\u652f\u6301 rowspan\/colspan\u3002\u8de8\u9875\u8868\u683c\u81ea\u52a8\u5408\u5e76\uff0c\u8868\u683c\u5185\u7684\u56fe\u7247\u548c\u516c\u5f0f\u4e5f\u80fd\u8bc6\u522b\u3002\u81ea\u52a8\u63d0\u53d6\u8868\u683c\u6807\u9898\u548c\u811a\u6ce8\u3002\u8fd9\u662f\u628a PDF \u8868\u683c\u53d8\u6210 LLM \u53ef\u7528\u7ed3\u6784\u5316\u6570\u636e\u7684\u6b63\u786e\u8def\u5f84\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"287\" src=\"https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-11-1024x287.png\" alt=\"\" class=\"wp-image-2152\" srcset=\"https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-11-1024x287.png 1024w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-11-300x84.png 300w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-11-767x215.png 767w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-11-1199x336.png 1199w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-11.png 1206w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u6587\u4ece\u5b9e\u9645\u6d4b\u8bc4\u7684\u89d2\u5ea6\uff0c\u5206\u4eab\u4f7f\u7528MinerU\u505aPDF\u89e3\u6790\u7684\u6280\u6218\u6b65\u9aa4\uff0c\u4ee5\u53ca\u5982\u4f55\u505a\u8868\u683c\u8bc6\u522b\u548c\u89e3\u6790\uff0c\u8bdd\u4e0d\u591a\u8bf4\u4e0a\u5e72\u8d27\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u90e8\u5206\uff1aPDF \u89e3\u6790\u5b9e\u6218\u6307\u5357<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u5b89\u88c5\u4e0e\u914d\u7f6e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u65b9\u5f0f\u4e00\uff1apip \/ uv \u5b89\u88c5\uff08\u63a8\u8350\uff09<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5b89\u88c5 uv \u5305\u7ba1\u7406\u5668\npip install --upgrade pip\npip install uv\n\n# \u5b89\u88c5 MinerU \u5168\u529f\u80fd\u5305\nuv pip install -U \"mineru&#91;all]\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u65b9\u5f0f\u4e8c\uff1a\u6e90\u7801\u5b89\u88c5<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/opendatalab\/MinerU.git\ncd MinerU\nuv pip install -e .&#91;all]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u65b9\u5f0f\u4e09\uff1aDocker \u90e8\u7f72\uff08\u4ec5 Linux \/ WSL2\uff09<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u53c2\u8003 https:\/\/opendatalab.github.io\/MinerU\/quick_start\/docker_deployment\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6a21\u578b\u6e90\u914d\u7f6e\uff08\u56fd\u5185\u73af\u5883\u5fc5\u8bbe\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5207\u6362\u5230 ModelScope \u6a21\u578b\u6e90\uff0c\u907f\u514d HuggingFace \u7f51\u7edc\u95ee\u9898\nexport MINERU_MODEL_SOURCE=modelscope\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u7cfb\u7edf\u8981\u6c42\uff1a<\/strong> Python 3.10-3.13\uff08Windows \u56e0 ray \u4e0d\u652f\u6301 3.13\uff0c\u9650 3.10-3.12\uff09| \u6700\u4f4e 16GB RAM\uff08\u63a8\u8350 32GB+\uff09| 20GB \u78c1\u76d8\u7a7a\u95f4\uff08\u63a8\u8350 SSD\uff09<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 CLI \u57fa\u7840\u7528\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6700\u7b80\u7528\u6cd5\uff08GPU \u73af\u5883\uff0c\u9ed8\u8ba4 hybrid-engine \u540e\u7aef\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>```bash\nmineru -p input.pdf -o output\/\n```\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7eaf CPU \u73af\u5883\uff08\u6307\u5b9a pipeline \u540e\u7aef\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>```bash\nmineru -p input.pdf -o output\/ -b pipeline\n```\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5b8c\u6574\u53c2\u6570\u5217\u8868\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mineru --help\n\n# \u5173\u952e\u53c2\u6570\u8bf4\u660e\uff1a\n# -p, --path          \u8f93\u5165\u6587\u4ef6\u8def\u5f84\u6216\u76ee\u5f55\uff08\u5fc5\u586b\uff09\n# -o, --output        \u8f93\u51fa\u76ee\u5f55\uff08\u5fc5\u586b\uff09\n# -b, --backend       \u89e3\u6790\u540e\u7aef\uff1apipeline | vlm-engine | hybrid-engine | vlm-http-client | hybrid-http-client\n#                      \u9ed8\u8ba4\uff1ahybrid-engine\n# -m, --method        \u89e3\u6790\u65b9\u6cd5\uff1aauto\uff08\u9ed8\u8ba4\uff09| txt | ocr\uff08\u4ec5 pipeline \u548c hybrid\uff09\n# --effort            hybrid \u89e3\u6790\u529b\u5ea6\uff1amedium\uff08\u9ed8\u8ba4\uff09| high\n# -l, --lang          \u6587\u6863\u8bed\u8a00\uff08\u63d0\u5347 OCR \u7cbe\u5ea6\uff0c\u4ec5 pipeline\uff09\n# -s, --start         \u8d77\u59cb\u9875\u7801\uff080-based\uff09\n# -e, --end           \u7ed3\u675f\u9875\u7801\uff080-based\uff09\n# -f, --formula       \u662f\u5426\u542f\u7528\u516c\u5f0f\u89e3\u6790\uff08\u9ed8\u8ba4\u542f\u7528\uff09\n# -t, --table         \u662f\u5426\u542f\u7528\u8868\u683c\u89e3\u6790\uff08\u9ed8\u8ba4\u542f\u7528\uff09\n# --image-analysis    \u662f\u5426\u542f\u7528\u56fe\u7247\/\u56fe\u8868\u5206\u6790\uff08VLM \u548c hybrid \u540e\u7aef\uff0c\u9ed8\u8ba4\u542f\u7528\uff09\n# --api-url           \u8fde\u63a5\u5df2\u6709 mineru-api \u670d\u52a1\uff08\u7701\u7565\u5219\u81ea\u52a8\u542f\u52a8\u4e34\u65f6\u670d\u52a1\uff09\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5b9e\u9645\u4f7f\u7528\u793a\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u793a\u4f8b 1\uff1a\u89e3\u6790\u5355\u9875 PDF \u7684\u7b2c 2-5 \u9875\uff0c\u4f7f\u7528 vlm-engine \u540e\u7aef\nmineru -p report.pdf -o output\/ -b vlm-engine -s 1 -e 4\n\n# \u793a\u4f8b 2\uff1a\u6279\u91cf\u89e3\u6790\u76ee\u5f55\u4e0b\u6240\u6709 PDF\uff0cCPU \u6a21\u5f0f\nmineru -p .\/pdfs\/ -o .\/output\/ -b pipeline\n\n# \u793a\u4f8b 3\uff1ahybrid-engine + high effort\uff08\u6700\u9ad8\u7cbe\u5ea6\uff09\nmineru -p thesis.pdf -o output\/ -b hybrid-engine --effort high\n\n# \u793a\u4f8b 4\uff1a\u5173\u95ed\u516c\u5f0f\u89e3\u6790\uff0c\u4ec5\u63d0\u53d6\u6587\u672c\u548c\u8868\u683c\nmineru -p data.pdf -o output\/ -f false -t true\n\n# \u793a\u4f8b 5\uff1a\u8fde\u63a5\u8fdc\u7a0b API \u670d\u52a1\nmineru -p input.pdf -o output\/ --api-url http:\/\/192.168.1.100:8000\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 \u4e09\u79cd\u540e\u7aef\u9009\u62e9\u7b56\u7565<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u540e\u7aef<\/td><td>\u7cbe\u5ea6\uff08OmniDocBench v1.6\uff09<\/td><td>\u786c\u4ef6\u9700\u6c42<\/td><td>\u9002\u7528\u573a\u666f<\/td><\/tr><tr><td><strong>pipeline<\/strong><\/td><td>86.47<\/td><td>CPU \u53ef\u8dd1 \/ 4GB VRAM<\/td><td>\u5feb\u901f\u5904\u7406\u3001\u65e0 GPU \u73af\u5883\u3001\u65e0\u5e7b\u89c9\u8981\u6c42<\/td><\/tr><tr><td><strong>vlm-engine<\/strong><\/td><td>95.30<\/td><td>8GB VRAM<\/td><td>\u6700\u9ad8\u7cbe\u5ea6\u3001\u590d\u6742\u7248\u9762\u3001\u626b\u63cf\u6587\u6863<\/td><\/tr><tr><td><strong>hybrid-engine<\/strong><\/td><td>95.26-95.39<\/td><td>2GB VRAM\uff08hybrid\uff09<\/td><td>\u751f\u4ea7\u63a8\u8350\u3001\u539f\u751f\u6587\u672c+VLM \u8865\u5145\u3001\u4f4e\u5e7b\u89c9<\/td><\/tr><tr><td><strong>vlm-http-client<\/strong><\/td><td>\u540c vlm<\/td><td>\u65e0\u9700\u672c\u5730 torch<\/td><td>\u8f7b\u91cf\u5ba2\u6237\u7aef\u8fde\u63a5\u8fdc\u7a0b VLM \u670d\u52a1<\/td><\/tr><tr><td><strong>hybrid-http-client<\/strong><\/td><td>\u540c hybrid<\/td><td>\u672c\u5730 pipeline + \u8fdc\u7a0b VLM<\/td><td>\u5206\u5e03\u5f0f\u90e8\u7f72\u3001\u964d\u4f4e\u672c\u5730\u663e\u5b58<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u9009\u62e9\u5efa\u8bae\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6709 GPU + \u8ffd\u6c42\u7cbe\u5ea6<\/strong> \u2192 <code>hybrid-engine --effort high<\/code>\uff0895.39 \u5206\uff0c\u539f\u751f\u6587\u672c\u63d0\u53d6\u4f4e\u5e7b\u89c9\uff09<\/li>\n\n\n\n<li><strong>\u6709 GPU + \u8ffd\u6c42\u901f\u5ea6<\/strong> \u2192 <code>hybrid-engine --effort medium<\/code>\uff08\u7cbe\u5ea6\u4ec5\u964d 0.13\uff0c\u901f\u5ea6\u63d0\u5347 35-220%\uff09<\/li>\n\n\n\n<li><strong>\u65e0 GPU<\/strong> \u2192 <code>pipeline<\/code>\uff0886.47 \u5206\uff0c\u7eaf CPU \u53ef\u8dd1\uff09<\/li>\n\n\n\n<li><strong>\u8fdc\u7a0b\u90e8\u7f72<\/strong> \u2192 <code>vlm-http-client<\/code> \u6216 <code>hybrid-http-client<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.4 PDF \u89e3\u6790\u8f93\u51fa\u7ed3\u6784<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6267\u884c <code>mineru -p demo.pdf -o output\/<\/code> \u540e\uff0c\u8f93\u51fa\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"529\" src=\"https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-8-1024x529.png\" alt=\"\" class=\"wp-image-2149\" srcset=\"https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-8-1024x529.png 1024w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-8-300x155.png 300w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-8-767x396.png 767w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-8.png 1084w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Markdown \u8f93\u51fa\u793a\u4f8b\uff08demo.md\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u6df1\u5ea6\u5b66\u4e60\u5728\u533b\u5b66\u5f71\u50cf\u4e2d\u7684\u5e94\u7528\n\n\u8fd1\u5e74\u6765\uff0c\u6df1\u5ea6\u5b66\u4e60\u6280\u672f\u5728\u533b\u5b66\u5f71\u50cf\u5206\u6790\u9886\u57df\u53d6\u5f97\u4e86\u663e\u8457\u8fdb\u5c55\u3002\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\uff08CNN\uff09\n\u80fd\u591f\u81ea\u52a8\u4ece\u533b\u5b66\u56fe\u50cf\u4e2d\u63d0\u53d6\u7279\u5f81\uff0c\u8f85\u52a9\u533b\u751f\u8fdb\u884c\u75be\u75c5\u8bca\u65ad\u3002\n\n## \u5b9e\u9a8c\u7ed3\u679c\n\n\u5b9e\u9a8c\u7ed3\u679c\u5982\u8868 1 \u6240\u793a\uff1a\n\n&lt;table>\n&lt;tr>&lt;td rowspan=\"2\">\u6a21\u578b&lt;\/td>&lt;td colspan=\"2\">\u51c6\u786e\u7387 (%)&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>\u9a8c\u8bc1\u96c6&lt;\/td>&lt;td>\u6d4b\u8bd5\u96c6&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>ResNet-50&lt;\/td>&lt;td>94.2&lt;\/td>&lt;td>92.8&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>DenseNet-121&lt;\/td>&lt;td>95.1&lt;\/td>&lt;td>93.6&lt;\/td>&lt;\/tr>\n&lt;\/table>\n\n\u8868 1 \u4e0d\u540c\u6a21\u578b\u5728\u533b\u5b66\u5f71\u50cf\u6570\u636e\u96c6\u4e0a\u7684\u6027\u80fd\u5bf9\u6bd4\n\n\u635f\u5931\u51fd\u6570\u5b9a\u4e49\u4e3a\uff1a\n\n$$\nL = -\\frac{1}{N} \\sum_{i=1}^{N} \\left&#91; y_i \\log(\\hat{y}_i) + (1-y_i) \\log(1-\\hat{y}_i) \\right]\n$$\n\n\u5176\u4e2d $N$ \u4e3a\u6837\u672c\u6570\u91cf\uff0c$y_i$ \u4e3a\u771f\u5b9e\u6807\u7b7e\uff0c$\\hat{y}_i$ \u4e3a\u9884\u6d4b\u6982\u7387\u3002\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u8981\u70b9\uff1a<\/strong> \u6807\u9898\u5c42\u7ea7\u4fdd\u7559\u3001\u8868\u683c\u4ee5 HTML \u5d4c\u5165 Markdown\u3001\u516c\u5f0f\u8f6c\u4e3a LaTeX\uff08\u884c\u95f4 <code>$$...$$<\/code>\uff0c\u884c\u5185 <code>$...$<\/code>\uff09\u3001\u9605\u8bfb\u987a\u5e8f\u6b63\u786e\u3001\u56fe\u7247\u63d0\u53d6\u5230 <code>images\/<\/code> \u76ee\u5f55\u5e76\u5728 Markdown \u4e2d\u5f15\u7528\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.5 \u8868\u683c\u8bc6\u522b\u8be6\u89e3<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.5.1 \u8868\u683c\u8bc6\u522b\u6280\u672f\u539f\u7406<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">MinerU \u7684\u8868\u683c\u8bc6\u522b\u4e0d\u662f OCR \u540e\u6b63\u5219\u5339\u914d\uff0c\u800c\u662f\u6a21\u578b\u7ea7\u7ed3\u6784\u7406\u89e3\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PDF \u9875\u9762\n  \u2192 \u7248\u9762\u5206\u6790\uff08\u8bc6\u522b\u8868\u683c\u533a\u57df bbox\uff09\n  \u2192 TableStructureRec \u6a21\u578b\uff08\u8868\u683c\u7ed3\u6784\u8bc6\u522b\uff09\n  \u2192 \u8f93\u51fa HTML &lt;table> \u7ed3\u6784\uff08\u542b rowspan\/colspan\uff09\n  \u2192 \u81ea\u52a8\u63d0\u53d6\u8868\u683c\u6807\u9898\uff08table_caption\uff09\u548c\u811a\u6ce8\uff08table_footnote\uff09\n  \u2192 \u8de8\u9875\u8868\u683c\u81ea\u52a8\u5408\u5e76<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6838\u5fc3\u6280\u672f\u7ec4\u4ef6\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TableStructureRec<\/strong>\uff08\u6765\u81ea RapidAI\uff09\uff1a\u8868\u683c\u7ed3\u6784\u8bc6\u522b\u6a21\u578b\uff0c\u5c06\u8868\u683c\u56fe\u7247\u8f6c\u4e3a HTML \u7ed3\u6784<\/li>\n\n\n\n<li><strong>\u8de8\u9875\u8868\u683c\u5408\u5e76<\/strong>\uff1aMinerU2.5-Pro-2604+ \u6a21\u578b\u652f\u6301\uff0c\u81ea\u52a8\u68c0\u6d4b\u5e76\u5408\u5e76\u8de8\u9875\u7684\u8868\u683c<\/li>\n\n\n\n<li><strong>\u8868\u683c\u5185\u56fe\u7247\u8bc6\u522b<\/strong>\uff1a\u8bc6\u522b\u8868\u683c\u5355\u5143\u683c\u4e2d\u7684\u56fe\u7247\u5185\u5bb9<\/li>\n\n\n\n<li><strong>\u8868\u683c\u5185\u516c\u5f0f\u89e3\u6790<\/strong>\uff1a\u8bc6\u522b\u8868\u683c\u5355\u5143\u683c\u4e2d\u7684\u6570\u5b66\u516c\u5f0f\u5e76\u8f6c\u4e3a LaTeX<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.5.2 \u8868\u683c\u8f93\u51fa\u683c\u5f0f<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5728 content_list.json \u4e2d\u7684\u8868\u793a\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"type\": \"table\",\n    \"img_path\": \"images\/e3cb4133.jpg\",\n    \"table_caption\": &#91;\n        \"Table 2 Significance of the rainfall and time terms\"\n    ],\n    \"table_footnote\": &#91;\n        \"* indicates that the rainfall term was significant at the 0.05 level\"\n    ],\n    \"table_body\": \"&lt;html>&lt;body>&lt;table>&lt;tr>&lt;td rowspan=\\\"2\\\">Site&lt;\/td>&lt;td colspan=\\\"10\\\">Percentile&lt;\/td>&lt;\/tr>&lt;tr>&lt;td>10&lt;\/td>&lt;td>20&lt;\/td>&lt;td>30&lt;\/td>&lt;td>40&lt;\/td>&lt;td>50&lt;\/td>&lt;td>60&lt;\/td>&lt;td>70&lt;\/td>&lt;td>80&lt;\/td>&lt;td>90&lt;\/td>&lt;td>100&lt;\/td>&lt;\/tr>&lt;tr>&lt;td>Traralgon Ck&lt;\/td>&lt;td>P&lt;\/td>&lt;td>P,*&lt;\/td>&lt;td>P&lt;\/td>&lt;td>P&lt;\/td>&lt;td>P&lt;\/td>&lt;td>P&lt;\/td>&lt;td>P,*&lt;\/td>&lt;td>P,*&lt;\/td>&lt;td>P,*&lt;\/td>&lt;td>P,*&lt;\/td>&lt;\/tr>&lt;\/table>&lt;\/body>&lt;\/html>\",\n    \"bbox\": &#91;62, 480, 946, 904],\n    \"page_idx\": 5\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5b57\u6bb5\u8bf4\u660e\uff1a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u5b57\u6bb5<\/td><td>\u8bf4\u660e<\/td><\/tr><tr><td><code>type<\/code><\/td><td>\u56fa\u5b9a\u4e3a <code>\"table\"<\/code><\/td><\/tr><tr><td><code>img_path<\/code><\/td><td>\u8868\u683c\u533a\u57df\u622a\u56fe\u8def\u5f84<\/td><\/tr><tr><td><code>table_caption<\/code><\/td><td>\u8868\u683c\u6807\u9898\u6587\u672c\u5217\u8868<\/td><\/tr><tr><td><code>table_footnote<\/code><\/td><td>\u8868\u683c\u811a\u6ce8\u6587\u672c\u5217\u8868<\/td><\/tr><tr><td><code>table_body<\/code><\/td><td>HTML \u683c\u5f0f\u7684\u8868\u683c\u5185\u5bb9\uff0c\u652f\u6301 <code>rowspan<\/code>\/<code>colspan<\/code><\/td><\/tr><tr><td><code>bbox<\/code><\/td><td>\u8fb9\u754c\u6846\u5750\u6807\uff0c\u5f52\u4e00\u5316\u5230 0-1000 \u8303\u56f4<\/td><\/tr><tr><td><code>page_idx<\/code><\/td><td>\u6240\u5728\u9875\u7801\uff080-based\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5728 content_list_v2.json \u4e2d\u7684\u8868\u793a\uff083.0+ \u7edf\u4e00\u683c\u5f0f\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"type\": \"table\",\n    \"content\": {\n        \"table_body\": \"&lt;html>&lt;body>&lt;table>...&lt;\/table>&lt;\/body>&lt;\/html>\",\n        \"table_caption\": &#91;\"Table 1 \u6027\u80fd\u5bf9\u6bd4\"],\n        \"table_footnote\": &#91;\"\u6ce8\uff1a\u6570\u636e\u6765\u6e90\u4e8e\u5b9e\u9a8c\u73af\u5883\"],\n        \"img_path\": \"images\/table_001.jpg\"\n    },\n    \"bbox\": &#91;62, 480, 946, 904]\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.5.3 \u8868\u683c\u8bc6\u522b\u5b9e\u9645\u573a\u666f\u6848\u4f8b<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u573a\u666f\u4e00\uff1a\u7b80\u5355\u8868\u683c<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u59cb PDF \u4e2d\u7684\u8868\u683c\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u6a21\u578b<\/td><td>\u51c6\u786e\u7387<\/td><td>F1<\/td><\/tr><tr><td>BERT<\/td><td>92.1<\/td><td>91.5<\/td><\/tr><tr><td>RoBERTa<\/td><td>93.5<\/td><td>92.8<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">MinerU \u8f93\u51fa\u7684 HTML\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html>&lt;body>&lt;table>\n&lt;tr>&lt;td>\u6a21\u578b&lt;\/td>&lt;td>\u51c6\u786e\u7387&lt;\/td>&lt;td>F1&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>BERT&lt;\/td>&lt;td>92.1&lt;\/td>&lt;td>91.5&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>RoBERTa&lt;\/td>&lt;td>93.5&lt;\/td>&lt;td>92.8&lt;\/td>&lt;\/tr>\n&lt;\/table>&lt;\/body>&lt;\/html><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u573a\u666f\u4e8c\uff1a\u5408\u5e76\u5355\u5143\u683c\u8868\u683c<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u59cb PDF \u4e2d\u5e26\u6709\u8de8\u884c\u8de8\u5217\u7684\u8868\u683c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html>&lt;body>&lt;table>\n&lt;tr>&lt;td rowspan=\"2\">\u65b9\u6cd5&lt;\/td>&lt;td colspan=\"2\">\u6570\u636e\u96c6 A&lt;\/td>&lt;td colspan=\"2\">\u6570\u636e\u96c6 B&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>Precision&lt;\/td>&lt;td>Recall&lt;\/td>&lt;td>Precision&lt;\/td>&lt;td>Recall&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>CNN&lt;\/td>&lt;td>0.85&lt;\/td>&lt;td>0.82&lt;\/td>&lt;td>0.78&lt;\/td>&lt;td>0.75&lt;\/td>&lt;\/tr>\n&lt;tr>&lt;td>Transformer&lt;\/td>&lt;td>0.91&lt;\/td>&lt;td>0.89&lt;\/td>&lt;td>0.86&lt;\/td>&lt;td>0.83&lt;\/td>&lt;\/tr>\n&lt;\/table>&lt;\/body>&lt;\/html><\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><code>rowspan=\"2\"<\/code> \u548c <code>colspan=\"2\"<\/code> \u88ab\u6b63\u786e\u8bc6\u522b\uff0c\u8868\u5934\u5c42\u7ea7\u7ed3\u6784\u5b8c\u6574\u4fdd\u7559\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u573a\u666f\u4e09\uff1a\u8de8\u9875\u8868\u683c<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u7bc7\u8bba\u6587\u4e2d\u7684\u5927\u578b\u8868\u683c\u8de8\u8d8a\u7b2c 3 \u9875\u548c\u7b2c 4 \u9875\u3002MinerU2.5-Pro-2604+ \u6a21\u578b\u81ea\u52a8\u68c0\u6d4b\u8de8\u9875\u8868\u683c\u5e76\u5408\u5e76\u4e3a\u5355\u4e2a\u5b8c\u6574\u8868\u683c\uff0c\u8f93\u51fa\u5728\u8868\u683c\u7ed3\u675f\u9875\u5bf9\u5e94\u7684 content_list \u6761\u76ee\u4e2d\uff0c<code>table_caption<\/code> \u548c <code>table_footnote<\/code> \u5206\u522b\u4ece\u4e0a\u4e0b\u6587\u63d0\u53d6\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u573a\u666f\u56db\uff1a\u8868\u683c\u5185\u542b\u516c\u5f0f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u59cb\u8868\u683c\u5355\u5143\u683c\u4e2d\u5305\u542b\u6570\u5b66\u516c\u5f0f\uff08\u5982 <code>\\alpha + \\beta = 1<\/code>\uff09\uff0cMinerU \u4f1a\u5c06\u516c\u5f0f\u90e8\u5206\u8f6c\u4e3a LaTeX\uff0c\u5d4c\u5165 HTML \u8868\u683c\u5355\u5143\u683c\u4e2d\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;tr>&lt;td>\u7ea6\u675f\u6761\u4ef6&lt;\/td>&lt;td>$\\alpha + \\beta = 1$&lt;\/td>&lt;\/tr><\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.5.4 \u8868\u683c\u8bc6\u522b\u5f00\u5173\u4e0e\u8c03\u4f18<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u901a\u8fc7 CLI \u53c2\u6570\u63a7\u5236\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5173\u95ed\u8868\u683c\u8bc6\u522b\uff08\u4ec5\u63d0\u53d6\u6587\u672c\uff09\nmineru -p input.pdf -o output\/ -t false\n\n# \u786e\u4fdd\u8868\u683c\u8bc6\u522b\u5f00\u542f\uff08\u9ed8\u8ba4\u5df2\u5f00\u542f\uff09\nmineru -p input.pdf -o output\/ -t true\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u63a7\u5236\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5173\u95ed\u8868\u683c\u8bc6\u522b\nexport MINERU_TABLE_ENABLE=false\n\n# \u5173\u95ed\u8868\u683c\u5408\u5e76\u529f\u80fd\uff08\u8de8\u9875\u8868\u683c\u4e0d\u5408\u5e76\uff09\nexport MINERU_TABLE_MERGE_ENABLE=false<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8c03\u4f18\u5efa\u8bae\uff1a<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u573a\u666f<\/td><td>\u63a8\u8350\u914d\u7f6e<\/td><\/tr><tr><td>\u8868\u683c\u5bc6\u96c6\u578b\u6587\u6863\uff08\u8d22\u62a5\u3001\u8bba\u6587\uff09<\/td><td><code>hybrid-engine --effort high<\/code>\uff0c\u8868\u683c\u5408\u5e76\u5f00\u542f<\/td><\/tr><tr><td>\u65e0\u8868\u683c\u6587\u6863\uff08\u7eaf\u6587\u672c\u62a5\u544a\uff09<\/td><td><code>-t false<\/code> \u5173\u95ed\u8868\u683c\u8bc6\u522b\uff0c\u63d0\u5347\u901f\u5ea6<\/td><\/tr><tr><td>\u626b\u63cf\u4ef6\u8868\u683c<\/td><td><code>-b hybrid-engine -m ocr<\/code>\uff0cOCR + VLM \u53cc\u5f15\u64ce<\/td><\/tr><tr><td>\u8d85\u5927\u8868\u683c\u8de8\u9875<\/td><td>\u786e\u4fdd <code>MINERU_TABLE_MERGE_ENABLE=true<\/code>\uff08\u9ed8\u8ba4\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.6 Python SDK \u8c03\u7528\u793a\u4f8b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u540c\u6b65\u89e3\u6790\uff08\u901a\u8fc7\u672c\u5730 API \u670d\u52a1\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import subprocess\nimport requests\nimport json\nimport os\n\n# \u542f\u52a8\u672c\u5730 mineru-api \u670d\u52a1\uff08\u6216\u624b\u52a8\u8fd0\u884c mineru-api --port 8000\uff09\n# \u65b9\u5f0f\u4e00\uff1a\u76f4\u63a5\u4f7f\u7528 CLI\n# subprocess.run(&#91;\"mineru\", \"-p\", \"input.pdf\", \"-o\", \"output\/\"])\n\n# \u65b9\u5f0f\u4e8c\uff1a\u901a\u8fc7 API \u8c03\u7528\n# 1. \u63d0\u4ea4\u5f02\u6b65\u4efb\u52a1\nwith open(\"input.pdf\", \"rb\") as f:\n    response = requests.post(\n        \"http:\/\/127.0.0.1:8000\/tasks\",\n        files={\"files\": f},\n        data={\"return_md\": \"true\"}\n    )\n    task_id = response.json()&#91;\"task_id\"]\n    print(f\"Task submitted: {task_id}\")\n\n# 2. \u8f6e\u8be2\u4efb\u52a1\u72b6\u6001\nimport time\nwhile True:\n    status_resp = requests.get(f\"http:\/\/127.0.0.1:8000\/tasks\/{task_id}\")\n    status = status_resp.json()\n    if status&#91;\"status\"] == \"completed\":\n        break\n    elif status&#91;\"status\"] == \"failed\":\n        print(f\"Task failed: {status}\")\n        exit(1)\n    time.sleep(2)\n\n# 3. \u83b7\u53d6\u7ed3\u679c\nresult = requests.get(f\"http:\/\/127.0.0.1:8000\/tasks\/{task_id}\/result\")\nprint(f\"Result: {json.dumps(result.json(), indent=2, ensure_ascii=False)}\")\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u540c\u6b65\u89e3\u6790\uff08\u517c\u5bb9\u65e7\u63a5\u53e3\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import requests\n\n# POST \/file_parse \u4f1a\u7b49\u5f85\u4efb\u52a1\u5b8c\u6210\u5e76\u540c\u6b65\u8fd4\u56de\u7ed3\u679c\nwith open(\"input.pdf\", \"rb\") as f:\n    response = requests.post(\n        \"http:\/\/127.0.0.1:8000\/file_parse\",\n        files={\"files\": f},\n        data={\n            \"return_md\": \"true\",           # \u8fd4\u56de Markdown\n            \"response_format_zip\": \"true\",  # \u4ee5 ZIP \u683c\u5f0f\u8fd4\u56de\n            \"return_original_file\": \"true\"  # \u5305\u542b\u539f\u59cb\u6587\u4ef6\n        }\n    )\n\n    # \u7ed3\u679c\u4fdd\u5b58\u5230\u672c\u5730\n    with open(\"result.zip\", \"wb\") as out:\n        out.write(response.content)\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8bfb\u53d6\u89e3\u6790\u7ed3\u679c\u5e76\u63d0\u53d6\u8868\u683c\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import json\n\n# \u8bfb\u53d6 content_list.json\nwith open(\"output\/auto\/input_content_list.json\", \"r\", encoding=\"utf-8\") as f:\n    content_list = json.load(f)\n\n# \u63d0\u53d6\u6240\u6709\u8868\u683c\ntables = &#91;item for item in content_list if item.get(\"type\") == \"table\"]\n\nfor i, table in enumerate(tables):\n    print(f\"\\n=== \u8868\u683c {i+1} ===\")\n    print(f\"\u6807\u9898: {table.get('table_caption', '\u65e0')}\")\n    print(f\"\u811a\u6ce8: {table.get('table_footnote', '\u65e0')}\")\n    print(f\"HTML:\\n{table.get('table_body', '\u65e0')}\")\n    print(f\"\u9875\u7801: {table.get('page_idx', '\u672a\u77e5')}\")\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.7 API \u670d\u52a1\u90e8\u7f72<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5355\u673a\u90e8\u7f72\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u542f\u52a8 FastAPI \u670d\u52a1\nmineru-api --host 0.0.0.0 --port 8000\n\n# \u9884\u52a0\u8f7d VLM \u6a21\u578b\uff08\u907f\u514d\u9996\u6b21\u8bf7\u6c42\u5ef6\u8fdf\uff09\nmineru-api --host 0.0.0.0 --port 8000 --enable-vlm-preload true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u591a GPU \u8d1f\u8f7d\u5747\u8861\u90e8\u7f72\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u542f\u52a8 router\uff0c\u81ea\u52a8\u7ba1\u7406\u672c\u5730 GPU workers\nmineru-router --host 0.0.0.0 --port 8002 --local-gpus auto\n\n# \u6216\u805a\u5408\u591a\u4e2a\u5df2\u6709 mineru-api \u670d\u52a1\nmineru-router --host 0.0.0.0 --port 8002 \\\n  --upstream-url http:\/\/192.168.1.101:8000 \\\n  --upstream-url http:\/\/192.168.1.102:8000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpenAI \u517c\u5bb9\u670d\u52a1\uff08\u8fdc\u7a0b VLM \u63a8\u7406\uff09\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u7ec8\u7aef 1\uff1a\u542f\u52a8 OpenAI \u517c\u5bb9\u670d\u52a1\uff08\u9700\u8981 vllm \u6216 lmdeploy\uff09\nmineru-openai-server --port 30000\n\n# \u7ec8\u7aef 2\uff1a\u901a\u8fc7 http-client \u8fde\u63a5\nmineru -p input.pdf -o output\/ -b hybrid-http-client -u http:\/\/127.0.0.1:30000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gradio WebUI\uff1a<\/strong><br>mineru-gradio &#8211;server-name 0.0.0.0 &#8211;server-port 7860<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.8 \u6027\u80fd\u8c03\u4f18\u5efa\u8bae<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u8c03\u4f18\u7ef4\u5ea6<\/td><td>\u53c2\u6570\/\u914d\u7f6e<\/td><td>\u8bf4\u660e<\/td><\/tr><tr><td><strong>\u7cbe\u5ea6\u4f18\u5148<\/strong><\/td><td><code>-b hybrid-engine --effort high<\/code><\/td><td>OmniDocBench 95.39 \u5206\uff0c\u6700\u9ad8\u7cbe\u5ea6<\/td><\/tr><tr><td><strong>\u901f\u5ea6\u4f18\u5148<\/strong><\/td><td><code>-b hybrid-engine --effort medium<\/code><\/td><td>\u7cbe\u5ea6\u4ec5\u964d 0.13\uff0c\u901f\u5ea6\u63d0\u5347 35-220%<\/td><\/tr><tr><td><strong>CPU \u73af\u5883<\/strong><\/td><td><code>-b pipeline<\/code><\/td><td>\u7eaf CPU \u53ef\u8dd1\uff0c86.47 \u5206<\/td><\/tr><tr><td><strong>\u957f\u6587\u6863<\/strong><\/td><td><code>MINERU_PROCESSING_WINDOW_SIZE=64<\/code><\/td><td>\u6ed1\u52a8\u7a97\u53e3\u5927\u5c0f\uff0c\u589e\u5927\u63d0\u5347\u541e\u5410\u4f46\u589e\u52a0\u5185\u5b58<\/td><\/tr><tr><td><strong>\u5e76\u53d1\u5904\u7406<\/strong><\/td><td><code>MINERU_API_MAX_CONCURRENT_REQUESTS=3<\/code><\/td><td>API \u670d\u52a1\u6700\u5927\u5e76\u53d1\u6570\uff0c\u6309 GPU \u663e\u5b58\u8c03\u6574<\/td><\/tr><tr><td><strong>PDF \u6e32\u67d3<\/strong><\/td><td><code>MINERU_PDF_RENDER_THREADS=4<\/code><\/td><td>PDF \u6e32\u67d3\u7ebf\u7a0b\u6570\uff0c\u6309 CPU \u6838\u6570\u8c03\u6574<\/td><\/tr><tr><td><strong>\u6e32\u67d3\u8d85\u65f6<\/strong><\/td><td><code>MINERU_PDF_RENDER_TIMEOUT=300<\/code><\/td><td>PDF \u6e32\u67d3\u8d85\u65f6\uff08\u79d2\uff09\uff0c\u8d85\u5927\u6587\u4ef6\u9700\u589e\u5927<\/td><\/tr><tr><td><strong>hybrid \u663e\u5b58<\/strong><\/td><td><code>MINERU_HYBRID_BATCH_RATIO=4<\/code><\/td><td>VLM \u6279\u5904\u7406\u6bd4\u4f8b\uff0c\u663e\u5b58\u4e0d\u8db3\u65f6\u964d\u4f4e<\/td><\/tr><tr><td><strong>\u5173\u95ed\u65e0\u7528\u529f\u80fd<\/strong><\/td><td><code>-f false<\/code>\uff08\u5173\u95ed\u516c\u5f0f\uff09\/ <code>-t false<\/code>\uff08\u5173\u95ed\u8868\u683c\uff09<\/td><td>\u65e0\u516c\u5f0f\/\u8868\u683c\u7684\u6587\u6863\u53ef\u52a0\u901f<\/td><\/tr><tr><td><strong>OCR \u4f18\u5316<\/strong><\/td><td><code>-l ch<\/code>\uff08\u6307\u5b9a\u8bed\u8a00\uff09<\/td><td>\u4ec5 pipeline \u540e\u7aef\uff0c\u6307\u5b9a\u8bed\u8a00\u63d0\u5347 OCR \u7cbe\u5ea6<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u751f\u4ea7\u73af\u5883\u63a8\u8350\u914d\u7f6e\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5178\u578b\u751f\u4ea7\u90e8\u7f72\uff1ahybrid-engine + medium effort + 8GB VRAM GPU\nexport MINERU_MODEL_SOURCE=modelscope\nexport MINERU_PROCESSING_WINDOW_SIZE=64\nexport MINERU_API_MAX_CONCURRENT_REQUESTS=3\n\nmineru-api --host 0.0.0.0 --port 8000 --enable-vlm-preload true<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u90e8\u5206\uff1a\u8868\u683c\u8bc6\u522b\u4e13\u9879\u89e3\u6790<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u8868\u683c\u8bc6\u522b\u6280\u672f\u6808\u5168\u666f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MinerU \u7684\u8868\u683c\u8bc6\u522b\u80fd\u529b\u7531\u4ee5\u4e0b\u6280\u672f\u7ec4\u4ef6\u534f\u540c\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u8f93\u5165 PDF\n  \u2502\n  \u251c\u2500 pypdfium2 \u2192 PDF \u9875\u9762\u6e32\u67d3\u4e3a\u56fe\u50cf\n  \u2502\n  \u251c\u2500 \u7248\u9762\u5206\u6790\u6a21\u578b \u2192 \u8bc6\u522b\u8868\u683c\u533a\u57df\uff08bbox\uff09\n  \u2502\n  \u251c\u2500 TableStructureRec\uff08RapidAI\uff09\u2192 \u8868\u683c\u7ed3\u6784\u8bc6\u522b\n  \u2502    \u251c\u2500 \u884c\u5217\u7ed3\u6784\u68c0\u6d4b\n  \u2502    \u251c\u2500 \u5408\u5e76\u5355\u5143\u683c\u8bc6\u522b\uff08rowspan\/colspan\uff09\n  \u2502    \u2514\u2500 \u8f93\u51fa HTML &lt;table> \u7ed3\u6784\n  \u2502\n  \u251c\u2500 PP-OCRv6\uff08PaddleOCR\uff09\u2192 \u8868\u683c\u5185\u6587\u5b57\u8bc6\u522b\n  \u2502    \u2514\u2500 \u652f\u6301 109 \u79cd\u8bed\u8a00\n  \u2502\n  \u251c\u2500 UniMERNet \u2192 \u8868\u683c\u5185\u516c\u5f0f\u8bc6\u522b\n  \u2502    \u2514\u2500 \u8f93\u51fa LaTeX\n  \u2502\n  \u251c\u2500 MinerU2.5-Pro VLM \u2192 \u8de8\u9875\u8868\u683c\u5408\u5e76 + \u8868\u683c\u5185\u56fe\u7247\u8bc6\u522b\n  \u2502\n  \u2514\u2500 \u4e0a\u4e0b\u6587\u63d0\u53d6 \u2192 table_caption + table_footnote<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 \u5404\u540e\u7aef\u8868\u683c\u8bc6\u522b\u80fd\u529b\u5bf9\u6bd4<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u80fd\u529b<\/td><td>pipeline<\/td><td>vlm-engine<\/td><td>hybrid-engine<\/td><\/tr><tr><td>\u57fa\u7840\u8868\u683c\u7ed3\u6784\u8bc6\u522b<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><\/tr><tr><td>\u5408\u5e76\u5355\u5143\u683c\uff08rowspan\/colspan\uff09<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><\/tr><tr><td>\u8868\u683c\u6807\u9898\/\u811a\u6ce8\u63d0\u53d6<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><\/tr><tr><td>\u8de8\u9875\u8868\u683c\u5408\u5e76<\/td><td>\u4e0d\u652f\u6301<\/td><td>\u652f\u6301\uff082604+\uff09<\/td><td>\u652f\u6301\uff082604+\uff09<\/td><\/tr><tr><td>\u8868\u683c\u5185\u56fe\u7247\u8bc6\u522b<\/td><td>\u4e0d\u652f\u6301<\/td><td>\u652f\u6301\uff082604+\uff09<\/td><td>\u652f\u6301\uff082604+\uff09<\/td><\/tr><tr><td>\u8868\u683c\u5185\u516c\u5f0f\u8bc6\u522b<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><td>\u652f\u6301<\/td><\/tr><tr><td>\u7eaf CPU \u8fd0\u884c<\/td><td>\u652f\u6301<\/td><td>\u4e0d\u652f\u6301<\/td><td>\u4e0d\u652f\u6301<\/td><\/tr><tr><td>\u5e7b\u89c9\u98ce\u9669<\/td><td>\u65e0<\/td><td>\u6709\uff08VLM \u751f\u6210\uff09<\/td><td>\u4f4e\uff08\u539f\u751f\u6587\u672c\u63d0\u53d6\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 \u8868\u683c\u8bc6\u522b\u8f93\u51fa\u5728\u4e0d\u540c\u683c\u5f0f\u4e2d\u7684\u5dee\u5f02<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Markdown \u8f93\u51fa\uff08.md \u6587\u4ef6\uff09\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8868\u683c\u4ee5 HTML <code>&lt;table><\/code> \u6807\u7b7e\u5d4c\u5165 Markdown<\/li>\n\n\n\n<li>\u8868\u683c\u6807\u9898\u548c\u811a\u6ce8\u4ee5\u666e\u901a\u6587\u672c\u51fa\u73b0\u5728\u8868\u683c\u524d\u540e<\/li>\n\n\n\n<li>\u9002\u5408\u76f4\u63a5\u7528\u4e8e LLM \u4e0a\u4e0b\u6587\u6216 RAG \u6587\u6863\u5e93<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>content_list.json\uff08\u7b80\u5316\u7248\uff0c\u6309\u9605\u8bfb\u987a\u5e8f\uff09\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bcf\u4e2a\u8868\u683c\u662f\u4e00\u4e2a\u72ec\u7acb JSON \u5bf9\u8c61<\/li>\n\n\n\n<li><code>table_body<\/code> \u5b57\u6bb5\u5b58\u50a8 HTML<\/li>\n\n\n\n<li><code>table_caption<\/code> \u548c <code>table_footnote<\/code> \u4e3a\u5b57\u7b26\u4e32\u5217\u8868<\/li>\n\n\n\n<li>\u9002\u5408\u7a0b\u5e8f\u5316\u5904\u7406\u548c\u4e8c\u6b21\u5f00\u53d1<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>middle.json\uff08\u5b8c\u6574\u7ed3\u6784\u5316\u6570\u636e\uff09\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8868\u683c\u4f5c\u4e3a <code>para_blocks<\/code> \u4e2d\u7684 <code>table<\/code> \u7c7b\u578b\u5757<\/li>\n\n\n\n<li>\u5305\u542b <code>table_body<\/code>\u3001<code>table_caption<\/code>\u3001<code>table_footnote<\/code> \u4e8c\u7ea7\u5757<\/li>\n\n\n\n<li>\u4fdd\u7559\u5b8c\u6574 bbox \u5750\u6807\u548c\u5c42\u7ea7\u5173\u7cfb<\/li>\n\n\n\n<li>\u9002\u5408\u9700\u8981\u7cbe\u786e\u7248\u9762\u4f4d\u7f6e\u4fe1\u606f\u7684\u573a\u666f<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>content_list_v2.json\uff083.0+ \u7edf\u4e00\u683c\u5f0f\uff09\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 <code>type + content<\/code> \u7edf\u4e00\u7ed3\u6784<\/li>\n\n\n\n<li>\u6240\u6709\u540e\u7aef\u5747\u751f\u6210\u6b64\u6587\u4ef6<\/li>\n\n\n\n<li>\u9002\u5408\u8de8\u540e\u7aef\u7684\u7edf\u4e00\u6570\u636e\u5904\u7406\u6d41\u7a0b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 \u5e38\u89c1\u8868\u683c\u8bc6\u522b\u95ee\u9898\u4e0e\u6392\u67e5<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>\u95ee\u9898<\/td><td>\u53ef\u80fd\u539f\u56e0<\/td><td>\u89e3\u51b3\u65b9\u6848<\/td><\/tr><tr><td>\u8868\u683c\u672a\u88ab\u8bc6\u522b<\/td><td>\u7248\u9762\u5206\u6790\u672a\u68c0\u6d4b\u5230\u8868\u683c\u533a\u57df<\/td><td>\u5207\u6362 vlm-engine \u6216 hybrid-engine \u540e\u7aef<\/td><\/tr><tr><td>\u8868\u683c\u7ed3\u6784\u9519\u8bef<\/td><td>TableStructureRec \u6a21\u578b\u5bf9\u590d\u6742\u8868\u683c\u8bc6\u522b\u4e0d\u51c6<\/td><td>\u4f7f\u7528 <code>--effort high<\/code> \u63d0\u5347\u7cbe\u5ea6<\/td><\/tr><tr><td>\u8de8\u9875\u8868\u683c\u672a\u5408\u5e76<\/td><td>VLM \u6a21\u578b\u7248\u672c\u8fc7\u4f4e\u6216\u540e\u7aef\u4e0d\u652f\u6301<\/td><td>\u786e\u4fdd vlm-engine\/hybrid-engine + MinerU2.5-Pro-2604+<\/td><\/tr><tr><td>\u8868\u683c\u5185\u6587\u5b57\u4e22\u5931<\/td><td>OCR \u672a\u6b63\u786e\u8bc6\u522b<\/td><td>\u6307\u5b9a\u8bed\u8a00 <code>-l ch<\/code> \u6216\u5207\u6362 hybrid-engine<\/td><\/tr><tr><td>\u8868\u683c\u5185\u516c\u5f0f\u672a\u8f6c\u6362<\/td><td>\u516c\u5f0f\u89e3\u6790\u672a\u542f\u7528<\/td><td>\u786e\u4fdd <code>-f true<\/code>\uff08\u9ed8\u8ba4\u542f\u7528\uff09<\/td><\/tr><tr><td>\u8868\u683c HTML \u683c\u5f0f\u4e0d\u89c4\u8303<\/td><td>\u6a21\u578b\u8f93\u51fa\u5f02\u5e38<\/td><td>\u68c0\u67e5 <code>layout.pdf<\/code> \u53ef\u89c6\u5316\u786e\u8ba4\u8868\u683c\u533a\u57df<\/td><\/tr><tr><td>\u8f93\u51fa\u65e0\u8868\u683c<\/td><td>\u8868\u683c\u8bc6\u522b\u88ab\u5173\u95ed<\/td><td>\u68c0\u67e5 <code>-t<\/code> \u53c2\u6570\u548c <code>MINERU_TABLE_ENABLE<\/code> \u73af\u5883\u53d8\u91cf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2.5 \u4e0e RAG \u6846\u67b6\u96c6\u6210\u793a\u4f8b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e0e LangChain \u96c6\u6210\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from langchain.text_splitter import MarkdownHeaderTextSplitter\nimport json\n\n# 1. \u4f7f\u7528 MinerU \u89e3\u6790 PDF \u5f97\u5230 Markdown\n# mineru -p paper.pdf -o output\/ -b hybrid-engine --effort high\n\n# 2. \u8bfb\u53d6 Markdown\nwith open(\"output\/auto\/paper.md\", \"r\", encoding=\"utf-8\") as f:\n    markdown_content = f.read()\n\n# 3. \u6309\u6807\u9898\u5c42\u7ea7\u5207\u5206\nheader_splitter = MarkdownHeaderTextSplitter(\n    headers_to_split_on=&#91;\n        (\"#\", \"Header 1\"),\n        (\"##\", \"Header 2\"),\n        (\"###\", \"Header 3\"),\n    ]\n)\nchunks = header_splitter.split_text(markdown_content)\n\n# 4. \u8868\u683c\u4f5c\u4e3a\u72ec\u7acb chunk \u4fdd\u7559\uff08HTML \u683c\u5f0f\u53ef\u76f4\u63a5\u88ab LLM \u7406\u89e3\uff09\nfor chunk in chunks:\n    print(f\"Section: {chunk.metadata}\")\n    print(f\"Content: {chunk.page_content&#91;:200]}...\")\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e0e LlamaIndex \u96c6\u6210\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from llama_index.core import Document, VectorStoreIndex\nimport json\n\n# 1. \u8bfb\u53d6 content_list.json\nwith open(\"output\/auto\/paper_content_list.json\", \"r\", encoding=\"utf-8\") as f:\n    content_list = json.load(f)\n\n# 2. \u5c06\u6bcf\u4e2a\u5185\u5bb9\u5757\u8f6c\u4e3a Document\ndocuments = &#91;]\nfor item in content_list:\n    if item&#91;\"type\"] == \"text\":\n        documents.append(Document(text=item&#91;\"content\"]))\n    elif item&#91;\"type\"] == \"table\":\n        # \u8868\u683c\u4ee5 HTML \u683c\u5f0f\u4f5c\u4e3a\u6587\u6863\n        table_text = f\"\u8868\u683c\u6807\u9898: {item.get('table_caption', '')}\\n\"\n        table_text += f\"\u8868\u683c\u5185\u5bb9: {item&#91;'table_body']}\\n\"\n        table_text += f\"\u811a\u6ce8: {item.get('table_footnote', '')}\"\n        documents.append(Document(text=table_text))\n\n# 3. \u6784\u5efa\u7d22\u5f15\nindex = VectorStoreIndex.from_documents(documents)\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"709\" src=\"https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-12-1024x709.png\" alt=\"\" class=\"wp-image-2153\" srcset=\"https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-12-1024x709.png 1024w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-12-300x208.png 300w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-12-767x531.png 767w, https:\/\/www.puzi7.net\/wp-content\/uploads\/2026\/08\/image-12.png 1181w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<span>","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\"><span itemprop=\"description\">\u505a RAG \u6700\u5934\u75bc\u7684\u4e0d\u662f\u5411\u91cf\u68c0\u7d22\uff0c\u662f PDF \u89e3\u6790\u3002\u8868\u683c\u53d8\u4e71\u7801\u3001\u516c\u5f0f\u53d8\u56fe\u7247\u3001\u591a\u680f\u8bfb\u6210\u4e00\u6761\u7ebf&hellip;<\/span><\/p>\n<p class=\"more-link-p btn-align-right\"><a class=\"green zoom-btn\" href=\"https:\/\/www.puzi7.net\/?p=2148\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":2153,"comment_status":"open","ping_status":"0","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,148,9],"tags":[40,168,169],"class_list":["post-2148","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-skills","category-9","tag-ai","tag-mineru","tag-pdf","zoom-theme-has-thumb"],"_links":{"self":[{"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/posts\/2148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2148"}],"version-history":[{"count":2,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/posts\/2148\/revisions"}],"predecessor-version":[{"id":2156,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/posts\/2148\/revisions\/2156"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=\/wp\/v2\/media\/2153"}],"wp:attachment":[{"href":"https:\/\/www.puzi7.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.puzi7.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}