natural-pdf 0.1.22__py3-none-any.whl → 0.1.23__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.
@@ -698,6 +698,28 @@ def _build_filter_list(selector: Dict[str, Any], **kwargs) -> List[Dict[str, Any
698
698
 
699
699
  filter_lambda = contains_check
700
700
 
701
+ # --- Handle :startswith and :starts-with (alias) --- #
702
+ elif name in ("starts-with", "startswith") and args is not None:
703
+ filter_name = f"pseudo-class :{name}({args!r})"
704
+
705
+ def startswith_check(element, arg=args):
706
+ if not hasattr(element, "text") or not element.text:
707
+ return False
708
+ return str(element.text).startswith(str(arg))
709
+
710
+ filter_lambda = startswith_check
711
+
712
+ # --- Handle :endswith and :ends-with (alias) --- #
713
+ elif name in ("ends-with", "endswith") and args is not None:
714
+ filter_name = f"pseudo-class :{name}({args!r})"
715
+
716
+ def endswith_check(element, arg=args):
717
+ if not hasattr(element, "text") or not element.text:
718
+ return False
719
+ return str(element.text).endswith(str(arg))
720
+
721
+ filter_lambda = endswith_check
722
+
701
723
  elif name == "starts-with" and args is not None:
702
724
  filter_lambda = (
703
725
  lambda el, arg=args: hasattr(el, "text")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: natural-pdf
3
- Version: 0.1.22
3
+ Version: 0.1.23
4
4
  Summary: A more intuitive interface for working with PDFs
5
5
  Author-email: Jonathan Soma <jonathan.soma@gmail.com>
6
6
  License-Expression: MIT
@@ -22,12 +22,6 @@ Requires-Dist: tqdm
22
22
  Requires-Dist: pydantic
23
23
  Requires-Dist: jenkspy
24
24
  Requires-Dist: scipy
25
- Requires-Dist: torch
26
- Requires-Dist: torchvision
27
- Requires-Dist: transformers[sentencepiece]
28
- Requires-Dist: huggingface_hub>=0.29.3
29
- Requires-Dist: sentence-transformers
30
- Requires-Dist: timm
31
25
  Requires-Dist: ipywidgets>=7.0.0
32
26
  Provides-Extra: test
33
27
  Requires-Dist: pytest; extra == "test"
@@ -57,6 +51,7 @@ Requires-Dist: natural-pdf[test]; extra == "all"
57
51
  Requires-Dist: natural-pdf[search]; extra == "all"
58
52
  Requires-Dist: natural-pdf[favorites]; extra == "all"
59
53
  Requires-Dist: natural-pdf[export-extras]; extra == "all"
54
+ Requires-Dist: natural-pdf[ai]; extra == "all"
60
55
  Provides-Extra: deskew
61
56
  Requires-Dist: deskew>=1.5; extra == "deskew"
62
57
  Requires-Dist: img2pdf; extra == "deskew"
@@ -68,6 +63,15 @@ Requires-Dist: pikepdf; extra == "ocr-export"
68
63
  Provides-Extra: export-extras
69
64
  Requires-Dist: jupytext; extra == "export-extras"
70
65
  Requires-Dist: nbformat; extra == "export-extras"
66
+ Provides-Extra: ai
67
+ Requires-Dist: sentence-transformers; extra == "ai"
68
+ Requires-Dist: torch; extra == "ai"
69
+ Requires-Dist: torchvision; extra == "ai"
70
+ Requires-Dist: transformers[sentencepiece]; extra == "ai"
71
+ Requires-Dist: huggingface_hub>=0.29.3; extra == "ai"
72
+ Requires-Dist: timm; extra == "ai"
73
+ Requires-Dist: doclayout_yolo; extra == "ai"
74
+ Requires-Dist: easyocr; extra == "ai"
71
75
  Dynamic: license-file
72
76
 
73
77
  # Natural PDF
@@ -87,25 +91,29 @@ Natural PDF lets you find and extract content from PDFs using simple code that m
87
91
  pip install natural-pdf
88
92
  ```
89
93
 
90
- Need OCR engines, layout models, or other heavy add-ons? Install the **core** once, then use the helper CLI to pull in exactly what you need:
94
+ Need OCR engines, layout models, or other heavy add-ons? Install the **core** once, then use the helper `npdf` command to pull in exactly what you need:
91
95
 
92
96
  ```bash
93
- # add PaddleOCR (+paddlex) after the fact
94
- npdf install paddle
97
+ # Everything you need for classification, document-QA, semantic search, etc.
98
+ npdf install ai
95
99
 
96
100
  # Surya OCR and the YOLO Doc-Layout detector in one go
97
101
  npdf install surya yolo
98
102
 
103
+ # add PaddleOCR (+paddlex) after the fact
104
+ npdf install paddle
105
+
99
106
  # see what's already on your machine
100
107
  npdf list
101
108
  ```
102
109
 
103
- Light-weight extras such as `deskew` or `search` can still be added with
104
- classic PEP-508 markers if you prefer:
110
+ Lightweight extras such as `deskew` or `search` can still be added with
111
+ classic `pip install`:
105
112
 
106
113
  ```bash
107
114
  pip install "natural-pdf[deskew]"
108
115
  pip install "natural-pdf[search]"
116
+ pip install "natural-pdf[ai]"
109
117
  ```
110
118
 
111
119
  More details in the [installation guide](https://jsoma.github.io/natural-pdf/installation/).
@@ -116,7 +124,7 @@ More details in the [installation guide](https://jsoma.github.io/natural-pdf/ins
116
124
  from natural_pdf import PDF
117
125
 
118
126
  # Open a PDF
119
- pdf = PDF('document.pdf')
127
+ pdf = PDF('https://github.com/jsoma/natural-pdf/raw/refs/heads/main/pdfs/01-practice.pdf')
120
128
  page = pdf.pages[0]
121
129
 
122
130
  # Extract all of the text on the page
@@ -1,7 +1,7 @@
1
1
  natural_pdf/__init__.py,sha256=qDFJNF8sbEDO-2WSFAxoWEM8updOUP6dB-ckya0kxfs,3275
2
- natural_pdf/cli.py,sha256=-U3vWyI7Qcxr3b5EWY7d2AcsOZJ7D9RnQIMzQsfoDQM,3971
2
+ natural_pdf/cli.py,sha256=IXrP2lCHihr-ed-CFiDbMTnSsutQa1j1PYALOLGbpsc,4019
3
3
  natural_pdf/analyzers/__init__.py,sha256=dIXjsMqoxKmd9OOnSBzn12wvdIz7D7YNQRAnXslpJSM,142
4
- natural_pdf/analyzers/shape_detection_mixin.py,sha256=HHefg-v7CJMxYiJHxdGOdqdtbWe9yk4OBoW3a_aRrjM,81798
4
+ natural_pdf/analyzers/shape_detection_mixin.py,sha256=blpeHMWl6nXlutAByfdi6zjfmcyaDpdv2S7IR4l0WO0,81783
5
5
  natural_pdf/analyzers/text_options.py,sha256=qEkDaYWla0rIM_gszEOsu52q7C_dAfV81P2HLJZM2sw,3333
6
6
  natural_pdf/analyzers/text_structure.py,sha256=VfKTsTFrK877sC0grsis9jK3rrgp0Mbp13VWEbukTcs,28437
7
7
  natural_pdf/analyzers/utils.py,sha256=PYbzJzSAHZ7JsMes84WIrSbA0zkjJGs0CLvIeINsf_k,2100
@@ -18,27 +18,27 @@ natural_pdf/analyzers/layout/surya.py,sha256=4RdnhRxSS3i3Ns5mFhOA9-P0xd7Ms19uZuK
18
18
  natural_pdf/analyzers/layout/table_structure_utils.py,sha256=nISZDBd46RPYkFHxbQyIHwg9WweG4DslpoYJ31OMJYA,2768
19
19
  natural_pdf/analyzers/layout/tatr.py,sha256=cVr0ZyhY2mNLAKZ4DGMm-b7XNJpILKh8x8ZpyDeUhLk,15032
20
20
  natural_pdf/analyzers/layout/yolo.py,sha256=Iw8qsIOHg2lUP7z9GsmkOm3c9kJ-Ywk01Oej50kZgDw,8360
21
- natural_pdf/classification/manager.py,sha256=pzuTP-34W9N3im1ZFhCfQpOu37VSHEx4JHoHNxyy6o0,18894
22
- natural_pdf/classification/mixin.py,sha256=_XtoqCMqj1nxZYskIV2RbVYiVVcEWzFwae4s5vpzC74,6566
23
- natural_pdf/classification/results.py,sha256=El1dY7cBQVOB5lP-uj52dWgH6Y7TeQgJOVcZD-OLjes,2778
21
+ natural_pdf/classification/manager.py,sha256=7HOyHdjMJtC9DfzI8OXAREnGDpXaAgSfTFVC42n3tVQ,18889
22
+ natural_pdf/classification/mixin.py,sha256=nYpmHQ4BlrealdPtIJt-_idME5o-xKLKNuAdIHzWL6c,7580
23
+ natural_pdf/classification/results.py,sha256=Mcay-xLBHbYoZ8U7f4gMj2IhhH_yORNEkZHWdWJzmsU,3239
24
24
  natural_pdf/collections/mixins.py,sha256=sj76Cn6EdBtb5f-bdAV-1qpdixX8tI4BzPccPiYLI1w,5117
25
25
  natural_pdf/collections/pdf_collection.py,sha256=HLlyakM--23ZOeHDPucoM6Tw3yUyMXm0SSoqJwxRc2E,30744
26
26
  natural_pdf/core/__init__.py,sha256=QC8H4M3KbXwMFiQORZ0pdPlzx1Ix6oKKQSS7Ib2KEaA,38
27
27
  natural_pdf/core/element_manager.py,sha256=_UdXu51sLi6STzc8Pj4k8R721G3yJixXDLuRHn3hmr8,25731
28
- natural_pdf/core/highlighting_service.py,sha256=_kQUS6_BBvsLBuSZloFrVag6jN90KzHa0ULyGBjufSs,36955
29
- natural_pdf/core/page.py,sha256=i3DriIQwoO4RuSrkrCXv44Dz8OL9KXPa2y4GhsD1y18,118324
30
- natural_pdf/core/pdf.py,sha256=0hsIdvKmr6C3WGdD9N9wHGHaZN4th4QwduLwmJ8rWpM,73269
28
+ natural_pdf/core/highlighting_service.py,sha256=wWoU2kJ_JBbxKV3NWEjqU6DLvmlwME9sTntk-TDqOfs,38223
29
+ natural_pdf/core/page.py,sha256=U4GRy_zdoTB4sx4EPrAIKg4beIQ8atJsY5HX_jWfDjg,118953
30
+ natural_pdf/core/pdf.py,sha256=qsSW4RxOJRmCnweLPMs0NhzkRfiAVdghTgnh4D_wuO4,74295
31
31
  natural_pdf/describe/__init__.py,sha256=B3zjuHjFI_dFuBLgXR1Q4v7c72fVDyk84d2hs0H4KV8,561
32
32
  natural_pdf/describe/base.py,sha256=LAZLc_thK2u2surgGd0Pk7CN2uVaZK9AbMOE3-1RmQ4,16842
33
33
  natural_pdf/describe/elements.py,sha256=xD8wwR1z5IKat7RIwoAwQRUEL6zJTEwcOKorF4F-xPg,12717
34
34
  natural_pdf/describe/mixin.py,sha256=U0x6v8r57KQb8qC3VVo64hvhfXQWsti8vdKBM7AXnMo,3116
35
35
  natural_pdf/describe/summary.py,sha256=dPtjrn6fQ8nL0F74RITX2vXlDX7ZgaX9JQPnJB-S_XQ,6735
36
36
  natural_pdf/elements/__init__.py,sha256=S8XeiNWJ1WcgnyYKdYV1yxQlAxCCO3FfITT8MQwNbyk,41
37
- natural_pdf/elements/base.py,sha256=IlAeyzV66xMrxVx9U3ocGPekzGUBJgKkAiJ5kpvCSAg,39675
38
- natural_pdf/elements/collections.py,sha256=vgVZsVC3xxRF2S5KW7L0JKa-NSUFnqURk50NtvlwbcM,122113
37
+ natural_pdf/elements/base.py,sha256=iTIy6FfQj48llZkm7wERnTky3VTmUgkYfQytRuyueZo,43304
38
+ natural_pdf/elements/collections.py,sha256=zaqJ8pr0dmYwv1gPBs24oXfZExpSIX4URDRox-QLj98,123173
39
39
  natural_pdf/elements/line.py,sha256=300kSFBDUBIudfeQtH_tzW9gTYRgRKUDPiTABw6J-BE,4782
40
40
  natural_pdf/elements/rect.py,sha256=kiVa3e377ZnqIOXc89d9ZSY4EcmDxtccdtUw-HOQzpw,3796
41
- natural_pdf/elements/region.py,sha256=hBklYKcXJWyxayu9todYQOZ-d9KVDtqeV-CIt9IcSn8,123400
41
+ natural_pdf/elements/region.py,sha256=BAOriJuQYovppV0S5xI6tq5YEuzffiMQneDvHuT22Uo,118562
42
42
  natural_pdf/elements/text.py,sha256=13HvVZGinj2Vm_fFCAnqi7hohtoKvnpCp3VCfkpeAbc,11146
43
43
  natural_pdf/export/mixin.py,sha256=L1q3MIEFWuvie4j4_EmW7GT3NerbZ1as0XMUoqTS7gM,5083
44
44
  natural_pdf/exporters/__init__.py,sha256=g1WRPCDVzceaUUsm8dchPhzdHFSjYM0NfRyc8iN0mtE,644
@@ -46,31 +46,32 @@ natural_pdf/exporters/base.py,sha256=XhR1xlkHOh7suOuX7mWbsj1h2o1pZNet-OAS5YCJyeI
46
46
  natural_pdf/exporters/hocr.py,sha256=wksvJvWLSxuAfhYzg_0T2_W8eqDoMgAVC-gwZ9FoO_k,19969
47
47
  natural_pdf/exporters/hocr_font.py,sha256=1wsGOMj6zoaRN2rxCwrv4MMLGawpNz984WgXpmWekgw,4574
48
48
  natural_pdf/exporters/original_pdf.py,sha256=dtvC4er6TWOfqq-n24Pejw3mlAuPd8IVyihggJtcf0s,6634
49
- natural_pdf/exporters/paddleocr.py,sha256=IAG2p9YeImYcsIvb6a_L5mMrKarvaMaDvRrvdlY6bX4,19489
49
+ natural_pdf/exporters/paddleocr.py,sha256=RBP03GCk0mLeC7tWtuti8AIUHlpOrtvbWkE2n7Ja7k8,19484
50
50
  natural_pdf/exporters/searchable_pdf.py,sha256=G2Tc4tpDXSYIufXJlkA8ppW_3DuzHAaweYKae33pI_c,16290
51
51
  natural_pdf/exporters/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  natural_pdf/exporters/data/pdf.ttf,sha256=x4RUIJJaI9iO2DCmOVe4r4Wmao2vjZ_JDoQ2c7LvGlk,572
53
53
  natural_pdf/exporters/data/sRGB.icc,sha256=KpLUuuRQt22LCqQhk9-XTXX2Jzjs6_dPAcXnWxKpV5Y,6922
54
- natural_pdf/extraction/manager.py,sha256=mUBbfgLG5Pl31wmajXwyipdEJb_dZ5I-y8GnWw7IzGo,4969
55
- natural_pdf/extraction/mixin.py,sha256=eKbr70VibpbtfjvCE80lTFuYHzq_BoVtOHjznL_GMRA,11719
56
- natural_pdf/extraction/result.py,sha256=c1vLguCR6l95cvg-BJJmZvL_MPg2McJaczge55bKZMg,934
54
+ natural_pdf/extraction/manager.py,sha256=sASPJZ5cWFsl8A4PyTjg2yqkyC00tRl6glfoFA6HcsM,4979
55
+ natural_pdf/extraction/mixin.py,sha256=_5wGnzOCEuRWhqdSUV1Lqo9HIi56YC4MWzbBxOkOEKU,23160
56
+ natural_pdf/extraction/result.py,sha256=D5DhjxLW7IvhEkvsAP7Zs2YA8K4hyuoTg681CSn5qA0,1825
57
57
  natural_pdf/flows/__init__.py,sha256=cUN4A8hTDLZSRr4PO2W_lR4z6hWpbNG8Seox-IIcrLU,277
58
58
  natural_pdf/flows/collections.py,sha256=qGuSPFSPQF-wiYquG6STiSzg_o951MSsFEq_B44Jef8,28441
59
59
  natural_pdf/flows/element.py,sha256=mKzk3B7A7sWNvu4CDvAjLr3_ZFLt--ktrSNoLfLpFxU,23940
60
60
  natural_pdf/flows/flow.py,sha256=I61BpFVDQyo6ORsmoqoYiOEP1DBRp0vgDJjm_V8frhc,10562
61
- natural_pdf/flows/region.py,sha256=OJNt1nVt_w89kCw4sQmZRZE5SHgiFWYb8ebcX49jq2A,22192
61
+ natural_pdf/flows/region.py,sha256=hucKKmjjmLt__x-RiX6S1Amsp88yweyjcgWJ7PQtTgY,22187
62
62
  natural_pdf/ocr/__init__.py,sha256=VY8hhvDPf7Gh2lB-d2QRmghLLyTy6ydxlgo1cS4dOSk,2482
63
63
  natural_pdf/ocr/engine.py,sha256=ZBC1tZNM5EDbGDJJmZI9mNHr4nCMLEZvUFhiJq8GdF4,8741
64
64
  natural_pdf/ocr/engine_doctr.py,sha256=ptKrupMWoulZb-R93zr9btoe94JPWU7vlJuN7OBJEIM,17740
65
65
  natural_pdf/ocr/engine_easyocr.py,sha256=bWz6kHUgAJfe3rqdnZBAF-IPvw3B35DlvX5KDdFUtzo,9888
66
66
  natural_pdf/ocr/engine_paddle.py,sha256=0vobobjnsM1G3zihYL7f1roLlKKZWRwioxkGkgIxEUA,16159
67
- natural_pdf/ocr/engine_surya.py,sha256=PNjvpsHnBghAoa-df52HEyvXzfNI-gTFgKvs2LxHgKo,5051
67
+ natural_pdf/ocr/engine_surya.py,sha256=lOvSbZk53VKFVxRmqcQzM_0dHVdwTkRGiDZ9AWCgL1Q,5951
68
68
  natural_pdf/ocr/ocr_factory.py,sha256=GkODuBmqNVECg4u1-KW6ZMfBgVndLkK1W5GM15faf8M,5318
69
69
  natural_pdf/ocr/ocr_manager.py,sha256=K2gpFo3e6RB1ouXOstlEAAYd14DbjBNt5RH6J7ZdDQY,14263
70
70
  natural_pdf/ocr/ocr_options.py,sha256=l33QKu_93r-uwi3t_v8UH8pEgHo6HTVzP4tfmQFRF1w,5488
71
71
  natural_pdf/ocr/utils.py,sha256=OxuHwDbHWj6setvnC0QYwMHrAjxGkhmLzWHpMqqGupA,4397
72
- natural_pdf/qa/__init__.py,sha256=Pjo62JTnUNEjGNsC437mvsS5KQ5m7X_BibGvavR9AW0,108
73
- natural_pdf/qa/document_qa.py,sha256=Jw4yyq3Vifn57D0ANmOfUlZeG8CJjBkItZBV-8ZAmos,15111
72
+ natural_pdf/qa/__init__.py,sha256=2u2KJcA71g1I0HnLD-j6yvDw1moAjo9kkLhhfoYRURM,166
73
+ natural_pdf/qa/document_qa.py,sha256=bwOrO_bq_9wEaLu7j7h8EkN3ya5xMxDoE7oNurEb6-E,14889
74
+ natural_pdf/qa/qa_result.py,sha256=_q4dlSqsjtgomcI8-pqbOT69lqQKnEMkhZNydoxEkkE,2227
74
75
  natural_pdf/search/__init__.py,sha256=0Xa7tT_2q57wHObFMQLQLd4gd9AV0oyS-svV6BmmdMI,4276
75
76
  natural_pdf/search/lancedb_search_service.py,sha256=6dz2IEZUWk3hFW28C-LF_85pWohd7Sr5k44bM0pBdm4,14472
76
77
  natural_pdf/search/numpy_search_service.py,sha256=MoPBlyHTDqah1IrwBzyglEyiXlF4wqaU_5mml_ngvGc,10328
@@ -78,7 +79,7 @@ natural_pdf/search/search_options.py,sha256=sq_e8_jSROicD94b_xtDtLnjEr_Zsy4icjzP
78
79
  natural_pdf/search/search_service_protocol.py,sha256=Dl-Q-CrutkhZwI69scbW9EWPeYM63qxB60_EA7YqIYo,6699
79
80
  natural_pdf/search/searchable_mixin.py,sha256=hqQ_AuID5eTGRCtKYdFLZ1zF35y73uk3x1M1VW9Il8U,23514
80
81
  natural_pdf/selectors/__init__.py,sha256=oZGeqSv53EqmIZOhcnawuaGGlRg1h79vArXuZCWKm4A,123
81
- natural_pdf/selectors/parser.py,sha256=0EJskGjRfwXiqjedY6siIso4TA4dACHb-_DOyogW9TY,31970
82
+ natural_pdf/selectors/parser.py,sha256=nJJPACzFKBMomAZMXzI_L3EMz9ji1agkmxJ5eaij310,32880
82
83
  natural_pdf/templates/__init__.py,sha256=jYBxzfi73vew0f6yhIh1MlRxw4F_TVN2hKQR0YXOFe0,20
83
84
  natural_pdf/utils/__init__.py,sha256=s3M8FggaK1P3EBYn6R_-HgSDjNc9C73gyKe1hihtNWg,43
84
85
  natural_pdf/utils/debug.py,sha256=RN7H3E6ph-GtxubCW6psW7TO8o2BxcNLiEzByTVR9fk,995
@@ -91,9 +92,9 @@ natural_pdf/utils/text_extraction.py,sha256=z6Jhy11pakYCsEpkvh8ldw6DkUFsYF1hCL9Y
91
92
  natural_pdf/utils/visualization.py,sha256=30pRWQdsRJh2pSObh-brKVsFgC1n8tHmSrta_UDnVPw,8989
92
93
  natural_pdf/widgets/__init__.py,sha256=QTVaUmsw__FCweFYZebwPssQxxUFUMd0wpm_cUbGZJY,181
93
94
  natural_pdf/widgets/viewer.py,sha256=2VUY1TzWMDe9I-IVNOosKZ2LaqpjLB62ftMAdk-s6_8,24952
94
- natural_pdf-0.1.22.dist-info/licenses/LICENSE,sha256=9zfwINwJlarbDmdh6iJV4QUG54QSJlSAUcnC1YiC_Ns,1074
95
- natural_pdf-0.1.22.dist-info/METADATA,sha256=_e2-VmJ4W8_3IZEQc6QqP2LG99f2b-8f1wZRhDSBZsw,6238
96
- natural_pdf-0.1.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
- natural_pdf-0.1.22.dist-info/entry_points.txt,sha256=1R_KMv7g60UBBpRqGfw7bppsMNGdayR-iJlb9ohEk_8,81
98
- natural_pdf-0.1.22.dist-info/top_level.txt,sha256=Cyw1zmNDlUZfb5moU-WUWGprrwH7ln_8LDGdmMHF1xI,17
99
- natural_pdf-0.1.22.dist-info/RECORD,,
95
+ natural_pdf-0.1.23.dist-info/licenses/LICENSE,sha256=9zfwINwJlarbDmdh6iJV4QUG54QSJlSAUcnC1YiC_Ns,1074
96
+ natural_pdf-0.1.23.dist-info/METADATA,sha256=z7Mq5yr_sckn7pFR1KqBz_fG2sG-jBBSb2czsRrzC_k,6660
97
+ natural_pdf-0.1.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
+ natural_pdf-0.1.23.dist-info/entry_points.txt,sha256=1R_KMv7g60UBBpRqGfw7bppsMNGdayR-iJlb9ohEk_8,81
99
+ natural_pdf-0.1.23.dist-info/top_level.txt,sha256=Cyw1zmNDlUZfb5moU-WUWGprrwH7ln_8LDGdmMHF1xI,17
100
+ natural_pdf-0.1.23.dist-info/RECORD,,