求助:将Tesseract识别扫描PDF的文本转换为规范CSV/DataFrame
解决方案:整理Tesseract提取的血液检测数据为结构化DataFrame
我来帮你搞定这个血液检测数据整理的问题!你遇到的核心问题是原始提取文本没有清晰的条目分隔,直接按空格或换行拆分肯定会乱。咱们用正则表达式精准匹配每个指标条目,就能完美分成你想要的两列格式了。
步骤1:预处理原始文本
先把提取文本里的干扰符号(比如¢、/、—这些无关字符)去掉,同时合并多余的空格:
import re import pandas as pd # 你从Tesseract拿到的原始提取文本 raw_text = "Haemoglobin 13.5 14-16 g/dl Random Blood Sugar 186 60 - 160 mg/dl Random Urine Sugar Nil ¢ Blood Urea 43 14-40 mg/dl 4 — Serum Creatinine 2.13 0.4-1.5 mg/dl Serum Uric Acid 4.9 3.4-7.0 mg/dl Serum Sodium 142 135 - 150 meq/L / Serum Potassium 2.6 3.5-5.0 meq/L Total Cholesterol] 146 110 - 160 mg/dl Triglycerides 162 60 - 180 mg/d]" # 清理文本:移除特殊符号,合并连续空格 cleaned_text = re.sub(r'[¢/—\]]', '', raw_text) cleaned_text = re.sub(r'\s+', ' ', cleaned_text).strip()
步骤2:用正则表达式拆分每个指标条目
观察每个指标的结构:指标名称(首字母大写的单词序列) + 检测值+参考范围+单位。我们用正则匹配这个固定模式,精准拆分每个条目:
# 正则模式:匹配指标名称,再匹配后续的检测详情,直到下一个大写开头的指标前结束 pattern = r'([A-Z][a-zA-Z\s]+?)\s+([0-9.Nil\s-]+?)(?=\s+[A-Z]|$)' matches = re.findall(pattern, cleaned_text) # 整理匹配结果:去掉每个字段的多余空格 processed_data = [] for indicator, details in matches: processed_data.append([indicator.strip(), details.strip()])
步骤3:转换为DataFrame并导出CSV
现在把整理好的列表转成DataFrame,就是你想要的两列结构了:
# 生成DataFrame df = pd.DataFrame(processed_data, columns=['指标名称', '检测值及参考范围']) # 打印结果 print(df) # 导出为CSV(可选) df.to_csv('blood_test_results.csv', index=False)
最终输出效果
运行后你会得到结构化的表格:
指标名称 检测值及参考范围 0 Haemoglobin 13.5 14-16 g/dl 1 Random Blood Sugar 186 60 - 160 mg/dl 2 Random Urine Sugar Nil 3 Blood Urea 43 14-40 mg/dl 4 Serum Creatinine 2.13 0.4-1.5 mg/dl 5 Serum Uric Acid 4.9 3.4-7.0 mg/dl 6 Serum Sodium 142 135 - 150 meq/L 7 Serum Potassium 2.6 3.5-5.0 meq/L 8 Total Cholesterol 146 110 - 160 mg/dl 9 Triglycerides 162 60 - 180 mg/dl
这个方法靠正则精准识别指标边界,完美适配你提取的文本格式,再也不会出现拆分错位的问题啦。
内容的提问来源于stack exchange,提问作者Aishwarya Venkat
相关产品推荐
相关产品推荐

