Поиск по блогу

вторник, 28 апреля 2015 г.

Пытаемся упростить обработку файлов pdf AEB, но находим новые ошибки

Если скачивать отчеты AEB о продажах автомобилей каждый месяц, то как лучше вытаскивать 3 таблицы из pdf-файла? Сначала вызвать конвертер pdftotext при помощи subprocss, конвертировать и сохранить в текстовый файл, потом из него скопипастить все таблицы в отдельные ячейки. Исправить ручками все ошибки в таблицах, и только после этого привести таблицы к единому формату с помощью Pandas. И я все сделал для первой таблицы февраля 2015г., но вторая и третья таблицы пришли с ошибками, чтобы их понять пришлось их сравнивать со скриншотами оригинальных таблиц и вариантом копипаста прямо из pdf-файла. Итак, я здесь начал со ссылок на subprocss, потом "вспомнил" .str.

Начинаем с конвертера pdftotext

Только разбирая ошибки в конце этого поста я понял, как трудно конвертеру приходится с формированием таблиц и что, пожалуй, я был неправ, когда написал класс для пакетной обработки pdf-файлов. Из особенностей конвертера отметим только, что для Linux и Windows опции отличаются.

In [ ]:
# Path to pdftotxt.exe and his options for Windows 8
CONVERTER = r'"C:/Program Files/Xpdf/bin64/pdftotext.exe"'
OPTIONS = r' -table'
In [23]:
# Path to pdftotxt.exe and his options for Linux Debian
CONVERTER = r'pdftotext'   # r'"/usr/bin/pdftotext"'
OPTIONS = r' -layout'
In [35]:
# pdf file path
#pdffolder = '/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all/'
pdffile_path = "/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all/eng_car-sales-in-march-2015.pdf"
# target txt file path
#txtfolder = '/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all_txt/'
txtfile_path = r'"/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all_txt/eng_car_sales_in_march_2015.txt"'

Обратите внимание, здесь приходится менять шаблон названия файла, поскольку в ассоциации новый молодой администратор... eng_car-sales-in-march-2015.pdf на eng_car_sales_in_march_2015.txt

In [37]:
import pandas as pd
import numpy as np
from cStringIO import StringIO
In [32]:
import subprocess
In [38]:
from StringIO import StringIO
In [33]:
def pdftotext(pdffile_path, txtfile_path, converter=CONVERTER,
                    options=OPTIONS):
        """
        pdftotext [options] [PDF-file [text-file]]
        """
        
        pdftostdout = converter + options + ' ' + pdffile_path + ' ' + txtfile_path
        print pdftostdout
        
        # Call external process pdftotxt.exe
        myProcess = subprocess.Popen(
        pdftostdout,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)

        out, error = myProcess.communicate()
        #out, error
In [36]:
pdftotext(pdffile_path, txtfile_path)
pdftotext -layout /media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all/eng_car-sales-in-march-2015.pdf "/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all_txt/eng_car_sales_in_march_2015.txt"
In [30]:
print pdffile_path
print txtfile_path
"/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all/eng_car_sales_in_march_2015.pdf"
"/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all_txt/eng_car_sales_in_march_2015.txt"
In [101]:
colnames_2015_t1 = ['Brandt', \
                  '2015m1', '2014m1', '1514m1', \
                  '2015y1', '2014y1', '1514y1']

Скопипастим сюда первую таблицу февраля (!!! март будет в следующем посте)

