mineru-next-dev 4.0.0.dev20260625__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mineru/__init__.py +35 -0
- mineru/backend/__init__.py +1 -0
- mineru/backend/flash/__init__.py +1 -0
- mineru/backend/flash/pdf_extractor.py +48 -0
- mineru/backend/hybrid/__init__.py +1 -0
- mineru/backend/hybrid/hybrid_analyze.py +1032 -0
- mineru/backend/hybrid/hybrid_magic_model.py +508 -0
- mineru/backend/hybrid/model_output_to_middle_json.py +170 -0
- mineru/backend/office/__init__.py +1 -0
- mineru/backend/office/docx_analyze.py +60 -0
- mineru/backend/office/model_output_to_middle_json.py +179 -0
- mineru/backend/office/office_magic_model.py +794 -0
- mineru/backend/office/pptx_analyze.py +66 -0
- mineru/backend/office/xlsx_analyze.py +66 -0
- mineru/backend/pipeline/__init__.py +1 -0
- mineru/backend/pipeline/batch_analyze.py +930 -0
- mineru/backend/pipeline/model_init.py +391 -0
- mineru/backend/pipeline/model_list.py +10 -0
- mineru/backend/pipeline/model_output_to_middle_json.py +200 -0
- mineru/backend/pipeline/para_split.py +423 -0
- mineru/backend/pipeline/pipeline_analyze.py +368 -0
- mineru/backend/pipeline/pipeline_magic_model.py +525 -0
- mineru/backend/pipeline/pipeline_middle_json_mkcontent.py +418 -0
- mineru/backend/utils/__init__.py +1 -0
- mineru/backend/utils/boxbase.py +230 -0
- mineru/backend/utils/char_utils.py +55 -0
- mineru/backend/utils/html_image_utils.py +159 -0
- mineru/backend/utils/magic_model_utils.py +185 -0
- mineru/backend/utils/markdown_utils.py +44 -0
- mineru/backend/utils/middle_json_utils.py +108 -0
- mineru/backend/utils/ocr_det_utils.py +60 -0
- mineru/backend/utils/office_chart.py +973 -0
- mineru/backend/utils/office_image.py +199 -0
- mineru/backend/utils/para_block_utils.py +370 -0
- mineru/backend/utils/runtime_utils.py +50 -0
- mineru/backend/utils/span_block_fix.py +152 -0
- mineru/backend/utils/span_pre_proc.py +408 -0
- mineru/backend/utils/table_continuation.py +42 -0
- mineru/backend/utils/table_merge.py +1154 -0
- mineru/backend/utils/visual_magic_model_utils.py +708 -0
- mineru/backend/vlm/__init__.py +1 -0
- mineru/backend/vlm/model_output_to_middle_json.py +99 -0
- mineru/backend/vlm/utils.py +251 -0
- mineru/backend/vlm/vlm_analyze.py +641 -0
- mineru/backend/vlm/vlm_magic_model.py +368 -0
- mineru/backend/vlm/vlm_middle_json_mkcontent.py +366 -0
- mineru/cli/__init__.py +6 -0
- mineru/cli/commands/__init__.py +33 -0
- mineru/cli/commands/cleanup.py +88 -0
- mineru/cli/commands/config.py +199 -0
- mineru/cli/commands/forget.py +43 -0
- mineru/cli/commands/invalidate.py +45 -0
- mineru/cli/commands/list_resources.py +123 -0
- mineru/cli/commands/parse.py +402 -0
- mineru/cli/commands/read.py +54 -0
- mineru/cli/commands/scan.py +74 -0
- mineru/cli/commands/search.py +51 -0
- mineru/cli/commands/server.py +304 -0
- mineru/cli/commands/show.py +95 -0
- mineru/cli/commands/telemetry.py +80 -0
- mineru/cli/commands/watch.py +114 -0
- mineru/cli/json_errors.py +41 -0
- mineru/cli/main.py +210 -0
- mineru/cli/output.py +465 -0
- mineru/cli/path_utils.py +10 -0
- mineru/cli/telemetry.py +117 -0
- mineru/cli_old/__init__.py +1 -0
- mineru/cli_old/api_client.py +1021 -0
- mineru/cli_old/api_protocol.py +4 -0
- mineru/cli_old/api_request.py +215 -0
- mineru/cli_old/client.py +1179 -0
- mineru/cli_old/client_side_output.py +73 -0
- mineru/cli_old/common.py +1012 -0
- mineru/cli_old/fast_api.py +1470 -0
- mineru/cli_old/gradio_app.py +2004 -0
- mineru/cli_old/models_download.py +187 -0
- mineru/cli_old/output_paths.py +58 -0
- mineru/cli_old/public_http_client_policy.py +65 -0
- mineru/cli_old/router.py +1673 -0
- mineru/cli_old/visualization.py +89 -0
- mineru/cli_old/vlm_preload.py +85 -0
- mineru/cli_old/vlm_server.py +62 -0
- mineru/config.py +294 -0
- mineru/data/__init__.py +1 -0
- mineru/data/data_reader_writer/__init__.py +38 -0
- mineru/data/data_reader_writer/base.py +64 -0
- mineru/data/data_reader_writer/dummy.py +12 -0
- mineru/data/data_reader_writer/filebase.py +63 -0
- mineru/data/data_reader_writer/multi_bucket_s3.py +158 -0
- mineru/data/data_reader_writer/s3.py +73 -0
- mineru/data/io/__init__.py +18 -0
- mineru/data/io/base.py +43 -0
- mineru/data/io/http.py +37 -0
- mineru/data/io/s3.py +127 -0
- mineru/data/utils/__init__.py +1 -0
- mineru/data/utils/exceptions.py +40 -0
- mineru/data/utils/path_utils.py +33 -0
- mineru/data/utils/schemas.py +13 -0
- mineru/doclib/__init__.py +1 -0
- mineru/doclib/app.py +557 -0
- mineru/doclib/background/__init__.py +27 -0
- mineru/doclib/background/compaction.py +172 -0
- mineru/doclib/background/device_monitor.py +75 -0
- mineru/doclib/background/ingest.py +133 -0
- mineru/doclib/background/parse_server_health.py +192 -0
- mineru/doclib/background/parse_worker.py +95 -0
- mineru/doclib/background/scan_worker.py +69 -0
- mineru/doclib/background/telemetry_flush.py +40 -0
- mineru/doclib/background/watch.py +171 -0
- mineru/doclib/base.py +796 -0
- mineru/doclib/client.py +528 -0
- mineru/doclib/config_defaults.py +20 -0
- mineru/doclib/constants.py +67 -0
- mineru/doclib/core/__init__.py +17 -0
- mineru/doclib/core/db.py +206 -0
- mineru/doclib/core/file_io.py +166 -0
- mineru/doclib/core/fts.py +148 -0
- mineru/doclib/endpoint.py +114 -0
- mineru/doclib/locators.py +87 -0
- mineru/doclib/migrations/001_init.sql +180 -0
- mineru/doclib/migrations/__init__.py +1 -0
- mineru/doclib/rows.py +278 -0
- mineru/doclib/server.py +2078 -0
- mineru/doclib/services/__init__.py +41 -0
- mineru/doclib/services/cleanup_svc.py +219 -0
- mineru/doclib/services/config_svc.py +271 -0
- mineru/doclib/services/parse_svc.py +1425 -0
- mineru/doclib/services/scan_svc.py +442 -0
- mineru/doclib/services/search_svc.py +154 -0
- mineru/doclib/telemetry/__init__.py +26 -0
- mineru/doclib/telemetry/buckets.py +65 -0
- mineru/doclib/telemetry/caller.py +122 -0
- mineru/doclib/telemetry/constants.py +198 -0
- mineru/doclib/telemetry/context.py +49 -0
- mineru/doclib/telemetry/observation.py +16 -0
- mineru/doclib/telemetry/payload.py +223 -0
- mineru/doclib/telemetry/service.py +271 -0
- mineru/doclib/telemetry/store.py +234 -0
- mineru/doclib/telemetry/transport.py +24 -0
- mineru/doclib/types.py +661 -0
- mineru/doclib/utils/__init__.py +1 -0
- mineru/doclib/utils/route_utils.py +66 -0
- mineru/errors.py +163 -0
- mineru/kit/__init__.py +3 -0
- mineru/kit/commands/__init__.py +5 -0
- mineru/kit/commands/api_server.py +84 -0
- mineru/kit/commands/models.py +186 -0
- mineru/kit/commands/parse.py +92 -0
- mineru/kit/commands/vlm_server.py +26 -0
- mineru/kit/common.py +197 -0
- mineru/kit/errors.py +19 -0
- mineru/kit/main.py +126 -0
- mineru/kit/output.py +7 -0
- mineru/model/__init__.py +1 -0
- mineru/model/docx/__init__.py +1 -0
- mineru/model/docx/docx_converter.py +3315 -0
- mineru/model/docx/main.py +51 -0
- mineru/model/docx/package_normalizer.py +291 -0
- mineru/model/docx/tools/__init__.py +1 -0
- mineru/model/docx/tools/math/__init__.py +1 -0
- mineru/model/docx/tools/math/latex_dict.py +325 -0
- mineru/model/docx/tools/math/omml.py +573 -0
- mineru/model/docx/tools/office_xml.py +56 -0
- mineru/model/layout/__init__.py +1 -0
- mineru/model/layout/pp_doclayoutv2.py +1548 -0
- mineru/model/mfr/__init__.py +1 -0
- mineru/model/mfr/pp_formulanet_plus_m/__init__.py +1 -0
- mineru/model/mfr/pp_formulanet_plus_m/predict_formula.py +211 -0
- mineru/model/mfr/pp_formulanet_plus_m/processors.py +658 -0
- mineru/model/mfr/unimernet/Unimernet.py +176 -0
- mineru/model/mfr/unimernet/__init__.py +1 -0
- mineru/model/mfr/unimernet/unimernet_hf/__init__.py +14 -0
- mineru/model/mfr/unimernet/unimernet_hf/modeling_unimernet.py +177 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_mbart/__init__.py +9 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_mbart/configuration_unimer_mbart.py +163 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_mbart/modeling_unimer_mbart.py +2361 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_mbart/tokenization_unimer_mbart.py +1 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_swin/__init__.py +10 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_swin/configuration_unimer_swin.py +132 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_swin/image_processing_unimer_swin.py +180 -0
- mineru/model/mfr/unimernet/unimernet_hf/unimer_swin/modeling_unimer_swin.py +1084 -0
- mineru/model/mfr/utils.py +448 -0
- mineru/model/ocr/__init__.py +1 -0
- mineru/model/ocr/pytorch_paddle.py +407 -0
- mineru/model/ocr/seal_crop.py +402 -0
- mineru/model/ocr/seal_det_warp.py +823 -0
- mineru/model/office_stream.py +17 -0
- mineru/model/pptx/__init__.py +1 -0
- mineru/model/pptx/main.py +19 -0
- mineru/model/pptx/package_normalizer.py +341 -0
- mineru/model/pptx/pptx_converter.py +2170 -0
- mineru/model/pptx/xycut_pp_sorter.py +414 -0
- mineru/model/table/__init__.py +1 -0
- mineru/model/table/cls/__init__.py +1 -0
- mineru/model/table/cls/mineru_table_ori_cls.py +369 -0
- mineru/model/table/cls/paddle_table_cls.py +149 -0
- mineru/model/table/rec/__init__.py +1 -0
- mineru/model/table/rec/onnxruntime_provider.py +50 -0
- mineru/model/table/rec/slanet_plus/__init__.py +1 -0
- mineru/model/table/rec/slanet_plus/main.py +213 -0
- mineru/model/table/rec/slanet_plus/matcher.py +298 -0
- mineru/model/table/rec/slanet_plus/matcher_utils.py +247 -0
- mineru/model/table/rec/slanet_plus/table_structure.py +113 -0
- mineru/model/table/rec/slanet_plus/table_structure_utils.py +436 -0
- mineru/model/table/rec/unet_table/__init__.py +1 -0
- mineru/model/table/rec/unet_table/main.py +364 -0
- mineru/model/table/rec/unet_table/table_recover.py +215 -0
- mineru/model/table/rec/unet_table/table_structure_unet.py +211 -0
- mineru/model/table/rec/unet_table/utils.py +484 -0
- mineru/model/table/rec/unet_table/utils_table_line_rec.py +431 -0
- mineru/model/table/rec/unet_table/utils_table_recover.py +845 -0
- mineru/model/utils/__init__.py +1 -0
- mineru/model/utils/pytorchocr/__init__.py +1 -0
- mineru/model/utils/pytorchocr/base_ocr_v20.py +40 -0
- mineru/model/utils/pytorchocr/data/__init__.py +9 -0
- mineru/model/utils/pytorchocr/data/imaug/__init__.py +49 -0
- mineru/model/utils/pytorchocr/data/imaug/operators.py +424 -0
- mineru/model/utils/pytorchocr/modeling/__init__.py +1 -0
- mineru/model/utils/pytorchocr/modeling/architectures/__init__.py +25 -0
- mineru/model/utils/pytorchocr/modeling/architectures/base_model.py +106 -0
- mineru/model/utils/pytorchocr/modeling/backbones/__init__.py +66 -0
- mineru/model/utils/pytorchocr/modeling/backbones/det_mobilenet_v3.py +270 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_donut_swin.py +1278 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_hgnet.py +291 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_lcnetv3.py +517 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_mobilenet_v3.py +137 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_mv1_enhance.py +235 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_pphgnetv2.py +1624 -0
- mineru/model/utils/pytorchocr/modeling/backbones/rec_svtrnet.py +639 -0
- mineru/model/utils/pytorchocr/modeling/common.py +77 -0
- mineru/model/utils/pytorchocr/modeling/heads/__init__.py +45 -0
- mineru/model/utils/pytorchocr/modeling/heads/cls_head.py +24 -0
- mineru/model/utils/pytorchocr/modeling/heads/det_db_head.py +110 -0
- mineru/model/utils/pytorchocr/modeling/heads/rec_ctc_head.py +55 -0
- mineru/model/utils/pytorchocr/modeling/heads/rec_multi_head.py +59 -0
- mineru/model/utils/pytorchocr/modeling/heads/rec_ppformulanet_head.py +1384 -0
- mineru/model/utils/pytorchocr/modeling/heads/rec_unimernet_head.py +2632 -0
- mineru/model/utils/pytorchocr/modeling/necks/__init__.py +29 -0
- mineru/model/utils/pytorchocr/modeling/necks/db_fpn.py +457 -0
- mineru/model/utils/pytorchocr/modeling/necks/intracl.py +118 -0
- mineru/model/utils/pytorchocr/modeling/necks/rnn.py +242 -0
- mineru/model/utils/pytorchocr/postprocess/__init__.py +34 -0
- mineru/model/utils/pytorchocr/postprocess/cls_postprocess.py +21 -0
- mineru/model/utils/pytorchocr/postprocess/db_postprocess.py +240 -0
- mineru/model/utils/pytorchocr/postprocess/rec_postprocess.py +790 -0
- mineru/model/utils/pytorchocr/utils/__init__.py +1 -0
- mineru/model/utils/pytorchocr/utils/resources/arch_config.yaml +544 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ka_dict.txt +153 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocr_keys_v1.txt +6623 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv4_doc_dict.txt +15629 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_arabic_dict.txt +747 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_cyrillic_dict.txt +850 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_devanagari_dict.txt +568 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_dict.txt +18383 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_el_dict.txt +354 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_en_dict.txt +436 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_eslav_dict.txt +517 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_korean_dict.txt +11945 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_latin_dict.txt +836 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_ta_dict.txt +513 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_te_dict.txt +540 -0
- mineru/model/utils/pytorchocr/utils/resources/dict/ppocrv5_th_dict.txt +524 -0
- mineru/model/utils/pytorchocr/utils/resources/models_config.yml +77 -0
- mineru/model/utils/pytorchocr/utils/resources/pp_formulanet_arch_config.yaml +24 -0
- mineru/model/utils/tools/__init__.py +1 -0
- mineru/model/utils/tools/infer/__init__.py +1 -0
- mineru/model/utils/tools/infer/predict_cls.py +107 -0
- mineru/model/utils/tools/infer/predict_det.py +350 -0
- mineru/model/utils/tools/infer/predict_rec.py +438 -0
- mineru/model/utils/tools/infer/predict_system.py +105 -0
- mineru/model/utils/tools/infer/pytorchocr_utility.py +231 -0
- mineru/model/vlm/__init__.py +1 -0
- mineru/model/vlm/lmdeploy_server.py +94 -0
- mineru/model/vlm/vllm_server.py +69 -0
- mineru/model/xlsx/__init__.py +1 -0
- mineru/model/xlsx/main.py +18 -0
- mineru/model/xlsx/package_normalizer.py +283 -0
- mineru/model/xlsx/xlsx_converter.py +1481 -0
- mineru/parser/__init__.py +191 -0
- mineru/parser/api_client.py +460 -0
- mineru/parser/api_server.py +2214 -0
- mineru/parser/base.py +227 -0
- mineru/parser/html.py +166 -0
- mineru/parser/office.py +73 -0
- mineru/parser/pdf.py +353 -0
- mineru/parser/tier.py +74 -0
- mineru/render/__init__.py +9 -0
- mineru/render/content_list.py +165 -0
- mineru/render/markdown.py +107 -0
- mineru/render/markdown_table.py +282 -0
- mineru/render/merge.py +225 -0
- mineru/render/merge_visual.py +228 -0
- mineru/render/office/__init__.py +0 -0
- mineru/render/office/merge.py +949 -0
- mineru/render/office/output.py +720 -0
- mineru/render/union_make.py +167 -0
- mineru/resources/fasttext-langdetect/lid.176.ftz +0 -0
- mineru/resources/gradio_app.css +430 -0
- mineru/resources/gradio_app.js +519 -0
- mineru/resources/gradio_header.html +159 -0
- mineru/schema/__init__.py +1 -0
- mineru/schema/middle_json/__init__.py +385 -0
- mineru/schema/middle_json/envelope.py +6 -0
- mineru/types.py +519 -0
- mineru/utils/__init__.py +1 -0
- mineru/utils/bbox_utils.py +56 -0
- mineru/utils/check_sys_env.py +39 -0
- mineru/utils/cli_parser.py +57 -0
- mineru/utils/config_reader.py +194 -0
- mineru/utils/cut_image.py +45 -0
- mineru/utils/docx_formatting.py +24 -0
- mineru/utils/draw_bbox.py +454 -0
- mineru/utils/engine_utils.py +77 -0
- mineru/utils/enum_class.py +20 -0
- mineru/utils/guess_suffix_or_lang.py +190 -0
- mineru/utils/hash_utils.py +30 -0
- mineru/utils/image_utils.py +27 -0
- mineru/utils/language.py +48 -0
- mineru/utils/llm_aided.py +381 -0
- mineru/utils/model_utils.py +265 -0
- mineru/utils/models_download_utils.py +77 -0
- mineru/utils/ocr_utils.py +485 -0
- mineru/utils/office_rich_text.py +366 -0
- mineru/utils/os_env_config.py +36 -0
- mineru/utils/pdf_classify.py +634 -0
- mineru/utils/pdf_document.py +186 -0
- mineru/utils/pdf_image_tools.py +561 -0
- mineru/utils/pdf_page_id.py +47 -0
- mineru/utils/pdf_reader.py +53 -0
- mineru/utils/pdf_text_tool.py +92 -0
- mineru/utils/pdfium_guard.py +148 -0
- mineru/utils/title_level_postprocess.py +65 -0
- mineru/version.py +1 -0
- mineru_next_dev-4.0.0.dev20260625.dist-info/METADATA +494 -0
- mineru_next_dev-4.0.0.dev20260625.dist-info/RECORD +339 -0
- mineru_next_dev-4.0.0.dev20260625.dist-info/WHEEL +5 -0
- mineru_next_dev-4.0.0.dev20260625.dist-info/entry_points.txt +4 -0
- mineru_next_dev-4.0.0.dev20260625.dist-info/licenses/LICENSE.md +57 -0
- mineru_next_dev-4.0.0.dev20260625.dist-info/top_level.txt +1 -0
mineru/__init__.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright (c) Opendatalab. All rights reserved.
|
|
2
|
+
from .parser import ( # noqa: F401
|
|
3
|
+
DocumentParser,
|
|
4
|
+
DocxParser,
|
|
5
|
+
HtmlParser,
|
|
6
|
+
MinerUApiParser,
|
|
7
|
+
ParseResult,
|
|
8
|
+
PdfFlashParser,
|
|
9
|
+
PdfHybridParser,
|
|
10
|
+
PdfPipelineParser,
|
|
11
|
+
PdfVlmParser,
|
|
12
|
+
PptxParser,
|
|
13
|
+
XlsxParser,
|
|
14
|
+
parse,
|
|
15
|
+
)
|
|
16
|
+
from .types import Block, Line, PageInfo, Span # noqa: F401
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"Block",
|
|
20
|
+
"DocumentParser",
|
|
21
|
+
"DocxParser",
|
|
22
|
+
"HtmlParser",
|
|
23
|
+
"Line",
|
|
24
|
+
"MinerUApiParser",
|
|
25
|
+
"PageInfo",
|
|
26
|
+
"ParseResult",
|
|
27
|
+
"PdfFlashParser",
|
|
28
|
+
"PdfHybridParser",
|
|
29
|
+
"PdfPipelineParser",
|
|
30
|
+
"PdfVlmParser",
|
|
31
|
+
"PptxParser",
|
|
32
|
+
"Span",
|
|
33
|
+
"XlsxParser",
|
|
34
|
+
"parse",
|
|
35
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Copyright (c) Opendatalab. All rights reserved.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Flash tier: CPU-only lightweight PDF text extraction.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""Flash tier PDF extractor — CPU-only text extraction via pypdfium2."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import pypdfium2
|
|
6
|
+
|
|
7
|
+
from ...utils.pdfium_guard import close_pdfium_child, close_pdfium_document, open_pdfium_document, pdfium_guard
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def extract_pages_text(filepath: str, start_page: int = 0, end_page: int | None = None) -> list[str]:
|
|
11
|
+
"""Extract plain text from each PDF page, preserving empty pages."""
|
|
12
|
+
|
|
13
|
+
pdf = open_pdfium_document(pypdfium2.PdfDocument, filepath)
|
|
14
|
+
try:
|
|
15
|
+
with pdfium_guard():
|
|
16
|
+
total = len(pdf)
|
|
17
|
+
end = total if end_page is None else min(end_page, total)
|
|
18
|
+
|
|
19
|
+
pages: list[str] = []
|
|
20
|
+
for i in range(start_page, end):
|
|
21
|
+
page = None
|
|
22
|
+
text_page = None
|
|
23
|
+
try:
|
|
24
|
+
with pdfium_guard():
|
|
25
|
+
page = pdf[i]
|
|
26
|
+
text_page = page.get_textpage()
|
|
27
|
+
pages.append(text_page.get_text_range() or "")
|
|
28
|
+
finally:
|
|
29
|
+
close_pdfium_child(text_page)
|
|
30
|
+
close_pdfium_child(page)
|
|
31
|
+
return pages
|
|
32
|
+
finally:
|
|
33
|
+
close_pdfium_document(pdf)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def extract_text(filepath: str, start_page: int = 0, end_page: int | None = None) -> str:
|
|
37
|
+
"""Extract plain text from a PDF file using pypdfium2.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
filepath: Path to the PDF file.
|
|
41
|
+
start_page: 0-based start page (inclusive).
|
|
42
|
+
end_page: 0-based end page (exclusive). None means all pages.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Extracted text as a string, one page per `\\n\\n`.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
return "\n\n".join(text for text in extract_pages_text(filepath, start_page, end_page) if text)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Copyright (c) Opendatalab. All rights reserved.
|