OCR购买收据中的字符串替换

时间:2018-07-18 21:04:26

标签: google-apps-script ocr google-docs text-manipulation

我所拥有的是Google文档中OCR标记的沃尔玛收据(沃尔玛允许您通过电子邮件将自己的收据 .jpg 版本发送给自己,并且可以使用Google文档打开该图片,在此期间,它使用OCR提取文本。效果极佳,几乎没有错误。)

以下是OCR实际收据的链接: https://docs.google.com/document/d/1zSV09UGajna4DPtrHUrB6F82NugpYjaftMjomoKVXpE/edit?usp=sharing

我已经使用Google文档对OTC进行了数百笔沃尔玛收据。 OCR的文档存在一些格式问题,因此,我写了一些代码来帮助对其进行规范化,这是将我的所有收据存入数据库的一个更大目标的一部分。

虽然我能够解决许多格式替换问题,但是我仍然试图用制表符替换“ TAX 1”和“ TAX 2”之后的百分号,以便随后将“在新行中输入“ TAX 2”税。我注意到%符号将总是,后跟换行符,然后是下一个税的实际数值(对于“ TAX 1”和“ TAX 2”)行:

OCR文本示例:

SUBTOTAL 126.61 TAX 1 6.750 %
7.78 TAX 2 2.000 %
0.23 TOTAL 134.62

所需的输出文本:

SUBTOTAL    126.61 
TAX 1 6.750 %   7.78
TAX 2 2.000 %   0.23
TOTAL   134.62

目标:

  • 每个(SUBTOTAL,TAX 1,TAX 2和TOTAL)都换行。 (可行)
  • 每个后面都有一个制表符(SUBTOTAL,TAX 1,TAX 2和TOTAL),以便每个制表符的制表符都停止。 (可行)
  • 我想只用一个百分号和一个制表符替换(空格+百分号+换行符)(认为7.78应该在换行符被取出时“上升”一行)(这是失败了)

我可以使用regex选项使用Google Docs UI中的CTRL-F“查找和替换”菜单来完成此操作,而不会出现任何问题,但是我无法编写Apps脚本函数来做到这一点。我到处搜寻。我意识到GAS中的RegEx是有限的。但是我不知道这是否是我的问题,还有什么解决方法。同样,我对RegEx知之甚少,无法知道GAS支持的受限版本是否不是造成我问题的原因(例如,我是否忽略了某些内容)。


这是我用于格式化的代码摘录:

var body = DocumentApp.getActiveDocument().getBody();
/**
 * other formatting stuff
 */

//Find SUBTOTAL, remove the space before SUBTOTAL and move it down one line.
body.replaceText(' SUBTOTAL', '\n\nSUBTOTAL\t');

//Find TAX 1, remove the space before TAX 1 and move it down one line.
body.replaceText(' TAX 1', '\nTAX 1\t');

//Find TAX 2, remove the space before TAX 2 and move it down one line.
body.replaceText(' TAX 2', '\nTAX 2\t');

//Find TOTAL, replace it.
body.replaceText('TOTAL', '\nTOTAL\t');

//Find PERCENT SIGN AND ADD A NEWLINE AFTER IT, replace it all with a tab character.
body.replaceText("[ %\n]","\t");

前4个替换项效果很好。它的最后一个(百分号)不起作用。我试图这样逃避百分号:

body.replaceText("[ \%\n]","\t");

body.replaceText("[ \\%\n]","\t");

我试图这样删除括号:

body.replaceText(" \%\n","\t");

body.replaceText(" \\%\n","\t");

但坦率地说,每个收据都给出不同的结果-严重弄乱了整个收据文本。

所以百分号是问题-我想。

如何解决“ TAX 1”和“ TAX 2”行的格式?


OCR全文收据示例:https://docs.google.com/document/d/1zSV09UGajna4DPtrHUrB6F82NugpYjaftMjomoKVXpE/edit?usp=sharing

1 个答案:

答案 0 :(得分:1)

您要将共享文档的文本替换为所需的值。您想要的值可以通过我的注释中的脚本检索。如果我的理解是正确的,那怎么办?

在我的注释的示例脚本中,将检索整个文本并将其替换为所需的值。当这种情况反映到文档中时,该示例脚本如何?使用此脚本时,请执行以下操作。

  1. 打开共享文档。
  2. 打开脚本编辑器。
  3. 将示例脚本复制并粘贴到脚本编辑器中。
  4. 运行myFunction()。
  5. 授权范围。
  6. 请参阅文档。

示例脚本:

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var newText = body.getText()
    .match(/(SUBTOTAL[\s\S]+?)VISA/)[1]
    .replace(/TAX/g, "\nTAX")
    .replace(/ TOTAL/g, "\nTOTAL\t")
    .replace(/%\n/g, "%\t");
  body.clear();
  body.setText(newText);
}

如果这不是您想要的,对不起。