如何使用Borb通过正则匹配字体名称提取PDF文本?
使用Borb结合正则匹配字体提取PDF文本
核心思路是遍历PDF的每个页面,提取所有文本片段,通过正则表达式匹配片段的字体名称,筛选出符合条件的文本内容。
假设你已经有基础的Borb读取PDF的代码,下面是实现正则匹配字体的完整示例:
from borb.pdf import PDFDocument from borb.pdf.canvas.layout.text.text_fragment import TextFragment from borb.toolkit.text.simple_text_extraction import SimpleTextExtraction import re # 定义匹配字体的正则表达式(匹配以ABCD开头的字体名) FONT_PATTERN = re.compile(r'^ABCD') def extract_text_by_font_regex(pdf_path: str) -> str: extracted_text = [] # 读取PDF文档 with open(pdf_path, "rb") as f: doc = PDFDocument.loads(f) # 遍历每个页面 for page in doc.get_pages(): # 使用SimpleTextExtraction提取页面文本片段 text_extractor = SimpleTextExtraction() page.apply_visitor(text_extractor) # 遍历每个文本片段 for text_fragment in text_extractor.get_text_fragments(): # 获取文本片段的字体名称 font_name = text_fragment.get_font().get_font_name() # 用正则匹配字体名 if FONT_PATTERN.match(font_name): extracted_text.append(text_fragment.get_text()) # 拼接所有符合条件的文本 return '\n'.join(extracted_text) # 调用示例 if __name__ == "__main__": result = extract_text_by_font_regex("your_document.pdf") print(result)
关键部分说明
- 正则表达式:
r'^ABCD'会匹配所有以ABCD开头的字体名称,比如ABCD-Font、ABCD-Bold-Font都能命中。如果需要更精确匹配(比如只匹配以ABCD开头且以Font结尾的),可以修改为r'^ABCD.*Font$'。 - 获取字体名称:通过
text_fragment.get_font().get_font_name()获取当前文本片段使用的字体名。 - 文本收集:将所有匹配成功的文本片段内容拼接成最终结果。
如果你的基础代码是通过其他方式(比如自定义Visitor)实现的,只需要在获取到TextFragment后加入正则匹配的逻辑即可,核心逻辑一致。
内容的提问来源于stack exchange,提问作者IamButtman
相关产品推荐
相关产品推荐

