前端工程师 后段工程师

经营自己的“乐趣”之一就是处理会计。

现在,为了生存,我尝试了一些类似的操作:

  • 为我的客户生成发票
  • 处理银行对帐单

一件无聊的事情是整理我必须支付的收据和发票:差旅费,书本费,会议费等。您明白了。

为什么我需要使用软件在PDF文件中查找日期

理想情况下,我希望有一个工具可以将收据与银行对账单中的行进行匹配,并生成一些报告,这些报告可能会使我的业务顾问感到非常高兴。

这样做的第一步是拥有一个工具,该工具可以使一堆PDF可以将日期与它们关联。 一旦获得日期,我便知道要考虑的银行对账单的哪几行,并且可以进行匹配(也许还要考虑金额)。

第一步:从PDF中提取文本

有两种可能的情况:PDF已经包含文本,或者PDF是简单的图像,我们需要使用OCR技术识别文本。

在第一种情况下,事情相对容易。 我们使用PDFBox提取文本:

fun getTextInPdf(fileName: String): List<PieceOfText> {val reader = PdfReader(FileInputStream(File(fileName)))val n = reader.numberOfPagesvar i = 0val listener = MyTextRenderListener()val processor = PdfContentStreamProcessor(listener)while (i<n) {val page = reader.getPageN(i + 1)val resourcesDic = page.getAsDict(PdfName.RESOURCES)processor.processContent(ContentByteUtils.getContentBytesForPage(reader, i + 1), resourcesDic)i++}reader.close()return listener.process()
}

但是,当然,现实生活总是会带来惊喜。 有些PDF每段包含一个块(太棒了!),而另一些PDF 每个字母则包含一个块。   这意味着我们必须查看每个字母的位置,看看它是否与另一个字母相邻。 在这种情况下,我们需要将它们合并以获得单词。

如果PDF中没有文本,则需要采用OCR技术。 我使用过用C ++编写的tesseract 。 为了在JVM中使用它,我使用了javacpp-presets 。

一旦获得了文本块,就需要将其分成单词序列。 这部分相对容易,但并不像预期的那么琐碎,因为我们需要跟踪每个单词的确切位置。 因此,在单词中分割一个块时,需要进行一些数学运算才能找到每个单词的边界。

第二步:识别日期

我们现在有很多话。 我们需要查看它们并找到与日期相对应的单词序列。

现在,日期可能以各种奇怪的格式出现。 还请考虑我有英文(英国和美国),法语,德语和意大利语的收据。

让我们看一些例子。

首先是经典的DD / MM / YY:

  • 15/04/2016
  • 18-06-2016
  • 2016年1月1日

有时您可以找到YY / MM / DD来代替:

  • 2016-05-13

该月份可以用任何语言的字母表示:

  • 2016年5月7日
  • 2016年6月18日
  • 2016年4月22日
  • 2016年6月1日
  • 2016年4月12日

也可以缩写为:

  • 2016年4月14日
  • 2016年4月12日

当然,有些日期无法确定,因为美国人在某个时候认为将日期的月份和日期倒置是个好主意。 因此,如果我读2/3/2016,则可能是3月2日或2月3日。 这意味着某些日期是不明确的。

第三步:确定哪个日期是订单的日期

现在,发票可以包含许多不同的日期。 考虑以下示例:

一个日期的顺序(在法国COMMANDE)的声音,另一种是公司的登记日期。 这绝对是我们不感兴趣的日期。

还有其他示例:

或再次:

我们如何处理这种情况?

好吧,我们使用了一系列启发式方法,这些方法在大多数情况下似乎都有效。 最有力的方法之一是在日期附近寻找有意义的单词,例如, 制造/发票/ fattura或命令/ 突击队/领队。 我们还可以使用字体大小和日期在页面上的位置。

这些技巧总是奏效吗? 没有。

他们经常工作吗? 是的,他们有。

结论

首先,让我与大家分享我对美国人选择的日期格式的热烈赞赏。 我觉得这是个好主意,一点也不愚蠢和不幸。 实际上,这是造成痛苦的主要原因,也是造成错误的首要原因。

我的大部分收据都是电子格式,其中包含文字。 在少数需要使用OCR的情况下,它似乎工作得足够好。

最后,我对这个原型非常满意,因为经过一些调整后,它似乎可以在90%的时间内正确猜出。 不错,真不错。

哦,嗯,​​我想我得回到我的会计了。

您是否想自动化一些事情以简化生活?

