MCPcopy Create free account
hub / github.com/pymupdf/PyMuPDF / extractWORDS

Method extractWORDS

src/__init__.py:16612–16666  ·  view source on GitHub ↗

Return a list with text word information.

(self, delimiters=None)

Source from the content-addressed store, hash-verified

16610 return rc
16611
16612 def extractWORDS(self, delimiters=None):
16613 """Return a list with text word information."""
16614 if 1 or g_use_extra:
16615 return extra.extractWORDS(self.this, delimiters)
16616 buflen = 0
16617 last_char_rtl = 0
16618 block_n = -1
16619 wbbox = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY) # word bbox
16620 this_tpage = self.this
16621 tp_rect = mupdf.FzRect(this_tpage.m_internal.mediabox)
16622
16623 lines = None
16624 buff = mupdf.fz_new_buffer(64)
16625 lines = []
16626 for block in this_tpage:
16627 block_n += 1
16628 if block.m_internal.type != mupdf.FZ_STEXT_BLOCK_TEXT:
16629 continue
16630 line_n = -1
16631 for line in block:
16632 line_n += 1
16633 word_n = 0 # word counter per line
16634 mupdf.fz_clear_buffer(buff) # reset word buffer
16635 buflen = 0 # reset char counter
16636 for ch in line:
16637 cbbox = JM_char_bbox(line, ch)
16638 if (not JM_rects_overlap(tp_rect, cbbox)
16639 and not mupdf.fz_is_infinite_rect(tp_rect)
16640 ):
16641 continue
16642
16643 if buflen == 0 and ch.m_internal.c == 0x200d:
16644 # ZERO WIDTH JOINER cannot start a word
16645 continue
16646 word_delimiter = JM_is_word_delimiter(ch.m_internal.c, delimiters)
16647 this_char_rtl = JM_is_rtl_char(ch.m_internal.c)
16648 if word_delimiter or this_char_rtl != last_char_rtl:
16649 if buflen == 0 and word_delimiter:
16650 continue # skip delimiters at line start
16651 if not mupdf.fz_is_empty_rect(wbbox):
16652 word_n, wbbox = JM_append_word(lines, buff, wbbox, block_n, line_n, word_n)
16653 mupdf.fz_clear_buffer(buff)
16654 buflen = 0 # reset char counter
16655 if word_delimiter:
16656 continue
16657 # append one unicode character to the word
16658 JM_append_rune(buff, ch.m_internal.c)
16659 last_char_rtl = this_char_rtl
16660 buflen += 1
16661 # enlarge word bbox
16662 wbbox = mupdf.fz_union_rect(wbbox, JM_char_bbox(line, ch))
16663 if buflen and not mupdf.fz_is_empty_rect(wbbox):
16664 word_n, wbbox = JM_append_word(lines, buff, wbbox, block_n, line_n, word_n)
16665 buflen = 0
16666 return lines
16667
16668 def extractXHTML(self) -> str:
16669 """Return page content as a XHTML string."""

Callers 3

get_text_wordsFunction · 0.80
find_tablesFunction · 0.80
get_text_wordsFunction · 0.80

Calls 6

JM_char_bboxFunction · 0.85
JM_rects_overlapFunction · 0.85
JM_is_word_delimiterFunction · 0.85
JM_is_rtl_charFunction · 0.85
JM_append_wordFunction · 0.85
JM_append_runeFunction · 0.85

Tested by

no test coverage detected