如何从PDF文档中提取全部metes and bounds而非仅单个条目?
提取PDF中全部边界测量(Metes and Bounds)数据的解决方案
问题分析
你已实现PDF文本提取功能,但当前find_metes_and_bounds函数仅能提取单个边界测量条目,无法捕获完整法律文本中的所有相关数据。从提供的完整文本来看,边界测量条目通常包含方向(含方位角/方位词)、距离的结构,比如:
向南(S)00°12'55"西(W)方向行进658.37英尺
沿所述通行权向东北方向行进弦长282.52英尺
解决方案:使用正则表达式匹配所有条目
重写find_metes_and_bounds函数,通过正则表达式匹配所有符合格式的边界测量语句,实现批量提取。
修改后的完整代码
import pytesseract from pdf2image import convert_from_path import os import re def extract_text_from_pdf(pdf_path, poppler_path, tesseract_path): pytesseract.pytesseract.tesseract_cmd = tesseract_path images = convert_from_path(pdf_path, poppler_path=poppler_path) extracted_text = "" for i, image in enumerate(images): image_path = f'temp_image_{i}.png' image.save(image_path) text = pytesseract.image_to_string(image_path) extracted_text += text os.remove(image_path) metes_and_bounds = find_metes_and_bounds(extracted_text) return metes_and_bounds def find_metes_and_bounds(text): # 正则表达式匹配两种类型的边界测量条目: # 1. 含方位角的格式:如"向南(S)00°12'55"西(W)方向行进658.37英尺" # 2. 仅方位词的格式:如"沿所述通行权向东北方向行进弦长282.52英尺" pattern = r'(向[东南西北]+(?:([NSWE]))?\s*(?:\d{1,2}°\d{1,2}\'\d{1,2}\"\s*[NSWE]([东南西北]))?\s*方向行进(?:弦长)?\s*\d+\.\d+\s*英尺|向[东南西北]+方向直线行进至.*起点)' matches = re.findall(pattern, text, re.DOTALL) # 去除匹配结果中的空字符串,整理成列表 return [match.strip() for match in matches if match.strip()] pdf_path = r'C:\Users\user\Desktop\U0102639.pdf' poppler_path = r'C:\Program Files (x86)\poppler-0.68.0\bin' tesseract_path = r'C:\Program Files\Tesseract-OCR\tesseract.exe' metes_and_bounds = extract_text_from_pdf(pdf_path, poppler_path, tesseract_path) # 打印所有提取到的条目 for idx, item in enumerate(metes_and_bounds, 1): print(f"条目{idx}: {item}")
代码说明
- 正则表达式逻辑:
- 覆盖两种边界测量格式:带方位角的精准方向描述,以及仅含方位词的模糊方向描述
- 兼容带英文方位缩写(如(S))的格式,同时捕获包含距离的完整语句
- 补充匹配最后一条“沿东南方向直线行进至所述除外地块的起点”这类特殊条目
- 结果处理:将所有匹配结果整理为非空列表,确保输出所有有效边界测量条目
预期输出
运行代码后,将提取到完整文本中的所有边界测量条目:
条目1: 向南(S)00°12'55"西(W)方向行进658.37英尺 条目2: 向南(S)89°45'44"东(E)方向行进1284.98英尺 条目3: 沿所述通行权向东北方向行进弦长282.52英尺 条目4: 向北(N)73°54'04"西(W)方向行进约1432.68英尺 条目5: 向南(S)00°12'55"西(W)方向行进658.37英尺 条目6: 向南(S)89°45'44"东(E)方向行进1284.98英尺 条目7: 向北(N)89°45'54"西(W)方向行进200英尺 条目8: 向北(N)11°35'44"西(W)方向行进75英尺 条目9: 沿东南方向直线行进至所述除外地块的起点
内容的提问来源于stack exchange,提问作者Mason
相关产品推荐
相关产品推荐

