Notxor tiene un blog

Defenestrando la vida

Krei epub arĥivon

2020-12-13

Mi hodiaŭ parolos pri la transformadon de dosiero pdf al dosiero epub por pli bone legi esperante. Mi montros ilon, kiun mi faris, kaj klarigos kiel ĝi funkcias por faciligi, ke iu ajn povos adapti ĝin por si mem. Ni uzos Emacs kaj elisp por kontroli tiun OCR procezon, kiun ni bezonas por tiuj dosieroj, kiuj enhavas bildajn skanadojn de teksto. La celo estas konverti nian pdf dosieron farita de skanitaj bildoj al epub dosieron por pli bone legi en nia inklibro aŭ tabuleto. Mi laboras per Linukso sed la rezulto estas sendependa de la operaciumo kiun ni uzas. Mi iomete parolos pri kiuj programoj mi uzas por tiuj laboroj.

Mi proponis multe pli legi por praktiki Esperanton sed ne ĉiam oni trovas interesan kaj oportunan legadon. Mi parolas precipe pri oportuna. Rete oni trovas multajn dosierojn, kutime je pdf por praktiki la legadon esperante. Kiam la pdf dosieron enhavas veran tekston estas pli facila konverti la dosieron. Eble nur devas transdoni al teksto kaj poste al html, epub aŭ alia ajn speco de dosiero ke ni bezonas.

Ni havas:

Captura-pantalla_pdf.png

sed ni volas:

Captura-pantalla_epub.png

por povi legi tiel:

Foto_lector.jpg

Do, ni bezonas kelkajn ilojn por fari nian laboron:

  1. Konvertilo por bildformato: ni uzos la ilon pdfimages kiu prenas la paĝojn de la pdf kaj skribas en sendependaj bildoj.
  2. OCR ilo: ni uzos tesseract-ocr, kiu permesas traduki per multaj lingvoj, inter ili Esperanto.
  3. Emacs por uzi ĝian skriptan lingvaĵon.

Ankaŭ ni povas fari la laboron sen Emacs nur per bash, sed finfine ni bezonos ajnan skriptan lingvaĵon. Kial mi uzas elisp? Ĉar tiu ilo estas taŭga por labori kun tekstojn kaj havas tre potenca ilo por labori kun dokumentoj: org-mode.

Aliflanke ni devas ankaŭ preni la enajn bildojn por la lasta paŝo de nia procezo.

Konverti dosieron

Mi klarigos kiel mi faras por konverti pezan pdf, farita de skanitaj bildoj, ĝis atingi sufiĉan bonan epub por legi per mia bitlibro. Tiu legado estas pli agrabla ol legi la originan pdf per tiu ilo. La teksto aranĝas al ekrano kaj faciligas bonan sperton de legado.

Ni povas fari la laboron mane:

  1. Preni la bildon de la pdf dosiero:

    pdfimages -png -f 1 -l 10 dosiero.pdf paĝo
    

    Tiu kreas bildoj de la paĝo-001.png al paĝo-010.png.

  2. Konverti la bildoj en teksto:

    tesseract -l epo paĝo-001.png paĝo-001
    

    Tiu metas la teksto legita de la bildo paĝo-001.png en paĝo-001.txt. La formo -l epo por Esperanto. Vi povas scii la lingvojn kiu komprenas tesseract per la komando tesseract --listlangs.

  3. Aranĝi ĉiu la dosieroj txt en unu sola dosiero. Pro tiu ni povas uzi teksredaktilon.

Tio estas teda, paĝo al paĝo kaj ankaŭ ni povas enmeti erarojn, ripeti ajnan paĝon, forgesi alian, ktp. Ankaŭ, finfine ni devas pritrakti la tekston per teksredaktilo... do, kial ni ne uzas teksredaktilon kiu havas skriptan lingvon por aŭtomatigi la taskon. Mi uzas Emacs.

Kodo

Mi skribis la sekvantan kodon por aŭtomatigi la proceson en komandara dosiero nomita konverti-ocr.el:

;;; konverti-ocr.el

;; La variabloj de la procezo.

(defvar dosiero ""
  "Variablo kiu enhavas la nomon de la dosiero por konverti.")
(defvar komenco 0
  "Paĝa numero kie komencas la procezon.")
(defvar fino 0
  "Paĝa numero kie finas la procezon.")
(defvar lingvo ""
  "Lingvo de la listo `tesseract --listlangs`")

(defun komencu ()
  "Sarĝu la variabloj por la procezo."
  (setq dosiero (org-entry-get (point) "dosiero"))
  (setq komenco (string-to-number (org-entry-get (point) "de")))
  (setq fino    (string-to-number (org-entry-get (point) "gxis")))
  (setq lingvo  (org-entry-get (point) "lingvo")))

(defun pritrakti-paĝo (num)
  "Enmeti la tekston kreata en la /punkto/."
  (message "Konverti paĝon %s" num)
  ;; Habigi la bildon
  (call-process-shell-command (format "pdfimages -png -f %d -l %d %s paĝo" num num dosiero))
  ;; Habigi la tekston
  (call-process-shell-command (format "tesseract -l %s paĝo-000.png temporal" lingvo))
  ;; Enmeti la tekston en la /punkto/
  (insert-file-contents "temporal.txt")
  ;; Forigi la temapajn dosierojn
  (shell-command "rm paĝo-000.png temporal.txt"))

