我正在使用python中的PyMuPDF库在PDF文档中搜索特定文本,然后突出显示它。
pdf_document = fitz.open(pdf_path)
for i in range(len(page_num)):
page=pdf_document[page_num[i]]
for item in search_terms:
search_instances = page.searchFor(item)
for inst in search_instances:
page.addHighlightAnnot(inst)
我可以突出显示PDF文档中除搜索词“毛利”以外的所有术语。 searchFor()返回一个空列表,而不是坐标。这与质量差的PDF有什么关系吗?如果是的话,它也不适用于其他搜索字词。它适用于“营业额”和“销售成本”等字词
有什么想法吗?
答案 0 :(得分:0)
似乎是非文本PDF。
您必须使用像pytesseract这样的OCR将其转换为文本pdf,然后使用fitz对其进行突出显示。
类似的东西应该起作用:
from pdf2image import convert_from_path, convert_from_bytes
from fpdf import FPDF
pytesseract.pytesseract.tesseract_cmd = /pathto/Tesseract-OCR/tesseract.exe'
def string_stream(s, separators="\n"):
start = 0
for end in range(len(s)):
if s[end] in separators:
yield s[start:end]
start = end + 1
if start < end:
yield s[start:end+1]
def multipage_simple(whole_text):
pdf = FPDF(format='letter') #pdf format
pdf.add_page() #create new page
pdf.set_font("Arial", size=12) # font and textsize
cnt = 1
stream = string_stream(normalize(whole_text))
for s in stream:
pdf.cell(200, 10, txt=s, ln=cnt, align="L")
cnt += 1
pdf.output("multipage_simple.pdf", "F")
def get_text_from_pdf_with_ocr(file_name_to_image_pdf):
res = []
seq_of_images = convert_from_path(file_name)
for img in seq_of_images:
text = re.sub(REMOVAL_SPECIAL_CHARACTER_PATTERN, " ", string=pytesseract.image_to_string(img))
res += [text]
return res
然后做:
doc = fitz.open("multipage_simple.pdf")
您可以通过执行以下操作获得全文:
text_ = get_text_from_pdf_with_ocr(pdf_id)
whole_text = reduce(lambda x, y: x + y, text_)