Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!news.stack.nl!newsfeed.xs4all.nl!newsfeed1a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.045 X-Spam-Evidence: '*H*': 0.91; '*S*': 0.00; 'board.': 0.05; 'puts': 0.07; 'ascii': 0.09; 'converted': 0.09; 'explanation': 0.09; 'happen.': 0.09; 'next,': 0.09; 'statements': 0.09; 'python': 0.11; 'wrote': 0.14; '"o"': 0.16; '"s"': 0.16; '6:00': 0.16; 'csv': 0.16; 'digits.': 0.16; 'erroneously': 0.16; 'exist.': 0.16; 'fine.': 0.16; 'letters.': 0.16; 'received:195.186': 0.16; 'received:bluewin.ch': 0.16; 'roy': 0.16; 'statement.': 0.16; 'unavailable': 0.16; 'zeroes': 0.16; 'attach': 0.16; 'wrote:': 0.18; 'all,': 0.19; 'bit': 0.19; '(the': 0.22; 'manual': 0.22; 'otherwise,': 0.22; 'header:User-Agent:1': 0.23; 'alternate': 0.24; 'certainly': 0.24; 'parse': 0.24; 'text.': 0.24; "haven't": 0.24; 'looks': 0.24; "i've": 0.25; 'right.': 0.26; 'van': 0.27; 'header:In-Reply-To:1': 0.27; '[1]': 0.29; 'am,': 0.29; 'words': 0.29; "doesn't": 0.30; 'statement': 0.30; 'code': 0.31; 'getting': 0.31; 'too.': 0.31; 'about.': 0.31; 'font': 0.31; 'figure': 0.32; 'text': 0.33; 'reader': 0.33; 'screen': 0.34; "i'd": 0.34; 'info': 0.35; 'display': 0.35; 'problem.': 0.35; 'tool': 0.35; 'but': 0.35; 'google': 0.35; 'there': 0.35; 'format.': 0.36; 'idle': 0.36; 'templates': 0.36; "didn't": 0.36; 'shows': 0.36; 'thanks': 0.36; 'two': 0.37; 'displays': 0.38; 'on-line': 0.38; 'window': 0.38; 'writes': 0.38; 'to:addr:python-list': 0.38; 'pm,': 0.38; 'little': 0.38; 'expect': 0.39; 'does': 0.39; 'pdf': 0.39; 'to:addr:python.org': 0.39; 'how': 0.40; 'even': 0.60; 'letters': 0.60; 'results.': 0.60; 'hope': 0.61; 'color': 0.61; 'conversion': 0.61; 'new': 0.61; "you're": 0.61; 'first': 0.61; "you'll": 0.62; 'complete': 0.62; 'such': 0.63; 'more': 0.64; 'talking': 0.65; 'here': 0.66; 'between': 0.67; 'response.': 0.68; 'smith': 0.68; 'results': 0.69; 'banks': 0.74; 'gotten': 0.74; 'day': 0.76; 'bank': 0.76; 'clip': 0.84; 'lightweight': 0.84; 'pdf.': 0.84; 'played': 0.84; 'suspicion': 0.84; 'drops': 0.91; 'lift': 0.91; 'mistake': 0.91; 'thing,': 0.91; 'inquiry': 0.93; 'lucky': 0.93; 'quotation': 0.93 Date: Sun, 16 Feb 2014 23:38:44 +0100 From: "F.R." User-Agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: python-list@python.org Subject: Re: Puzzling PDF References: <5300C460.8000702@bluewin.ch> In-Reply-To: Content-Type: multipart/mixed; boundary="------------090701090005060808010604" X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 284 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1392590401 news.xs4all.nl 2876 [2001:888:2000:d::a6]:57077 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:66566 This is a multi-part message in MIME format. --------------090701090005060808010604 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 02/16/2014 05:29 PM, Emile van Sebille wrote: > You > On 2/16/2014 6:00 AM, F.R. wrote: >> Hi all, >> >> Struggling to parse bank statements unavailable in sensible >> data-transfer formats, I use pdftotext, which solves part of the >> problem. The other day I encountered a strange thing, when one single >> figure out of many erroneously converted into letters. Adobe Reader >> displays the figure 50'000 correctly, but pdftotext makes it into >> "SO'OOO" (The letters "S" as in Susan and "O" as in Otto). One would >> expect such a mistake from an OCR. However, the statement is not a scan, >> but is made up of text. Because malfunctions like this put a damper on >> the hope to ever have a reliable reader that doesn't require >> time-consuming manual verification, I played around a bit and ended up >> even more confused: When I lift the figure off the Adobe display (mark, >> copy) and paste it into a Python IDLE window, it is again letters (ascii >> 83 and 79), when on the Adobe display it shows correctly as digits. How >> can that be? >> > > > I've also gotten inconsistent results using various pdf to text > converters[1], but getting an explanation for pdf2totext's failings > here isn't likely to happen. I'd first try google doc's on-line > conversion tool to see if you get better results. If you're lucky > it'll do the job and you'll have confirmation that better tools > exist. Otherwise, I'd look for an alternate way of getting the bank > info than working from the pdf statement. At one site I've scripted > firefox to access the bank's web based inquiry to retrieve the new > activity overnight and use that to complete a daily bank reconciliation. > > HTH, > > Emile > > > [1] I wrote my own once to get data out of a particularly gnarly EDI > specification pdf. > > Emile, thanks for your response. Thanks to Roy Smith and Alister, too. pdftotext has been working just fine. So much so that this freak incident is all the more puzzling. It smacks of an OCR error, but where does OCR come in, I wonder. I certainly suspected that the font I was looking at had fives and zeroes identical to esses and ohs, respectively, but the suspicion didn't hold up to scrutiny. I attach a little screen shot: At the top, the way it looks on the statement. Next, two words marked with the mouse. (One single marking, doesn't color the space.) Ctl-c puts both words to the clip board. Ctl-v drops them into the python IDLE window between the quotation marks. Lo and behold: they're clearly different! A little bit of code around displays the ascii numbers. Isn't that interesting? Frederic No matter. You're both right. There are alternatives. The best would be to get the data in a CSV format. Alas, I am so lightweight a client that banks don't even bother to find out what I am talking about. I know how to access web pages programmatically, but haven't gotten around to dealing with password-protected log-ins and to sending such data as one writes into templates interactively. Frederic --------------090701090005060808010604 Content-Type: image/gif; name="pdf-weirdness.gif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pdf-weirdness.gif" R0lGODlhXwFYAuf/AAABAB0AACEAACQBIBIKHhEVFzsLAAwUTRoA/30ADRscGgsfN3YCHC0a BwAQ/1sPABkgJkAA/womQlYE/ykrKAAtjpYAky4V/ycuNKQEkp0WAA0o/0YY/5sYHLEHlGYV /zc5Ngwy/5oSppUXsi9BSz5APUlBIX4sVRM7/wRJr70alJUnxSVF/2VDbB5N/4Mw/8gokFFN l0RXYVRVUxpa/3JB/5Q727JJA5lOIE9hbZk9/2lP/6Y9/yBm/5ZI0YZK/41XgkNh/7xTKSVy zLNbEsZKoSd3/29xbnhugKlZzd1Plzt80KxX/5de/51ok3Jr/51k5QSrAWOCkbBh/X6AfTyM 16Nt3c5mrEaH/7J8ThivKcdm/wqxRTusAzGwDw6zYeZtoGSRw/93ALJ51By0VTSe6/93GIyO i3OTpcZ20GKP//V4Psly/7d4/02xHAG+lRW7fv9/M6GJ8GC0CFaf/95/rP+HEJeZlrmWYH2h ttSA/w/Er/+FXdqRXsiL/3K/DJGe+/+Neoerwf+bBIq+CFC4/7yZ/t6Q/+ugPM6W/qmrqHe0 /6q/APqXpVu+/rqo0+SY/4qz/9me/3W8/WPSYIzJUZK71oTKbG7Pgeeoy2rJ//moqDrc3JjB 3P+3IIrF/sG437nOHuqp/+S4jqbA//u5TOGz1PivwHrP/b/Bvv+zmLvROOWx/8y5/rDRZXff vNPUIu66/43X/nLk3H7jzr7cXF7q8r/O/6jV/szbXM7K//zHwP7TRPTF/63b/PDL19PV0uTM /ufhO/rVep3k/9HV/Hjw+NvT/dvW7/rXk/bO/vjQ/87e8tvni//gZ7zl/6zq//veofrdsPPp W/bY/+Hj4O/rbd7j/Z/2+/3e1e/g7v/c7cz0qe3m1/vg/8Dy//Pxg//i+/vl697zubb5/dv0 1PXo//3zk8f5/9b1/+nw//32qP/w///02Nj8/vz5tPrz//714f/4wvL2/+X8//D69P/2/f/8 2fD9///77Pr+6f78///99Pn+//7//P///yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAP8A LAAAAABfAVgCAAj+AP0JHEiwBIASBBUBAECwoT+FVBqmWhjRocCJACoCmDFQoSKCMxg2pJDR osmTKFOqXMmypcuXMGPKnEmz5sxqiqoNVABAp0CFIk0qPJMQgIKKFhUeHbhw4BkAqUAG9VeN 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 --------------090701090005060808010604--