前端工程师 后段工程师_工程师如何在会计中生存
前端工程師 后段工程師
經營自己的“樂趣”之一就是處理會計。
現在,為了生存,我嘗試了一些類似的操作:
- 為我的客戶生成發票
- 處理銀行對帳單
一件無聊的事情是整理我必須支付的收據和發票:差旅費,書本費,會議費等。您明白了。
為什么我需要使用軟件在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
前端工程師 后段工程師
總結
以上是生活随笔為你收集整理的前端工程师 后段工程师_工程师如何在会计中生存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动力电池编码追溯系统_如何保持动力以继续
- 下一篇: html5中平铺图片,HTML布局排版2