翻译自: https://www.javacodegeeks.com/2016/09/engineer-supposed-survive-accounting.html

前端工程师 后段工程师

前端工程师 后段工程师_工程师如何在会计中生存相关推荐

  1. 软件测试岗位英文自我介绍,软件测试工程师自我介绍_工程师英文自我介绍范文...

    [www.gpsvo.com--网络知识] 工程师在面试做自我介绍时知道如何做英文自我介绍吗?英语的工程师自我介绍要怎么说呢?下面小编为你整理了工程师英文自我介绍范文,欢迎阅读. 工程师英文自我介绍范 ...

  2. python工程师工作总结_工程师的第一份工作小结

    时间过的真快,前不久才写了篇<对做技术的一点思考>博文,那时刚刚决定自己第一份工作的去处.现在,我已经在工作单位工作了将近2个月了.晚上回到住处,抽出休息时间小小回顾下这段时间的收获.这里 ...

  3. 前端大型开源项目_在大型开源项目中管理问题

    前端大型开源项目 We're honored by the amount of positive feedback we get from folks using Flutter. As one of ...

  4. modelmap前端怎么取值_【ModelMap】jsp中显示springmvc modelmap传递的对象

    最近在做一个小网站,功能非常基础,决定用springmvc搭建. 遇到一个问题,在controller向前端传值时,比如使用ModelMap传了一个字符串,modelmap.addattribute( ...

  5. 前端工程师 后段工程师_如何像工程师一样思考

    前端工程师 后段工程师 In my time in the tech field, I have learned that it really doesn't matter what tools or ...

  6. python前端开发和后端开发工程师_一文看懂前端和后端开发

    作为一名开发者,你可能会想:2019 年最好的软件开发技术和编程语言会是什么?它们又是如何被应用在软件开发当中的?如果你在思考这个问题,那就来对地方了.这篇文章将对前端和后端开发技术做一个对比,先从基 ...

  7. 嵌入式软件开发工程师面试指南_总结

    嵌入式软件开发工程师面指南 一.C语言 1.1.局部变量能否和全局变量重名 1.2.如何用C编写死循环 1.2.new和malloc 1.3.static的用法(定义和用途)(必考) 1.4.cons ...

  8. 视觉工程师面试指南_选择正确视觉效果的终极指南

    视觉工程师面试指南 When it comes to effective data visualization, the very first and also the most critical s ...

  9. 网络工程师常备工具_网络安全工程师应该知道的10种工具

    网络工程师常备工具 If you're a penetration tester, there are numerous tools you can use to help you accomplis ...

最新文章

  1. python教程是什么课文_新手快速入门Python必看这篇文章
  2. dhcp 中继代理配置方法
  3. sicily 1034. Forest
  4. python中的any与all函数的区别
  5. redis zset usage
  6. 喜报|聚焦信创——360云计算管理平台生态建设的又一里程碑!
  7. PyTorch:卷积/padding/pooling api
  8. MarkDown下载和安装
  9. 零基础小白深度学习入门篇
  10. 整理总结:英语口语发音技巧
  11. 修复Windows 10远程桌面复制粘贴不了的5种方法
  12. FlexRay汽车通信总线介绍及测试环境
  13. 【PHP版】顺丰下单API 、查询订单API、取消订单API
  14. php手写签名保存,PHP+JS实现PC端+移动端PDF手写签名合并
  15. 3706 teradata 语句报错_TERADATA中函数的使用
  16. 2021年安全生产模拟考试(全国特种作业操作证焊工作业-钎焊模拟考试题库二)安考星
  17. 网页设计作业成品下载Dreamweaver网页FrontPage网页html静态
  18. BiFunction
  19. 三星数据系统(西安)20190222
  20. python动物专家系统_用Python实现一个动物识别专家系统--人工智能作业分享

热门文章

  1. 界面相当华丽HTC G11西安报价2450元
  2. 蚂蚁监控平台 - antmonitor架构设计
  3. unordered_map详细介绍
  4. 基于MRS-Hudi构建数据湖的典型应用场景介绍
  5. 1.8寸TFT屏幕显示汉字 PcToLCD2002完美版配置
  6. Environment.SpecialFolder的值的含义(本地打印)
  7. 找回淘宝的“高级搜索”功能
  8. 轻量迅捷时代,Vite 与Webpack 谁赢谁输
  9. 兔子、狼、老虎的故事
  10. 动态规划之子序列以及子数组类型的问题