OCR 购买收据中的字符串替换
String replacement in OCR'd purchase receipts
我拥有的是 Google 文档中的 OCR 沃尔玛收据(沃尔玛允许您通过电子邮件将 .jpg 版本的收据发送给自己,并且这个图片可以用Google Docs打开,在打开的时候用OCR提取文字,结果非常好,错误很少。)
这是来自 OCR 的实际收据 link:
https://docs.google.com/document/d/1zSV09UGajna4DPtrHUrB6F82NugpYjaftMjomoKVXpE/edit?usp=sharing
我使用 Google 文档对数百张沃尔玛收据进行了 OCR。 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
Objective:
- 每个(SUBTOTAL、TAX 1、TAX 2 和 TOTAL)换行。 (这个有效)
- 每个(SUBTOTAL、TAX 1、TAX 2 和 TOTAL)之后都应该有一个制表符,以便每个的数值都与制表符相隔。 (这个有效)
- 我想用一个百分号和一个制表符替换(space+百分号+换行符)(认为 7.78 应该 "rise" 一行,因为换行符是取出(这是失败的地方).
我可以使用 Google 文档 UI 中的 CTRL-F "Find and Replace" 菜单执行此操作,使用正则表达式选项没有任何问题,但我无法编写 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
您想将共享文档的文本替换为您想要的值。您想要的值可以通过我评论中的脚本检索。如果我的理解是正确的,这个怎么样?
在我评论的示例脚本中,检索了整个文本并将其替换为您想要的值。当这种情况反映到文档中时,这个示例脚本如何?当您使用此脚本时,请按如下操作。
- 打开共享文档。
- 打开脚本编辑器。
- 将示例脚本复制并粘贴到脚本编辑器。
- 运行 myFunction().
- 授权范围。
- 查看文档。
示例脚本:
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);
}
如果这不是你想要的,我很抱歉。
我拥有的是 Google 文档中的 OCR 沃尔玛收据(沃尔玛允许您通过电子邮件将 .jpg 版本的收据发送给自己,并且这个图片可以用Google Docs打开,在打开的时候用OCR提取文字,结果非常好,错误很少。)
这是来自 OCR 的实际收据 link: https://docs.google.com/document/d/1zSV09UGajna4DPtrHUrB6F82NugpYjaftMjomoKVXpE/edit?usp=sharing
我使用 Google 文档对数百张沃尔玛收据进行了 OCR。 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
Objective:
- 每个(SUBTOTAL、TAX 1、TAX 2 和 TOTAL)换行。 (这个有效)
- 每个(SUBTOTAL、TAX 1、TAX 2 和 TOTAL)之后都应该有一个制表符,以便每个的数值都与制表符相隔。 (这个有效)
- 我想用一个百分号和一个制表符替换(space+百分号+换行符)(认为 7.78 应该 "rise" 一行,因为换行符是取出(这是失败的地方).
我可以使用 Google 文档 UI 中的 CTRL-F "Find and Replace" 菜单执行此操作,使用正则表达式选项没有任何问题,但我无法编写 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
您想将共享文档的文本替换为您想要的值。您想要的值可以通过我评论中的脚本检索。如果我的理解是正确的,这个怎么样?
在我评论的示例脚本中,检索了整个文本并将其替换为您想要的值。当这种情况反映到文档中时,这个示例脚本如何?当您使用此脚本时,请按如下操作。
- 打开共享文档。
- 打开脚本编辑器。
- 将示例脚本复制并粘贴到脚本编辑器。
- 运行 myFunction().
- 授权范围。
- 查看文档。
示例脚本:
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);
}
如果这不是你想要的,我很抱歉。