(defun pritrakti-ocr ()
  "Lanĉas la taskon por konverti bildan pdf al teksto."
  (interactive)
  (komencu)       ; Establece las variables globales
  (mapc 'pritrakti-paĝo (number-sequence fino komenco -1)))

Mi preparas la dosieron kie ni enmetos la tekston de la konvertado:

* Prologo
  :PROPERTIES:
  :de:       20
  :gxis:     34
  :dosiero:  ./la-mastro-de-la-ringoj.pdf
  :lingvo:   epo
  :END:

Ni devas rimarki ke en la PROPERTIES difinoj ne povas uzi ĉapelitajn literiojn.

Por fari tion, ni devas unue voki nian kodon per load-file konveri-ocr.el. Ĉi tiu komando en Emacs legas la kodon kaj poste ni povos uzi la komandon M-x pritrakti-ocr. Nian kodon komencos leganta de la paĝo 34 ĝis la 20. Tiel ĝi faras por korekte ordigi la paĝon en la dosieron.

La rezulton estas:

Captura-pantalla_konvertado.png

Kiel ni povas vidi, la rezulto estas sufiĉe bona por komenci labori. Ni devas forigi la paĝan numeron inter la teksto, korekti erarajn literojn. Tiu estas la plej teda tasko por konverti librojn. Sed Emacs helpas min ĉar oni povas uzi aŭtokorektadon de teksto por Esperanto. Sed la laboro de purigo neniam finiĝas, kiel ni vidos je la fino.

Kiam la teksto estas sufiĉe purigita (aŭ mi pensas tion) mi konvertas la dosieron, en nia ekzemplo nomita probo-dosieron.org al html aranĝo. Emacs faciligas tiun taskon: mi nur devas uzi la komandon C-c C-e h h kaj ĝi kreos la dosieron probo-dosieon.html. Poste, tiuj html dosieroj poste estos aranĝitaj en la epub dosiero.

Preti fontojn

Captura-pantalla_font-forge.png

Eble, mi povus legi la tekston sen plia laboro, sed mi estas sibarita leganto kaj ne nur volas, sed bezonas, belajn librojn. Do mi devas pli labori por fari ilin.

La tutaj ekzemploj de ĉi tiu artikolo estas prenataj de mia laboro por aranĝi la mastro de la ringoj kiel epub dosiero por plezure legi per mia bitlibro. Por tiu projekto mi serĉis literojn ĉe https://www.dafont.com tiujn tiparojn, kiuj povas taŭgi en ĝi. Sed la tiparo kiu ŝatas al mi ne havas ĉapelitajn literojn kaj tiuj kiuj havas ĉapelitaj literojn ne taŭgas al projekto.

Do, mi elektis miajn plej ŝatatajn literojn kaj uzis fontforge por fari en ĝi la literojn mankantaj. Ne estas komplika afero, mi nur kopiis literojn kaj signojn kiuj jam ekzistas en la fonto por aranĝi la ĉapelitaj. Tiel ni povas krei paĝojn, titolojn kaj tekstojn per ili.

Captura-pantalla_titulo-parte.png

Captura-pantalla_titulo-libro.png

Captura-pantalla_literoj.png

Por tiuj paĝoj estas pli grava nia laboro per css kaj html ol per la fontoj. Pro tio ni atingas la lastan laboron por krei nian bitlibron.

Aranĝi dosieron

Captura-pantalla_sigil.png

Per la pasintaj laboroj ni kreis html dosierojn, pretis bildojn kaj fontojn, kaj nun ni devas aranĝi la epub dosieron. Pro tiu laboro mi uzas la programon sigil, kiel oni povas vidi en la antaŭa bildo.

Antaŭ, kiam ni konvertis la bildojn al tekstoj, ni kreis la diversajn dosierojn html. Nun ni devas porti ene ĉi tiujn dosierojn al epub. Por ordigi la diversajn partojn de la libro ni havas la listo kiu ni povas vidi maldekstre en la bildo. Movi la dosieron supren aŭ suben estas tiel simple kiel treni la etikedon per la muso.

Fine, ni devas krei la metadatumojn, minimune la aŭtoro kaj la titolo sed estas grava kompletigi tiun informon tiom, kiom ni povos. Ankaŭ ni bezonos tabelenhavon, kaj sigil havas ilon por krei tiun tabelon.

La lasta tasko estas malrapide legi kaj repurigi la erarojn. Vortoj kiuj aperas kunigitaj aŭ tiu, kiu aperas apartigita. Erarojn, misaj literoj, strangaj signoj kiujn ni ne vidis antaŭe, ktp.

Konkludo

Finfine, mi havas mian dosieron enmetita en mia bitlibro. Mi nun komencas la legado, la lasta legado kaj mi registros la erarojn kiujn mi trovos. Poste mi plibonigos la eldonon kaj mi gardos ĝin por plezure legi kiam mi volos.

Categoría: esperanto emacs sigil epub

Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

También se ha abierto un grupo en Telegram, para usuarios de esa red.

Disculpen las molestias.