In [81]:
t1 = """
Lada                                          23,639                    30,896                 -23%                  41,131                  54,543                -25%
Hyundai*                                      13,233                    13,901                  -5%                  25,940                  24,945                4%
KIA                                           12,563                    13,303                  -6%                  23,909                  24,502                -2%
Nissan*                                        9,447                    17,158                 -45%                  18,548                  28,209                -34%
Renault*                                       9,100                    16,721                 -46%                  17,909                  29,615                -40%
 Toyota*                                        7,143                    11,892                 -40%                  14,292                  20,211                -29%
 VW                                             5,804                    11,390                 -49%                  11,969                  19,989                -40%
 Škoda                                          5,618                    6,384                  -12%                  10,743                  11,128                -3%
 Mercedes-Benz*                                 4,151                    3,520                  18%                    7,326                   6,230                18%
 BMW                                            3,550                    3,356                   6%                    6,095                   5,896                3%
 Mitsubishi                                     3,323                    6,817                  -51%                   6,543                  11,824                -45%
 Chevrolet                                      3,255                    12,448                 -74%                   6,305                  21,868                -71%
 GAZ LCV*                                       2,970                    4,527                  -34%                   4,798                   7,787                -38%
 Datsun                                         2,904                       -                      -                   5,837                      -                  -
 Mazda                                          2,381                    3,899                  -39%                   4,765                   6,747                -29%
 UAZ*                                           2,260                    2,903                  -22%                   4,513                   5,104                -12%
 Audi                                           2,092                    2,905                  -28%                   3,502                   4,528                -23%
 Daewoo                                         1,639                    4,536                  -64%                   3,654                   8,254                -56%
 Ford*                                          1,399                    6,306                  -78%                   3,212                  10,556                -70%
 Land Rover                                     1,183                    1,867                  -37%                   1,958                   2,789                -30%
 Opel                                            912                     6,610                  -86%                   1,985                  10,891                -82%
 Subaru                                          836                     1,374                  -39%                   1,752                   2,312                -24%
 Lexus                                           791                       714                  11%                    1,481                   1,421                4%
 Volvo                                           757                     1,143                  -34%                   1,027                   1,545                -34%
 Lifan                                           721                     1,548                  -53%                   1,484                   2,666                -44%
 Geely                                           681                     1,687                  -60%                   1,131                   2,845                -60%
 VW vans                                         672                     1,058                  -36%                   1,280                   2,007                -36%
 SsangYong                                       561                     2,007                  -72%                   1,294                   3,337                -61%
 Mercedes-Benz vans                              444                       459                   -3%                    749                     771                 -3%
 Infiniti                                        419                       833                  -50%                   1,109                   1,304                -15%
 Suzuki                                          416                     1,707                  -76%                    871                    3,189                -73%
 Great Wall                                      402                     1,402                  -71%                    807                    2,334                -65%
  Chery                                           402                     1,709                  -76%                    770                    2,846                 -73%
 Porsche                                         381                       174                  119%                    575                     300                  92%
 Citroёn*                                        380                     2,192                  -83%                    860                    3,912                 -78%
 Peugeot*                                        377                     2,354                  -84%                    795                    4,197                 -81%
 FIAT*                                           345                       581                  -41%                    641                     988                  -35%
 Honda                                           252                     2,484                  -90%                    636                    4,413                 -86%
 Jeep                                            235                       609                  -61%                    440                    1,029                 -57%
 Brilliance                                      144                        -                      -                    241                       -                   -
 MINI                                            116                       148                  -22%                    207                     230                  -10%
 Acura**                                          89                        -                      -                    162                       -                   -
 Jaguar                                           75                       157                  -52%                    134                     251                  -47%
 Isuzu*                                           74                        5                  1380%                    103                      33                 212%
 JAC                                              38                        -                      -                     53                       -                   -
 Cadillac                                         34                       97                   -65%                     72                     177                  -59%
 smart                                            32                       20                   60%                      51                      37                  38%
 BAW*                                             24                       118                  -80%                     53                     231                  -77%
 Haima                                            20                       21                    -5%                     61                      41                  49%
 Chrysler                                          8                       14                   -43%                     12                      21                  -43%
 Foton*                                            3                        3                    0%                       4                       5                  -20%
 SEAT                                              2                       112                  -98%                     33                     184                  -82%
 Alfa Romeo                                        1                        -                      -                      4                       -                   -
 FAW                                               -                       234                     -                      -                     536                   -
 ZAZ                                               -                       113                     -                      -                     214                   -
 Changan                                           -                       50                      -                      -                      50                   -
 TagAZ*                                            -                       22                      -                      -                      28                   -
 Luxgen                                            -                       15                      -                      -                      27                   -
 Bogdan                                            -                       14                      -                      -                      70                   -
 Izh                                               -                        5                      -                      -                      15                   -
 Dodge                                             -                        4                      -                      -                       6                   -
"""
In [102]:
pdt1 = pd.read_csv(StringIO(t1), names=colnames_2015_t1, \
                     na_values=['-','n/a'], \
                     sep=' {4,}', thousands=',')
In [103]:
pdt1.tail(10)
Out[103]:
Brandt 2015m1 2014m1 1514m1 2015y1 2014y1 1514y1
51 SEAT 2 112 -98% 33 184 -82%
52 Alfa Romeo 1 NaN NaN 4 NaN NaN
53 FAW NaN 234 NaN NaN 536 NaN
54 ZAZ NaN 113 NaN NaN 214 NaN
55 Changan NaN 50 NaN NaN 50 NaN
56 TagAZ* NaN 22 NaN NaN 28 NaN
57 Luxgen NaN 15 NaN NaN 27 NaN
58 Bogdan NaN 14 NaN NaN 70 NaN
59 Izh NaN 5 NaN NaN 15 NaN
60 Dodge NaN 4 NaN NaN 6 NaN
In [104]:
pdt1[:5]
Out[104]:
Brandt 2015m1 2014m1 1514m1 2015y1 2014y1 1514y1
0 Lada 23639 30896 -23% 41131 54543 -25%
1 Hyundai* 13233 13901 -5% 25940 24945 4%
2 KIA 12563 13303 -6% 23909 24502 -2%
3 Nissan* 9447 17158 -45% 18548 28209 -34%
4 Renault* 9100 16721 -46% 17909 29615 -40%

Итак, оказалось, что Pandas вполне прилично использует регулярные варажения sep=' {4,}'. Более того, поскольку для регулярных выражений используется парсер Python, а не 'C', то и пропуск строк с ошибками пришлось отключить. А это правильно, я уже начал забывать, что "потерял" так несколько строк в предыдущем посте.

Добавим столбец даты

In [108]:
pdt1['Datem'] = '28-2-2015'

Почистим столбцы

In [98]:
pdt1.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 61 entries, 0 to 60
Data columns (total 7 columns):
Brandt    61 non-null object
2015m3    53 non-null float64
2014m3    56 non-null float64
1514m3    48 non-null object
2015y3    53 non-null float64
2014y3    56 non-null float64
1514y3    48 non-null object
dtypes: float64(4), object(3)
memory usage: 3.1+ KB

Удалить '%' и сменить формат на числовой (Важно! )

In [105]:
pdt1['1514y1'] = pdt1['1514y1'].str.replace('%','').astype(float)
pdt1['1514m1'] = pdt1['1514m1'].str.replace('%','').astype(float)
In [ ]:
####Нужно ли убирать в первом столбце '*' ??? Пока не знаю. Отредактирую эту строчку, если решу убирать
In [ ]:
# Тест 
pdt1['Brandt'].str.replace('*','').astype(object)
pdt1['Brandt'].tail()
  1. LCV sales are included into total brand’s sales if exist in the product line of the brand (marked with*); reported separately for some brands. LCV<3,5t (with several exceptions reaching highest range of 6t). Some updates concerning LCV data may occur.

LCV sales - продажи легких коммерческих автомобилей

In [106]:
pdt1.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 61 entries, 0 to 60
Data columns (total 7 columns):
Brandt    61 non-null object
2015m1    53 non-null float64
2014m1    56 non-null float64
1514m1    48 non-null float64
2015y1    53 non-null float64
2014y1    56 non-null float64
1514y1    48 non-null float64
dtypes: float64(6), object(1)
memory usage: 3.6+ KB
In [110]:
pdt1.head(3)
Out[110]:
Brandt 2015m1 2014m1 1514m1 2015y1 2014y1 1514y1 Datem
0 Lada 23639 30896 -23 41131 54543 -25 28-2-2015
1 Hyundai* 13233 13901 -5 25940 24945 4 28-2-2015
2 KIA 12563 13303 -6 23909 24502 -2 28-2-2015
In [109]:
pdt1.tail(3)
Out[109]:
Brandt 2015m1 2014m1 1514m1 2015y1 2014y1 1514y1 Datem
58 Bogdan NaN 14 NaN NaN 70 NaN 28-2-2015
59 Izh NaN 5 NaN NaN 15 NaN 28-2-2015
60 Dodge NaN 4 NaN NaN 6 NaN 28-2-2015
In [ ]:
#### Теперь сохраним обект в CSV-файл

