首页 > 解决方案 > 如何将表中的多行数据转换为通过强迫症提取的单行?

问题描述

我有一个 PDF(附件),它使用 OCR 转换为 .txt。OCR 输出看起来像

'2 VERFEN 100MCG NO11909 - Verve AMPO 1.00 47.70 0.00 47.70 47.70\n',

 'INJECTION 2ML 28/02/202 ULE\n',

 '(FENTANYL) 2 HEGCUNIE\n',

 'VERVE\n',

 '3 ADRENOR 4MG INABA294 AMPO 2.00 112.88 0.00 112.88 112.88\n',

 'INJECTION 2ML oe ULE\n',

 '(NORADRENALINE 31/08/202 HEGORINIE\n',

 ') SAMARTH 1\n',

 '4 CELHEP; 50001U; HP11941A Celon NOS 3.00 267.00 0.00 267.00 267.00\n',

 'INJECTION; \n',

 '(HEPARIN); 30/06/202 HEGGUNJE\n',

 'CELON 2\n',

在此处输入图像描述

我需要这种格式的输出

'2 VERFEN 100MCG INJECTION 2ML (FENTANYL) VERVE NO11909 - 28/02/2021 Verve AMPO ULE 1.00 47.70 0.00 47.70 47.70\n',


'3 ADRENOR 4MG INJECTION 2ML (NORADRENALINE) SAMARTH   INABA2942 -31/08/202 AMPO ULE 2.00 112.88 0.00 112.88 112.88\n',


'4 CELHEP; 50001U; INJECTION; (HEPARIN);  CELON   HP11941A 30/06/2022 Celon NOS 3.00 267.00 0.00 267.00 267.00\n',

最终,我需要保留表格格式信息。

标签: pythonpandasocr

解决方案


这不是一个优化的解决方案。

如果所需输出中每行的第一个字符应始终是数字后跟空格,那么您的问题可以分解为识别模式,然后编写代码以连接行直到下一个模式。

识别字符串开头数字的正则表达式是^'[0-9]{2,3,4}

正则表达式将查找一位、两位、三位或四位数字。请注意后面的空格,}以确保我们正在查看正确的模式。这个正则表达式适用于

'2 VERFEN 100MCG NO11909 - Verve AMPO 1.00 47.70 0.00 47.70 47.70\n',
'INJECTION 2ML 28/02/202 ULE\n',
'(FENTANYL) 2 HEGCUNIE\n',
'VERVE\n'

但不是为了

'2 VERFEN 100MCG NO11909 - Verve AMPO 1.00 47.70 0.00 47.70 47.70\n',
'INJECTION 2ML 28/02/202 ULE\n',
'(FENTANYL) \n',
'2 HEGCUNIE\n',
'VERVE\n'

两个2将分别处理。

您在代码中的逻辑可能如下所示 -

  1. 声明临时字符串变量
  2. 执行 3 到 5 直到文件结束
  3. 读取文件中的每一行
  4. 如果模式匹配,1. 将临时字符串变量写入文件, 2. 清除临时字符串变量。
  5. 从末尾删除\n,'并将该行连接到临时字符串变量

如果您不希望第一行为空白,您可能需要处理第一次写入文件。


推荐阅读