Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 0.18.32-dev0

### Enhancements
- Optimized `merge_out_layout_with_ocr_layout` (codeflash)

## 0.18.31

### Enhancements
Expand Down
2 changes: 1 addition & 1 deletion unstructured/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.18.31" # pragma: no cover
__version__ = "0.18.32-dev0" # pragma: no cover
10 changes: 3 additions & 7 deletions unstructured/partition/pdf_image/ocr.py
Original file line number Diff line number Diff line change
Expand Up @@ -471,13 +471,9 @@ def supplement_layout_with_ocr_elements(
else:
ocr_regions_to_add = ocr_layout
else:
mask = (
~bboxes1_is_almost_subregion_of_bboxes2(
ocr_layout.element_coords, layout.element_coords, subregion_threshold
)
.sum(axis=1)
.astype(bool)
)
mask = ~bboxes1_is_almost_subregion_of_bboxes2(
ocr_layout.element_coords, layout.element_coords, subregion_threshold
).any(axis=1)

# add ocr regions that are not covered by layout
ocr_regions_to_add = ocr_layout.slice(mask)
Expand Down
27 changes: 12 additions & 15 deletions unstructured/partition/pdf_image/pdfminer_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -812,31 +812,28 @@ def aggregate_embedded_text_by_block(
if len(source_regions) == 0 or len(target_region) == 0:
return "", None

mask = (
bboxes1_is_almost_subregion_of_bboxes2(
source_regions.element_coords,
target_region.element_coords,
subregion_threshold,
)
.sum(axis=1)
.astype(bool)
)

text = " ".join([text for text in source_regions.slice(mask).texts if text])

if sum(mask):
source_bboxes = source_regions.slice(mask).element_coords
mask = bboxes1_is_almost_subregion_of_bboxes2(
source_regions.element_coords,
target_region.element_coords,
subregion_threshold,
).any(axis=1)

if mask.any():
sliced = source_regions.slice(mask)
text = " ".join([text for text in sliced.texts if text])
source_bboxes = sliced.element_coords
target_bboxes = target_region.element_coords

iou = _aggregated_iou(source_bboxes, target_bboxes[0, :])

fully_filled = (
all(flag == IsExtracted.TRUE for flag in source_regions.slice(mask).is_extracted_array)
all(flag == IsExtracted.TRUE for flag in sliced.is_extracted_array)
and iou > text_coverage_threshold
)
is_extracted = IsExtracted.TRUE if fully_filled else IsExtracted.PARTIAL
else:
# if nothing is sliced then it is not extracted
text = ""
is_extracted = IsExtracted.FALSE
return text, is_extracted

Expand Down
Loading