unstructured 0.27.37
unstructured version 0.27.37 fixes text extraction for vector-heavy PDFs, preserves text in PPTX and DOCX elements, and resolves UTF-8 metrics evaluation issues.
unstructured version 0.27.37 fixes text extraction for vector-heavy PDFs, preserves text in PPTX and DOCX elements, and resolves UTF-8 metrics evaluation issues.
Unstructured 0.27.36 includes several fixes for file partitioning, OCR, and table detection, improving the reliability of data processing for various file formats.
This release of the Unstructured library includes various fixes for document partitioning, metadata extraction, and performance improvements for PDF processing.
Unstructured 0.27.34 includes performance improvements for buffer management and several bug fixes for partition and file format handling.
- fix: label numbered headings without making them list items, and skip section-break paragraphs - fix(partition): read spooled uploads in place instead of copying them - perf(pdf): bound OCR upload and rendered-page memory - perf(chunking): bound image payload and original-element serialization memory - feat(xlsx): expose a guarded worksheet-at-a-time...
- fix(xlsx): read .xls files whose Workbook stream ends in padding
- feat: opt-in langdetect-rs backend for partition language detection - fix(html): keep text inside unrecognized elements - fix(html): keep table captions in Table text and text_as_html - perf(docx): resolve each paragraph style once per document (5.3 s -> 1.0 s outside spaCy) - fix(xlsx): collapse empty-row runs instead of rejecting far-away cells -...
- fix(json): preserve rehydrated element identity - fix: keep overlap category names from element 100 on - fix: normalize None text to empty string in Text elements - fix: stop silently returning mojibake from encoding detection fix: partition_email raises KeyError on a multipart/ attachment - fix: preserve MathML content in HTML partitioning
- fix(pptx): no page break before the first slide when starting_page_number > 1 - fix(chunking): reject a negative overlap instead of corrupting text - feat(image): partition WEBP images like PNG and JPEG
This release rolls up all changes since 0.27.16. Fixes - Faster chunk serialization with stable source-element IDs. Avoid copying orig_elements twice during serialization. IDs minted during serialization now remain stable across calls, including inside orig_elements; explicit and hash-derived IDs are unchanged.
This release rolls up all changes since 0.27.10; versions 0.27.11–0.27.15 were not published to PyPI individually. Fixes Reject images whose frames decode to too many pixels instead of exhausting memory.
- fix: partition multi-section DOCX files in linear time - fix: ignore processing instructions in HTML partitioning - ci: remove release version alert - fix: tolerate non-UTF-8 soffice output in doc/ppt conversion - fix: recognize single-block list items as ListItem - perf(nlp): run the spaCy pipeline once per distinct text - fix(html): preserve table...
- Fix DOCX text_as_html duplicating merged-cell text instead of colspan/rowspan
- chore(deps): bump claude-code-action to v1 - Added Sign up link for Transform and removed pricing - fix: stop treating every hyphen as a bullet delimiter in text partitioning - fix: preserve attachment elements' own filetype in auto.partition() - chore: make a release
- test: stop GLOBAL_WORKING_DIR tests from disturbing other xdist workers - chore: restore telemetry by default - fix(security): bound quadratic array-stream decoding in is_pdf_too_complex (SEC-146) - fix: linear-time inline element merging in HTML partitioning (ML-1713) - fix: fallback character-set detection for file-like objects - feat: add partition...
- Terminology update: Platform -> Pipelines in README - perf(html): use indexed parent lookup - feat: add lazy chunking entry points
Enhancements - Partition arbitrary JSON and NDJSON: partition_json() and partition_ndjson() now handle any valid JSON/NDJSON payload, not just serialized Unstructured output.
- fix: sanitize v2 HTML output to prevent stored XSS (GHSA-v5mq-3xhg-98m9)
- feat: derive category_depth from heading level in the v2 (ontology) HTML parser - fix(ci): stabilize partition benchmark with a rolling-median baseline - refactor: centralize URL fetching with host validation and default timeouts
- fix: stop decimating embedded text on dense PDF pages - fix: keep extracted text aligned with rotated PDF page images in hi_res - feat: add enrichment origins metadata field
- Reject oversized PDF renders before bitmap allocation - feat(cli): add unstructured doctor diagnostics command - feat: Track the table extraction method
Security - Replace PyPI opencv wheels with ffmpeg-free builds in Docker image: After uv sync, the Dockerfile now substitutes all PyPI opencv-python variants with a source-built opencv-contrib-python-headless wheel compiled with WITH_FFMPEG=OFF, eliminating 14 bundled ffmpeg CVEs.
- Fix fixtures update CI to regenerate markdown - fix(deps): upgrade vulnerable transitive dependencies [security] - feat: add GHA workflow to build opencv wheels without ffmpeg - Enable vertical text detection for rotated images
- fix(chunking): preserve semantic headers in carried table chunks - feat: add page number support to v1 html partition
0.22.16 Enhancements - Formula markdown export (element_to_md / elements_to_md): New keyword-only formula_markdown_style ("auto", "display_math", "plain"; default "auto"). In "auto", display math ($ ... $) is used only when the text looks like notation (heuristic score) and contains no $/$ (avoids breaking Markdown and noisy OCR captions).
- mem: exclude unused spaCy pipeline components to reduce model memory - fix: pdfminer drops extractable text
- fix(chunking): preserve nested table structure in reconstruction - Replace lazyproperty with functools.cached_property - mem: reduce PaddleOCR rec_batch_num from 6 to 1 - fix: isolate Table elements in pre-chunks - feat(chunking): repeat table headers on continuation chunks
- feat: add create_file_from_elements() to re-create document files from elements - Bump dependencies - fix: avoid O(N²) re-scanning in _patch_current_chars_with_render_mode - add check if libmagic fails - Adds Form Element - feat: audio speech to text partition - Add a check for complex pdfs - chore: disable fail-build on Anchore container scan - feat...
- feat: custom fallback for language detection - Add Github action for time regressions - fix: relax lower bound for pdfminer.six
0.21.0 Fixes - Replace NLTK with spaCy to remediate CVE-2025-14009: NLTK's downloader uses zipfile.extractall() without path validation, enabling RCE via malicious packages (CVSS 10.0, no patch available). spaCy models install as pip packages, eliminating the vulnerable downloader entirely.
- fix: set max decompressed size for elements JSON - fix: update depdencies
- Automate pypi publishing - fix: remove duplicate characters caused by fake bold rendering in PDFs - Improve fast partition cold start - fix: gracefully handle invalide html string during chunking - fix: remap parent id after hashing
- Add Python 3.11 and 3.13 support - Use bigger runner to publish images
- feat: add group_elements_by_parent_id utility function - Preserve newlines in Table and TableChunk elements during PDF partitioning - Fix: make pdf image dpi consistent - chore: bump dependencies for 0.18.34 - feat: increase PIL's max image pixel value for pdf partition - Migrate to uv - Fix ARM64 paddlepaddle image builder bug - Fix Docker ARM64 image...
- Feat: patch pdfminer and use rendermode to detect invisible text - fix: add EN DASH to UNICODE_BULLETS for clean_bullets - fix: fix version number - enhancement: render pdfs with pdfium - feat: consider rotated text as low fidelityfeat: consider rotated text - fix: address jaraco CVE - fix: hange default for languages parameter from ["auto"] to None - ⚡️...
Enhancement - Optimize clean_extra_whitespace_with_index_run (codeflash) - Optimize recursive_xy_cut_swapped (codeflash) - Optimize _DocxPartitioner._parse_category_depth_by_style_name (codeflash) - Optimize VertexAIEmbeddingEncoder._add_embeddings_to_elements (codeflash) - Optimize ngrams (codeflash) - Optimize stage_for_datasaur (codeflash)
0.18.27 Fixes - Comment no-ops in zoom_image (codeflash) - Fix an issue where elements with partially filled extracted text are marked as extracted Enhancement - Optimize sentence_count (codeflash) - Optimize _PartitionerLoader._load_partitioner (codeflash) - Optimize detect_languages (codeflash) - Optimize contains_verb (codeflash) - Optimize...
0.18.26 Fixes - Pin deltalake<1.3.0 to fix ARM64 Docker builds (1.3.0 missing Linux ARM64 wheels) 0.18.25 Fixes - Security update: Removed pdfminer.six version constraint and bumped pdfminer.six and urllib3 to address high severity CVEs
Enhancement - Optimize OCRAgentTesseract.extract_word_from_hocr (codeflash) Fixes - Security update: Bumped dependencies to address security vulnerabilities
0.18.22 Enhancement Features Fixes - fix(deps): Bump fonttools to address cve
0.18.21 Enhancement - Update save_elements unit test to check crop box padding behavior Features Fixes - Update unstructured-inference to 1.1.2 to address CVEs
0.18.20 Enhancement - Improve the VoyageAI integration - Add voyage-context-3 support - Flag extracted elements as such in the metadata for downstream use Features Fixes
0.18.18 Fixes - Prevent path traversal in email MSG attachment filenames Fixed a security vulnerability (GHSA-gm8q-m8mv-jj5m) where malicious attachment filenames containing path traversal sequences could write files outside the intended directory.