Идеальным было бы сохранить файл под тем же именем, что и оригинал..., но, естественно, с соответствующим расширением... Да не тут-то было. В оригинале в имени файла вместо подчерков тире. А мне нужна возможность для фильтра пакетной обработки файлов в папке. Так что про имя оригинала лучше забыть.

In [111]:
print pdffile_path
print txtfile_path
/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all/eng_car-sales-in-march-2015.pdf
"/media/MYLINUXLIVE/Documents/Xpdf/aebru_2015_all_txt/eng_car_sales_in_march_2015.txt"
In [112]:
!ls /media/MYLINUXLIVE/Documents/Xpdf/
AEB_2014_4      aeb_papers      aebru_2014_all_txt  aerbu_2014_all_csv   aerbu_2015_all_csv
AEB_2014_4_tab3.csv  AEBru_2014_4    aebru_2015_all  aerbu_2014_all_csv_new   text1.html
AEB_2014_4.txt      aebru_2014_all  aebru_2015_all_txt  aerbu_2014_all_csv_new2014.csv  text1.txt
In [113]:
!mkdir /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2015_all_csv
mkdir: cannot create directory `/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2015_all_csv': File exists

Посмотрим, как я планировал структуру папок:

In [114]:
!ls /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv
1  1aug  1aug2 1feb  2  2aug  2aug2  2feb  3  3aug  3aug2  3feb

В этой папке мне пришлось разместить подпапки с результатами работы разных парсеров. А изначально я планировал всего три подпапки для трех таблиц Таким образом, в каждой папке свой файл февраля. Не знаю, зачем нужны подпапки, если я все равно ставлю 1-3 в имени файла..., пока решил, что проще будет сосчитать 12 файлов, чем 36...

In [115]:
!ls /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2015_all_csv
1  1jan  2  2jan  3  3jan

Шаблон для имени - исправить имя файла

In [120]:
t1name = 'eng_car_sales_in_feubrary_2015.csv'
t1folder = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2015_all_csv/1/'
In [118]:
colnames = list(pdt1.columns.values)
colnames
Out[118]:
['Brandt', '2015m1', '2014m1', '1514m1', '2015y1', '2014y1', '1514y1', 'Datem']
In [121]:
pdt1.to_csv(t1folder + t1name, 
        sep=';', 
        #float_format='%.8f',
        columns=colnames,
        index=False)
In [ ]:
                                2015       2014         YOY         2015           2014            YoY           2015         2014       YOY          2015           2014      Yo
In [ ]:
pdt2 =""""
 
 AVTOVAZ-RENAULT-NISSAN          35.5       31.8         3.7       45,509         65,608         -30.6%           34.7        31.6        3.1        84,534         113,671   -25.6%
 
 AVTOVAZ                         18.4       15.0         3.4       23,639         30,896         -23.5%           16.9        15.2        1.7        41,131         54,543    -24.6%
 RENAULT                          7.1        8.1       (1.0)        9,100         16,721         -45.6%            7.3         8.2       (0.9)       17,909         29,615    -39.5%
 NISSAN                           7.4        8.3       (0.9)        9,447         17,158         -44.9%            7.6         7.9       (0.3)       18,548         28,209    -34.2%
 INFINITI                         0.3        0.4       (0.1)         419            833          -49.7%            0.5         0.4        0.1         1,109          1,304    -15.0%
 Datsun                           2.3          -          -        2,904             -              -              2.4           -          -        5,837             -         -
 VW Group                        11.1       10.6         0.5       14,188         21,849         -35.1%           11.3        10.5        0.8        27,527         37,836    -27.2%
 VOLKSWAGEN cars                  4.5        5.5       (1.0)        5,804         11,390         -49.0%            4.9         5.6       (0.7)       11,969         19,989    -40.1%
 VOLKSWAGEN vans                  0.5        0.5         0.0         672           1,058         -36.5%            0.5         0.6       (0.1)        1,280          2,007    -36.2%
 AUDI                             1.6        1.4         0.2        2,092          2,905         -28.0%            1.4         1.3        0.1         3,502          4,528    -22.7%
 SEAT                             0.0        0.1       (0.1)           2            112          -98.2%            0.0         0.1       (0.1)          33           184      -82.1%
 ŠKODA                            4.4        3.1         1.3        5,618          6,384         -12.0%            4.4         3.1        1.3        10,743         11,128    -3.5%
 HYUNDAI                         10.3        6.7         3.6       13,233         13,901           -4.8%          10.6         6.9        3.7        25,940         24,945    4.0%
 KIA                              9.8        6.4         3.4       12,563         13,303          -5.6%            9.8         6.8        3.0        23,909         24,502     -2.4%
 TOYOTA Group                     6.2        6.1         0.1       7,934          12,606         -37.1%            6.5         6.0        0.5        15,773         21,632    -27.1%
 TOYOTA                           5.6        5.8       (0.2)        7,143         11,892         -39.9%            5.9         5.6        0.3        14,292         20,211    -29.3%
 LEXUS                            0.6        0.3         0.3         791            714            10.8%           0.6         0.4        0.2         1,481          1,421    4.2%
 MERCEDES-BENZ                    3.6        1.9         1.7        4,627          3,999           15.7%           3.3         2.0        1.3         8,126          7,038    15.5%
 MERCEDES-BENZ
                                  3.2        1.7         1.5                                                       3.0         1.7        1.3
 cars                                                               4,151          3,520           17.9%                                              7,326          6,230    17.6%
 MERCEDES-BENZ
                                  0.3        0.2         0.1                                                       0.3         0.2        0.1
 vans                                                                444            459            -3.3%                                               749           771      -2.9%
 smart                            0.0        0.0         0.0          32            20            60.0%            0.0         0.0        0.0          51             37       37.8%
 GM Group                         3.3        9.3       (6.0)        4,201         19,155         -78.1%            3.4         9.2       (5.8)        8,362         32,936    -74.6%
 OPEL                             0.7        3.2       (2.5)         912           6,610         -86.2%            0.8         3.0       (2.2)        1,985         10,891    -81.8%
 CHEVROLET                        2.5        6.0       (3.5)        3,255         12,448         -73.9%            2.6         6.1       (3.5)        6,305         21,868    -71.2%
 CADILLAC                         0.0        0.0         0.0          34             97          -64.9%            0.0         0.0        0.0          72             177     -59.3%
 BMW Group                        2.9        1.7         1.2        3,666          3,504          4.6%             2.6         1.7        0.9         6,302          6,126     2.9%
 BMW                              2.8        1.6         1.2        3,550          3,356           5.8%            2.5         1.6        0.9         6,095          5,896    3.4%
 MINI                             0.1        0.1         0.0         116            148          -21.6%            0.1         0.1        0.0          207           230      -10.0%
 MITSUBISHI                       2.6        3.3       (0.7)        3,323          6,817         -51.3%            2.7         3.3       (0.6)        6,543         11,824    -44.7%
 GAZ LCV                          2.3        2.2         0.1        2,970          4,527         -34.4%            2.0         2.2       (0.2)        4,798          7,787    -38.4%
 MAZDA                            1.9        1.9         0.0        2,381          3,899         -38.9%            2.0         1.9        0.1         4,765          6,747    -29.4%
 UAZ                              1.8        1.4         0.4        2,260          2,903         -22.1%            1.9         1.4        0.5         4,513          5,104    -11.6%
 DAEWOO                           1.3        2.2       (0.9)        1,639          4,536         -63.9%            1.5         2.3       (0.8)        3,654          8,254    -55.7%
 FORD                             1.1        3.1       (2.0)        1,399          6,306         -77.8%            1.3         2.9       (1.6)        3,212         10,556    -69.6%
 JAGUAR LAND ROVER                1.0        1.0         0.0        1,258          2,024         -37.8%            0.9         0.8        0.1         2,092         3,040     -31.2%
 LAND ROVER                       0.9        0.9         0.0        1,183          1,867         -36.6%            0.8         0.8        0.0         1,958          2,789    -29.8%
  JAGUAR                           0.1        0.1         0.0          75            157          -52.2%            0.1         0.1        0.0          134            251     -46.6%
 SUBARU                           0.7        0.7         0.0         836           1,374         -39.2%            0.7         0.6        0.1         1,752          2,312    -24.2%
 PSA PEUGEOT
                                  0.6        2.2       (1.6)         757           4,546         -83.3%            0.7         2.3       (1.6)        1,655          8,109    -79.6%
 CITROЁN
 PEUGEOT                          0.3        1.1       (0.8)         377           2,354         -84.0%            0.3         1.2       (0.9)         795           4,197    -81.1%
 CITROЁN                          0.3        1.1       (0.8)         380           2,192         -82.7%            0.4         1.1       (0.7)         860           3,912    -78.0%
 VOLVO                            0.6        0.6         0.0         757           1,143         -33.8%            0.4         0.4        0.0         1,027          1,545    -33.5%
 LIFAN                            0.6        0.7       (0.1)         721           1,548         -53.4%            0.6         0.7       (0.1)        1,484          2,666    -44.3%
 GEELY                            0.5        0.8       (0.3)         681           1,687         -59.6%            0.5         0.8       (0.3)        1,131          2,845    -60.2%
 CHRYSLER Group                   0.5        0.6       (0.1)         589           1,208         -51.2%            0.4         0.6       (0.2)        1,097          2,044    -46.3%
 FIAT                             0.3        0.3         0.0         345            581          -40.6%            0.3         0.3        0.0          641            988     -35.1%
 CHRYSLER                         0.0        0.0         0.0           8             14          -42.9%            0.0         0.0        0.0           12            21      -42.9%
 JEEP                             0.2        0.3       (0.1)         235            609          -61.4%            0.2         0.3       (0.1)         440           1,029    -57.2%
 DODGE                                -      0.0          -            -              4               -             -          0.0          -            -             6        -
 ALFA ROMEO                       0.0          -          -            1              -               -            0.0           -          -            4             -        -
 SSANGYONG                        0.4        1.0       (0.6)         561           2,007         -72.0%            0.5         0.9       (0.4)        1,294          3,337    -61.2%
 SUZUKI                           0.3        0.8       (0.5)         416           1,707         -75.6%            0.4         0.9       (0.5)         871           3,189    -72.7%
 CHERY                            0.3        0.8       (0.5)         402           1,709         -76.5%            0.3         0.8       (0.5)         770           2,846    -72.9%
 GREAT WALL                       0.3        0.7       (0.4)         402           1,402         -71.3%            0.3         0.6       (0.3)         807           2,334    -65.4%
 PORSCHE                          0.3        0.1         0.2         381            174          119.0%            0.2         0.1        0.1          575            300      91.7%
 HONDA Group                      0.3        1.2       (0.9)         341           2,484         -86.3%            0.3         1.2       (0.9)         798           4,413    -81.9%
 HONDA                            0.2        1.2       (1.0)         252           2,484         -89.9%            0.3         1.2       (0.9)         636           4,413    -85.6%
 ACURA                            0.1          -          -           89              -               -            0.1           -          -          162             -        -
 BRILLIANCE                       0.1          -          -          144              -               -            0.1           -          -          241             -        -
 ISUZU                            0.1        0.0         0.1          74              5         1380.0%            0.0         0.0        0.0          103            33      212.1%
 JAC                              0.0          -          -           38              -               -            0.0           -          -           53             -        -
 BAW                              0.0        0.1       (0.1)          24            118          -79.7%            0.0         0.1       (0.1)          53            231     -77.1%
 HAIMA                            0.0        0.0         0.0          20             21            -4.8%           0.0         0.0        0.0           61            41      48.8%
 FOTON                            0.0        0.0         0.0           3              3            0.0%            0.0         0.0        0.0            4             5      -20.0%
 CHANGAN                              -        -          -            -             50               -             -            -          -            -            50        -
 LUXGEN                               -      0.0          -            -             15               -             -            -          -            -            27        -
 TAGAZ                                -      0.0          -            -             22               -             -          0.0          -            -            28        -
 FAW                                  -      0.1          -            -            234               -             -          0.1          -            -            536       -
 ZAZ                                  -      0.1          -            -            113               -             -          0.1          -            -            214       -
 IZH                                  -      0.0          -            -              5               -             -          0.0          -            -            15        -
 BOGDAN                               -      0.0          -          -             14              -                -          0.0          -         -               70         -

"""

Вот это подарочек! Что со строками? Оказывается - конвертер сработал хорошо, именно так и в оригинальном файле:

In [2]:
Image('/home/kiss/Desktop/Screenshot from 2015-04-28 10:42:44.png') 
Out[2]:

Обратите внимание, строки идут "лестницей"... Конвертер еще добавил сюда пустые строки:

In [ ]:
 MERCEDES-BENZ                    3.6        1.9         1.7        4,627          3,999           15.7%           3.3         2.0        1.3         8,126          7,038    15.5%
 MERCEDES-BENZ
                                  3.2        1.7         1.5                                                       3.0         1.7        1.3
 cars                                                               4,151          3,520           17.9%                                              7,326          6,230    17.6%
 MERCEDES-BENZ
                                  0.3        0.2         0.1                                                       0.3         0.2        0.1
 vans                                                                444            459            -3.3%                                               749           771      -2.9%
 smart                            0.0        0.0         0.0          32            20            60.0%            0.0         0.0        0.0          51             37       37.8%
 
In [ ]:
 
In [ ]:
 
In [ ]:
pdt3 =""""
 1          Granta            Lada            10,583       11,280        (697)                          1       Granta              Lada              18,320        19,535   (1,215)
 2          Solaris           Hyundai          8,001       8,660         (659)                          2       Solaris             Hyundai           16,218        15,607    611
 3          New Rio           KIA              6,059       5,874           185                          3       New Rio             KIA               11,236        11,198     38
 4          4x4               Lada             3,779       3,148           631                          4       Logan               Renault            6,790        6,792      (2)
 5          Largus            Lada             3,443       4,792        (1,349)                         5       4x4                 Lada               6,727        5,462    1,265
 6          Logan             Renault          3,424       3,788         (364)                          6       Polo                VW                 5,927        8,941    (3,014)
 7          Duster            Renault          2,951       7,541        (4,590)                         7       Duster              Renault            5,694        13,131   (7,437)
 8          Priora            Lada             2,740       4,090        (1,350)                         8       on-DO               Datsun             5,548          -         -
 9          Camry             Toyota           2,718       2,870         (152)                          9       Largus              Lada               5,346        8,584    (3,238)
 10         ix35              Hyundai          2,681       2,733          (52)                          10      Kalina              Lada               5,184        10,450   (5,266)
 11         Kalina            Lada             2,658       6,186        (3,528)                         11      Camry               Toyota             4,827        4,399     428
 12         on-DO             Datsun           2,615           -            -                           12      ix35                Hyundai            4,760        5,078    (318)
 13         Polo              VW               2,603       5,105        (2,502)                         13      Priora              Lada               4,730        7,414    (2,684)
 14         Almera            Nissan           2,464       4,481        (2,017)                         14      Almera              Nissan             4,725        7,474    (2,749)
 15         Niva              Chevrolet        2,394       3,625        (1,231)                         15      Sandero             Renault            4,408        6,386    (1,978)
 16         Rapid             Skoda            2,250           -            -                           16      Niva                Chevrolet          4,391        6,247    (1,856)
 17         Sandero           Renault          2,242       3,591        (1,349)                         17      Rapid               Skoda              4,198          -         -
 18         Octavia A7        Skoda            2,135       3,028         (893)                          18      Octavia A7          Skoda              4,129        5,467    (1,338)
 19         New Cee'd         KIA              2,093       1,758           335                          19      RAV 4               Toyota             3,420        4,817    (1,397)
 20         Juke              Nissan           1,746       2,295         (549)                          20      New Cee'd           KIA                3,395        4,023    (628)
 21         Qashqai           Nissan           1,446       2,860        (1,414)                         21      Qashqai             Nissan             3,352        5,012    (1,660)
                                                                                                                New
 22         ASX               Mitsubishi       1,413       2,175         (762)                          22                          KIA                2,906         790     2,116
                                                                                                                Sorento
 23         CX-5              Mazda            1,400       1,770         (370)                          23      ASX                 Mitsubishi         2,877        3,648    (771)
 24         RAV 4             Toyota           1,378       2,537        (1,159)                         24      Juke                Nissan             2,788        3,512    (724)
            New
 25                           KIA              1,329         490           839                          25      Sportage            KIA                2,743        5,273    (2,530)

"""

А здесь что-то пошло не так после строки 21. Для полноты картины просто скопипастим эти таблицы и PDF файла, а потом добавим скриншот проблемных фрагментов.

In [ ]:
1 Granta Lada 10,583 11,280 (697) 1 Granta Lada 18,320 19,535 (1,215)
2 Solaris Hyundai 8,001 8,660 (659) 2 Solaris Hyundai 16,218 15,607 611
3 New Rio KIA 6,059 5,874 185 3 New Rio KIA 11,236 11,198 38
4 4x4 Lada 3,779 3,148 631 4 Logan Renault 6,790 6,792 (2)
5 Largus Lada 3,443 4,792 (1,349) 5 4x4 Lada 6,727 5,462 1,265
6 Logan Renault 3,424 3,788 (364) 6 Polo VW 5,927 8,941 (3,014)
7 Duster Renault 2,951 7,541 (4,590) 7 Duster Renault 5,694 13,131 (7,437)
8 Priora Lada 2,740 4,090 (1,350) 8 on-DO Datsun 5,548 - -
9 Camry Toyota 2,718 2,870 (152) 9 Largus Lada 5,346 8,584 (3,238)
10 ix35 Hyundai 2,681 2,733 (52) 10 Kalina Lada 5,184 10,450 (5,266)
11 Kalina Lada 2,658 6,186 (3,528) 11 Camry Toyota 4,827 4,399 428
12 on-DO Datsun 2,615 - - 12 ix35 Hyundai 4,760 5,078 (318)
13 Polo VW 2,603 5,105 (2,502) 13 Priora Lada 4,730 7,414 (2,684)
14 Almera Nissan 2,464 4,481 (2,017) 14 Almera Nissan 4,725 7,474 (2,749)
15 Niva Chevrolet 2,394 3,625 (1,231) 15 Sandero Renault 4,408 6,386 (1,978)
16 Rapid Skoda 2,250 - - 16 Niva Chevrolet 4,391 6,247 (1,856)
17 Sandero Renault 2,242 3,591 (1,349) 17 Rapid Skoda 4,198 - -
18 Octavia A7 Skoda 2,135 3,028 (893) 18 Octavia A7 Skoda 4,129 5,467 (1,338)
19 New Cee'd KIA 2,093 1,758 335 19 RAV 4 Toyota 3,420 4,817 (1,397)
20 Juke Nissan 1,746 2,295 (549) 20 New Cee'd KIA 3,395 4,023 (628)
21 Qashqai Nissan 1,446 2,860 (1,414) 21 Nissan 3,352 5,012 (1,660)
22 ASX Mitsubishi 1,413 2,175 (762) 22 KIA 2,906 790 2,116
23 CX-5 Mazda 1,400 1,770 (370) 23 Qashqai Mitsubishi 2,877 3,648 (771)
                                   New 
                                   Sorento 
                                   ASX 
24 RAV 4 Toyota 1,378 2,537 (1,159) 24 Juke Nissan 2,788 3,512 (724)
   New 
   Sorento 
KIA 1,329 490 839 25 Sportage KIA 2,743 5,273 (2,530)
25

Здесь после строки 23 явно виден "сбой". Если открыть исходный pdf файл и просто скопипастить данные, начиная со строки "23 CX-5 ...", то после перехода курсора на вторую строчку в левой таблице, в правой выделятся ячейки вот так:

In [1]:
from IPython.display import Image
Image('/home/kiss/Desktop/Screenshot from 2015-04-28 10:20:39.png') 
Out[1]:

Мы не знаем, как и из чего (какой) конвертер создавал этот pdf файл. Так что надежда только на то, что наш конвертер pdftotext "исправит" ситуацию. Здесь в Linux не исправил, надо попробовать в Windows, там есть опция -table

Однако, если мы вернемся к таблице выше (после конвертера), то порадуемся тому, что конвертер споткнулся только на одной ячейке:

In [ ]:
New
Sorento

По сути, он (конвертер) сработал отлично. Вставил "New" выше, а "Sorento" ниже "KIA ...". Так и получились лишние две строки... в районе 23 номера... И последняя 25 тоже со вставками, причем я еще и потерял последнее слово "Sorento" при копипасте.



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий