Sziasztok!
Adott egy feladat. Van vagy 3000 db pdf fájl egy mappában. Szét kellene válogatni őket különböző mappákba a fájlokban található azonosító szám alapján. A pdf második sorában van egy szám, az egyezőket kellene egy mappába tenni.
Már ott elakadt a történet, hogy a fájlokból mivel lehet kiolvasni szöveges adatot. Szerencsére nem szkennelt dokumentum.
Valakinek van erre ötlete?
Windowst használunk, de jöhet linuxos javaslat is.
Gondoltam rá, hogy AutiIt-el kijelölöm, kimásolom és beillesztem egy txt-be a számokat, mellé vesszővel elválasztva a fájl nevét, be importálom excelbe és rendezem. Utána meglesz, hogy ki melyik mappába kerül (bár a mappákba dobálást még kézzel kell megcsinálni).
Köszi
- 2286 megtekintés
Hozzászólások
Valami webes alkalmazást egyszer láttam valahol ami a pdf-ekben található adatok alapján szétválogatta őket. De már nemtudom hol és mi volt az :|
---
- Indítsd újra a gépet! - Az egészet? - Nem, a felét...
- A hozzászóláshoz be kell jelentkezni
Ha gépidő nem számít, akkor a pdftotext.
- A hozzászóláshoz be kell jelentkezni
Gépidő nem számít, de az nem az egész pdf-et alakítja át? Erre ránézek.
---
- Indítsd újra a gépet! - Az egészet? - Nem, a felét...
- A hozzászóláshoz be kell jelentkezni
-pdftotext --help
pdftotext version 0.62.0
Copyright 2005-2017 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdftotext [options] []
-f : first page to convert
-l : last page to convert
- A hozzászóláshoz be kell jelentkezni
+1
Mondjuk én úgy csinálnám scriptből végigszaladva a fájlokon, hogy:
1) pdftotexttel kinyomnám az első oldalt txt-be
2) a txt-ben megkeresném (regexp) az azonosítót
3/a) átnevezném az adott pdf-et úgy, hogy azonosító + "-jelenlegi fájlnév" (Így utána lenne egy rakás pdf-em, aminek a nevének az első része maga a kérdéses azonosító. Innentől már a mappába rendezés akár kézzel is megy pár perc alatt.)
3/b) vagy -még mindig a scriptből- a kapott azonosítóval létrehoznék egy mappát -ha még nem létezik- és abba bemásolnám az adott pdf-et
Ennek feltétele persze, hogy az azonsítót regexp-el meg lehessen fogni.
- A hozzászóláshoz be kell jelentkezni
létrehoznék egy mappát -ha még nem létezik-
mkdir -p
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nézz bele notepad-del, biztos felismerhető a szám helye és előtte utána valami, ami regexp-pel (sed?) kinyerhető.
- A hozzászóláshoz be kell jelentkezni
Az ötlet jó, viszont mivel ez formázott szöveg, így csak krix-krax lesz belőle ha direktbe megnyitom egyszerű szövegszerkesztővel.
---
- Indítsd újra a gépet! - Az egészet? - Nem, a felét...
- A hozzászóláshoz be kell jelentkezni
Nem feltétlenül. Sokszor a szöveges tartalom zavartalanul látszik, csak a formázás lesz krix-krax, de ez nem baj, mert neked a tartalom kell.
No keyboard detected... Press F1 to run the SETUP
- A hozzászóláshoz be kell jelentkezni
Negatív. Tömörített formában tárolódik a szöveges tartalom.
- A hozzászóláshoz be kell jelentkezni
Opcionálisan tömörített formában tárolódik a szöveges tartalom.
Lásd az Adobe PDF Reference-ben a következő fejezeteket:
5. Text
2.2.2 Compression
- A hozzászóláshoz be kell jelentkezni
Az "opcionális" az nagyon sok pdf-gyártó program esetében default.
- A hozzászóláshoz be kell jelentkezni
pdftk-val ki lehet csomagolni.
- A hozzászóláshoz be kell jelentkezni
Persze, de a sima grep meg a "belenéz notepad-dal" nem járhat út.
- A hozzászóláshoz be kell jelentkezni
De, simán járható. Írsz egy scriptet, ami végigmegy a mappában lévő összes pdf fájlon, ifilterrel vagy hasonlóval kicsomagolja stdout-ra, amit átpipe-olsz grepbe, az ha ki tud belőle szedni értelmes adatot, annak alapján átmozgatod a scriptben az adott fájlt valami dedikált mappába. Így tökéletesen megoldható, amit a topikindító akar.
No keyboard detected... Press F1 to run the SETUP
- A hozzászóláshoz be kell jelentkezni
grep foo bar.pdf - nem megy, mert bináris trutyi. notepad.exe bar.pdf dettó, mert bináris trutyi. Az, hogy fog egy eszközt, és kicsomagolja/szétkapja a pdf-et, és az így kinyert szöveget maszírozza, az nem sima grep/notepad.exe - szerintem.
- A hozzászóláshoz be kell jelentkezni
for file in *.pdf; do pdftk uncompress (valami ilyesmi) $file; done
Ennyin nem fog múlni...
- A hozzászóláshoz be kell jelentkezni
Én kiszedném az első oldalt, és utána csak azt maszíroznám - az erőforrásigénye mindenképp kisebb, mintha a több odalas pdf-eket uncompress meg grep - ráadásul így lehet egyszerűen az első oldal tartalmára szűkíteni a keresést.
- A hozzászóláshoz be kell jelentkezni
A notepad-ot remélem viccnek írtad. Persze, hogy bináris trugyi, mert be van csomagolva, meg a formázás amúgy is bináris. De ha ki van csomagolva, a bináris formázás nem zavarja meg a grep-et, hogy szöveges infót nyerjen ki belőle. Küldj egy ilyen pdf fájlt, írok rá scriptet, ami szépen végigmegy fájlonként kibontja stdout-ra, onnan grep kiszedi, ami kell, aztán a kinyert tartalom függvényében végre lesz hajtva rajta valami művelet.
Valami ilyesmit, amit itt írtak:
for file in *.pdf; do pdftk uncompress $file | grep minta; done
No keyboard detected... Press F1 to run the SETUP
- A hozzászóláshoz be kell jelentkezni
"( dotnetlinux | 2019. január 25., péntek - 8:31 )
Nézz bele notepad-del, biztos felismerhető a szám helye és előtte utána valami, ami regexp-pel (sed?) kinyerhető."
- A hozzászóláshoz be kell jelentkezni
Ja, így már értem. Mindenesetre a notepad-et semmiképp nem ajánlom. Helyette akkor már Notepad++-szal vagy valami normálisabb szövegszerkesztővel legyen belenézve. Vagy Total Commander File Viewerével. A sima Notepad egy kalap fekáliát nem ér, főleg ha nem a legújabb Win10-es verzió, azzal esetleg meg lehet próbálkozni.
De a kérdező problémájára félautomata megoldások is vannak. Megnyitja egyesével a pdf fájlokat valami Commanderből. Ha beletartozik abba a csoportba, ami releváns, akkor bezárja és a másik panelen kijelöli, lehet 2-nél több panelt is nyitni. Aztán mikor végigért minden fájlon, akkor a különböző panelekről a kijelölt fájlokat a kívánt célmappába átmásolni.
Persze én inkább maradnék a Linuxnál meg a grep-es automata scriptnél.
No keyboard detected... Press F1 to run the SETUP
- A hozzászóláshoz be kell jelentkezni
Ha van kedved egy kicsit kódolni akkor:
PDF-hez létezik IFilter. https://en.wikipedia.org/wiki/IFilter
Ezzel ki lehet szedni a szöveges tartalmat a PDF-ből:
https://supportdownloads.adobe.com/detail.jsp?ftpID=5542
Utána regexp-pel már rátalálhatsz a szükséges azonosítóra.
Illetve még ez is érdekes lehet:
https://www.npmjs.com/package/pdf-to-text
- A hozzászóláshoz be kell jelentkezni
Linuxos javaslatként a less és a grep használata nem lehet megoldás?
Ha nem szkenneltek a pdf-ek, akkor a less meg tudja nyitni őket, így egy less pdf_file | grep -o azonosito_regexp
használatával ki tudod szedni az azonosítószámokat.
- A hozzászóláshoz be kell jelentkezni
A pdfgrep is segíthet a válogatásban.
- A hozzászóláshoz be kell jelentkezni
jujj de szép +1
- A hozzászóláshoz be kell jelentkezni
pythonban írtak egy pdfmacskát (pdfcat)
https://pythonhosted.org/PyPDF2/Easy%20Concatenation%20Script.html
talán ez.
https://github.com/mstamy2/PyPDF2/blob/master/Scripts/pdfcat
usage: pdfcat [-h] [-o output_file] [-v] filename [page range...] ...
Concatenate pages from pdf files into a single pdf file.
Page ranges refer to the previously-named file.
A file not followed by a page range means all the pages of the file.
PAGE RANGES are like Python slices.
Remember, page indices start with zero.
Page range expression examples:
: all pages. -1 last page.
22 just the 23rd page. :-1 all but the last page.
0:3 the first three pages. -2 second-to-last page.
:3 the first three pages. -2: last two pages.
5: from the sixth page onward. -3:-1 third & second to last.
The third, "stride" or "step" number is also recognized.
::2 0 2 4 ... to the end. 3:0:-1 3 2 1 but not 0.
1:10:2 1 3 5 7 9 2::-1 2 1 0.
::-1 all pages in reverse order.
EXAMPLES
pdfcat -o output.pdf head.pdf content.pdf :6 7: tail.pdf -1
Concatenate all of head.pdf, all but page seven of content.pdf,
and the last page of tail.pdf, producing output.pdf.
pdfcat chapter*.pdf >book.pdf
You can specify the output file by redirection.
pdfcat chapter?.pdf chapter10.pdf >book.pdf
In case you don't want chapter 10 before chapter 2.
positional arguments:
filename [page range...]
filenames and/or page ranges
optional arguments:
-h, --help show this help message and exit
-o output_file, --output output_file
-v, --verbose show page ranges as they are being read
-----------------
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Nekem a pdftk jött be hasonló céllal: egy bizonyos mintát akartam eltüntetni rengeteg pdf-ből.
Az első lépés a
pdftk output uncompress
volt.
Innentől a fájl már könnyen kereshető plain text lesz, amiben tetszőlegesen lehet keresni.
- A hozzászóláshoz be kell jelentkezni
pdftk-t mar nem is karbantartjak, ubuntu 18.04-ben benne sincs.
qpdf javasolhato helyette.
qpdf --stream-data=uncompress input.pdf output.pdf
Egyebkent nem lesz a szoveg konnyen olvashato/keresheto, ha egy kicsit tipografiailag tuningolt. Van ugy hogy betunkent van a pdfben a merete allitva...
Pl:
"European Comission" igy nez ki a fajlban:
[(E)18 (ur)8.5 (opean C)10.1 (ommission)]TJ
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Ötlet: nyiss egy topikot a HUP-on, ahol megkérdezed, van-e ötlete valakinek arra, hogyan kell az internetes keresőket alapszinten használni.
Szívesen
:)
- A hozzászóláshoz be kell jelentkezni
belegondolva mélyebben, ez egyáltalán nem triviális kérdés, mármint a keresőket illetően.
- A hozzászóláshoz be kell jelentkezni
Leginkább akkor van baj, ha nem jut eszedbe, melyek azok a kulcsszavak, amellyel keresni lehetne. Jártam már úgy, hogy épp az érdekelt volna, hogyan hívja a szakzsargon illetve a köznyelv azt a kis bigyót, amire szükségem van, viszont éppen ezért az internettől sem tudom egyszerűen megkérdezni. Kerülőúton persze némi idő ráfordításával sikerül a legtöbb esetben.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A keresés egy külön tudomány, könyvtárosok évekig tanulják. Szerintük annyira összetett a dolog, hogy KUTATNI ők tudnak igazán, nem a prof, akinek a talált anyag kell. Kissé leegyszerüsítve ez egy böngészőben használt "extended" keresési menetre is igaz.
Szóval még a keresésnek is vannak fázisai, pl. amikor a zember vakon keres. Kérdezz meg egy könyvtárost, miről beszélek, garantálom, hogy befonod a hajad. (Írom mindezt úgy, hogy polcomon az öt cm vastag tankönyvük egyik kötete, ami csak erről szól)
-----------------
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Felizgattál! :-)
Megtudhatnám annak az 5 centis könyvnek a címét?
---
Science for fun...
- A hozzászóláshoz be kell jelentkezni
google://"extract text from pdf" :-D
- A hozzászóláshoz be kell jelentkezni
Az aktuális feladat esetében annak tűnik. Jó pont, hogy a kérdező felismerte: számára ismeretlen eszközre van szükség a PDF-ből való olvasásra. Ha először erre keres rá, többféle megoldást talál. A találatok között vannak GUI-s alkalmazások, amikkel egyenként vagy kötegelve nyerhet ki szöveget PDF állományokból, míg csomó másikban parancssor vagy szkriptnyelv segítségével olvassák ki a szöveget. A találatok között sok a példa, illetve egy részük eleve automatizált olvasásról és a kiolvasott szöveg felhasználásáról szól. Tehát ha az első felismert akadály alapján keresést indít, nem csupán az akadály leküzdéséhez szükséges információkhoz jut hozzá, hanem a továbblépéshez is segítséget kap. Olvasgat, és előbb-utóbb rájön, hogy az automatizáláshoz a példákban látott ciklust is fel kell használnia. Kiválasztja a számára szimpatikus példát, így már van egy X nyelven megvalósított PDF-olvasó ciklusa. Mi hiányzik? Fájlműveletek az X nyelvben. Arra is rákeres. Ekkor még keresgél és olvasgat egy kicsit, és összerakja a szkriptet. Nem működik? Semmi baj, feljön a HUP-ra, és megkérdezi, hol a hiba. Régen ez volt a dolgok normális menete.
:)
- A hozzászóláshoz be kell jelentkezni
bezzeg a te idodben...
- A hozzászóláshoz be kell jelentkezni
Ez kicsit programozosabb hozzaallas, de lehet bongeszoben full javascript is:)
A pdf-bol javascripttel ki lehet venni a text-et:
Live demo:
http://git.macropus.org/2011/11/pdftotext/example/
Egy cikk:
https://ourcodeworld.com/articles/read/405/how-to-convert-pdf-to-text-e…
(ez masik verziot hasznal, ezt is frissiteni kell).
szoval az elgondolas ugy nezne ki, hogy a user kivalasztja a 3000 filet bongeszobol, majd visszakapja konyvtarszerkezetben .zip fajlban :)
Bonyolult az igaz:) De lehet full kliens oldal is:)
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni