Sziasztok!
Ismertek olyan parancssoros eszközt Linux alá, amivel egy szöveges dokumentumból lekérdezhető az oldalak és karakterek száma? Első körben a DOC, DOCX, PDF a téma, és a képként szkennelt dokumentumok nem játszanak.
PDF-hez a pdfinfo jónak tűnik, viszont a DOCX (és különösen a DOC) macera. Több eszközt is próbáltam már, eddig legtovább az exiftool vitt, ami általában jó (és jól feldolgozható) eredményt adott. Viszont most kaptam egy 10 oldalas DOCX-et, ami az exiftool szerint csak egyetlen oldal. A dokumentumban nincs kép, viszont összetettebben formázott (pl. tartalomjegyzék). Sajnos a dokumentumot nem tehetem közzé.
Szóval ez a false eredmény miatt keresek alternatívát. Engem az sem zavarva, ha LibreOffice indulna headless módban, de sajnos nem tudja visszaadni a dokumentum statisztikáját.
Köszönöm!
Hozzászólások
A kerdes masodik felet a ‘wc -c’ megmondja.
Egy formázott, bináris (lásd DOC) dokumentumnál?
Abbol indultam ki, hogy valahogy/valamivel kepes vagy megnyitni, ami reven atadhatod a wc-nek, de ha nem igy van, bocs, nem szoktam ilyesmivel foglalkozni. Ha docx, az egy zip, amiben xml-ben vannak a dolgok, abbol meg esetleg ki lehet imdulni, de ez megint csak tipp.
Edit: sima doc-ot most megneztem, ott bizony a wc siman megmondta a karakterszamot, tegy egy probat, legfeljebb mukodik. :)
Mármint a wc simán megmondta, hogy hány bájt az a file ;)
Viszont vicces, de a sima docrol a 'file' elmondja, hogy szerinte hány char meg world, bár a véleménye a random próbán nem egyezett a libreofficéval.
Én lehet, hogy megpróbálkoznék pandoccal dumpolni a benne levő textet, az egész sok mindent megért, és azt wc-zni. pdfet mondjuk ha jól emlékszem nem beszél, azt valami mással kell 2txt-zni.
Beton biztos így se lesz, lehet hogy némi nézegetés után még utószűrnék szemétre, mert a jó isten se tudja, hogy pl egy táblázat hogy jelenik meg.
A -c igen, byte-tot szamol, de a -m nem, es a probakeppen megnezett file-omom helyesen meg is mondta a character count-ot. :)
Akkor valami nagyon eltérő lehet. Itt egy teszt-dokumentum: https://www.dropbox.com/s/2n4ml18b2dwdd5b/arvizturo.doc?dl=0
Nézd meg, hogy mit mond rá a LibreOffice és mit számol a "wc -m"
Valoban nem jo, en neztem be. Szoval elnezest, nem akartam felrevezeto lenni. Marad ra valami celeszkoz.
.
.doc és .docx esetén az oldalszám elég problémás, ugyanis amit az exiftool mond, azt nem légből kapja, hanem tényleg az szerepel a fájl metaadataiban. Aminek viszont egy szövegszerkesztő esetén gyakorlatilag nincs értelme. Ezeket (ha erőforrásigény nem gond) LO-val PDF-be exportálnám, annak az oldalszámát meg már meg tudtad állapítani.
Van docx2txt, abból a karakterszám megvan (nagyjából, mert pl. a review-k miatt problémáid lesznek). PDF-ben a karakterek számlálása már sokkal keményebb dió, mert ott számolni kellene elválasztójelekkel és a ligatúrákkal. Mire kell? Mennyire kell, hogy pontos legyen?
Szia!
Az oldalak számának pontosnak kell lennie, a karaktereknél kb. 5% eltérés megengedett.
Akkor a PDF-be konvertálás az oldalszámproblémádat megoldja.
De a leütésszám szerintem mindenképpen szívás, annyi sz*rt láttam már bejövő Word fájlokban, hogy automatán 5%-os pontosságot biztosan nem mernék bevállalni. (Mi lesz a változáskövetés karaktereivel, a mezőértékekkel, a rejtett szövegekkel stb.?)
Igen, de azt értsd már meg, hogy a Word doc(x) formátum lényegében egy leírónyelv-alapú formátum, csak a doc bináris, a docx meg XML/plain text alapú. De ezeknek a low level szintjén NEM léteznek oldalak, csak szöveg és formázás, meg beágyazott dolgok. Azt nem tárolja el, hogy mi hányadik oldalra kerül, ezt a Word (meg pl. az LO Writer) dönti el, mikor megnyitja az egész anyagot, és vonatkozó helyi dokumentumsablon és egyéb dokumentum/megjelenítési beállítások alapján elkezdi tördelni, utána derül ki, hogy hány oldal lett. Ezt te kívülről, a vonatkozó programban megnyitást mellőzve nem fogod tudni, hogy hány oldalas. Lényegében ehhez a doksit le kell renderelni a megfelelő programban elejétől a végéig, nem lehet számolgatni, meg trükközni.
Ez épp olyan, mint egy böngészőben megnyitott HTML oldal. Egy doksi, amit tudsz görgetni. Hogy hány oldalas, az attól függ, hogy milyen beállításokkal tördeled pl. nyomtatásnál. Ugyanaz a szöveg/doksi kisebb oldalakra tördelésnél csak még több oldalra fog kiférni.
Ha kiszámítható adatokat akarsz, arra a PDF való, az nem csak minden eszközön és nyomtatón ugyanúgy jelenik meg, de az oldalszám sem változik.
“A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)
Na várj csak, az az érdekes, hogy pl. a docx tartalmazza metadatként az oldalak számát, lásd lejjebb. Csak néhány esetben rosszul.
Hát nem ezt írtuk le többször is? Az egy metaadat, mindenki azt ír bele, amit nem szégyell.
Most direkt megnéztem: a tegnap kapott 22 .docx fájlból 6-nál nem stimmelt. Minden fájlt ugyanattól az embertől, ugyanarról a gépről kaptam.
libreoffice --headless --convert-to txt {*.odt|.docx|...} - | wc -c
De így érdekes számok jöhetnek ki, pl hasábok használata esetén.
+ a pdf-re konvertálás hasonlóan megoldható headless módban, ott meg már lehet oldalakat számolni.
“Any book worth banning is a book worth reading.”
Megelőztél.
Annyival kiegészíteném, hogy vannak olyan Perl modulok (más nyelvhez is biztosan), amik eleve azért jöttek létre, hogy a szövegmanipulációt meg lehessen oldani parancssorból. Úgy emlékszem, a doc fájlokra is létezik modul.
Apache Tika, ki lehet a szöveget extractolni bármilyen állományból (pdf/doc,docx,ppt,excel stb. szövegbányászatra használtuk) https://tika.apache.org/
~ubuntu, raspbian, os x~
Igen, a Tika jó eszköz, végső megoldásként jó lehet, csak (szerintem) nagyon erőforrás-igényes.
Ha nagyon nem megy maskepp, az ujabb office formatumokhoz letezik python library, esetleg le tudod kodolni (meg kell nezni a doksijat). Eddig csak Excelhez hasznaltam, docx-hez nem, nemtom tudja-e alapbol, es ha igen, mennyi kodolas aran.
A strange game. The only winning move is not to play. How about a nice game of chess?
Ilyet nem lehet, amit akarsz. Még csak docx-nél pandoc-kal át lehet konvertálni plain textre, amit wc-be (nem a klozetra gondolok, ha-ha) bepipe-olva ki lehet nyerni szószámot, karakterszámot. De pl. oldalszámot sehogy nem tudsz kinyerni, mert azt a grafikus program tördeli dinamikusan a képernyő felbontása, és grafikus beállításoknak megfelelően.
A doc még problémásabb, mert bináris formátum. Lehet valami nonfree CLI konverter van erre is, amivel át lehet megint pipe-olni a wc parancsnak, de az oldalszámot ezzel is bukod.
Amivel még rá lehetne menni, hogy windowsos gépen vagy virtuális gépen minden vonatkozó doc, docx fájlt ráküldesz egy általad meghatározott default beállításokkal bíró pdf-nyomtatóra, ami szépen pdf-et csinál az összesből, azokat talán meg lehet etetni valami linuxos konverterrel, és kiértékelni az egészet.
“A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)
docx-nél:
docProps/app.xml
<Pages>4</Pages>
<Words>917</Words>
<Characters>6331</Characters>
(Csak egy fájlnál néztem meg, de annál jól mondta.)
És akkor itt jön ki jól, hogy mi a hiba. Itt egy minta-dokumentum, ahol ez az érték 1, ezért az exiftool is ennyit mond. Közben minden általam próbált office program 10 oldalra törte és a statisztikában is ennyit mondott. Viszont ebben következetesek voltak, vagyis mindegyik program beállítástól függetlenül ugyanannyit mondott rá.
Lehetséges, hogy nem Word-del/Writer-rel készült a dokumentum, és a creator program nem foglalkozott a leírófájllal?
Nem tudom, de ide bárki tölthet fel dokumentumot, szóval bármi lehetséges.
Ha megnyitom libreoffice-szal, és elmentem másként, akkor nálam a zip-ben direkt rosszul felvett meta értékeket a libreoffice kicseréli valós értékekre.
(a sima mentés nem működik, ha nincs a fájlban változás, akkor nem ment a LO)
Esetleg egy headless LO-szal egy ideiglenes könyvtárba másolatokat készíteni az összes fájlról, és azokban számolgatni?