retour

Comment transformer un fichier PDF en un fichier Word formaté

 

Préparé par Bernard Polarski , Juin 2013


Voici comment extraire et formater en un document Word, un texte PDF downloadé de Gallica.bnf.fr.

Si votre PDF ne vient pas de Gallica, il se peut que cette méthode ne fonctionne pas, car Gallica scanne ses PDF 

selon le format ALTO  et garanti 99.985% de reconnaissance.

http://www.bnf.fr/fr/professionnels/num_conversion_texte/s.num_conversion_texte_ocr.html

La méthode que l'on presente ici remplace en efficacité et rendu du texte la méthode plus classique qui consiste à importer le PDF dans un OCR.
Il y a bien sur des fautes mais cette méthode donne un rendu du texte supérieur à 99.9%.

Les erreur principales que je constate avec le texte issus de l'OCR de Gallica:

           1) Aucun texte ne sort ! c'est que votre fichier PDF ne contient que des photos du texte.
               
                Cela concerne surtout certain PDF avec image scanné en qualité.
                exemple : Cette version de l'île mystérieuse http://gallica.bnf.fr/ark:/12148/btv1b86002556/f588.image.r=.langEN  
                En fait on peut s'en rendre compte au moment du download : Gallica ne propose pas la version texte


2) Perte d'une partie du formatage. 


Le redressement de cette perte est l'objet de ce tutorial. Les têtes de chapitres et autre mises en pages spéciales 

doivent être faites manuellement. En termes de temps, c'est relativement léger.


3) Inversion de mots si la page PDF n'est pas plate. Le mot peut même se perdre sur un autre ligne.


Cependant c'est relativement rare. Un image PDF 'stable' ne produit aucune erreur de texte.


4) Aucun support image. 


En fait ce n'est pas grave, car de toute façon on ne traite pas les images avec l'OCR mais toujours avec gimp.

Pour la bataille du grand couronné de Nancy, toutes images ont été sorties avec pdftoimage.exe et chargées 

dans gimp, pour traitement avant de les réintroduire dans le word.

Installation:

Nous aurons besoin du freeware ‘xpdf’ que l’on peut trouver ici :

 

http://www.foolabs.com/xpdf/

download xpf

 

Comme je travaille sous windows Seven home édition, j'utilise la version 32 bits.  Adaptez selon votre version de Windows.

    32 bits

Ces utilitaires sont petits et très efficaces.

binaries

On les extrait dans un directory quelconque qui servira de 'repository' pour venir chercher le binaire 

dont on aura besoin, ou bien vous mettez ce directory dans votre variable d'environnement %PATH%.


 Maintenant j’ai besoin d’un PDF. Je vais en prendre un difficile car qui peut le plus peut le moins.

Mon choix se porte sur  « Souvenirs d'un aveugle, voyage autour du monde » 

par Jacques Arago, H. Lebrun (Paris) Date d'édition : 1868

 

http://gallica.bnf.fr/ark:/12148/bpt6k6526526s.r=.langEN

 

Soit le document PDF suivant en deux colonnes que je souhaite transformer 

en un document Word (étape intermédiaire, avant mon epub, où je ferais des corrections):

 

  

Je place le binaire et le fichier pdf dans un directory de travail.
Il vaut mieux en préparer un, car extraire des images peut générer autant de fichiers qu'il y a d'images.
create work directory

J’ouvre une box de commande ( startup -> cmd )
Me voilà prêt pour entamer les opérations :
cmd box

Les opérations:

Pour la facilité j’ai renommé le pdf downlodé de Gallica en ‘sa.pdf’ et mon fichier texte en sortie sera ‘sa.txt’

 

 

C’est le paramètre –raw qui redresse les deux colonnes en une colonne continue.

Les autres paramètres sont :

 

·       -f 50 : Extraire à partir de la page 50  (ignorez pour faire tout le livre )

·       -l 52 : Extraire jusqu’à la page 52      (ignorez pour faire tout le livre )

·       -layout : en fait pas vraiment nécessaire, mais des fois je note un léger mieux dans le formatage, aussi je l’inclus toujours.

·       -eol dos :  end of line marker du format Dos (\n\c) par opposition au format Unix (\n)

·       -nopgbrk : pas de saut de pages car ils sont plus un problème qu’autre chose et puis les sauts de pages sont inutiles dans un ePub.

 

Les seuls paramètres vraiment importants sont –raw et -nopgbrk

Notes: Si vous avez des problèmes  d'accent, c'est sans doute dû au type d'encodage. 

rajoutez ceci : -enc UTF-8 comme paramètre

  pdftotext.exe  -raw -layout -enc UTF-8 fichier.pdf fichier.txt

 

Voici un extrait du ‘sa.txt’ produit:

 

« 

; c'est une quiétude qui repose sans énerver;

c'est un demi-rêve, un demi-réveil; on sent glisser

doucement la vie sur les pores, on aspire l'air, on se

laisse mollement aller au repos du sommeil, comme

si le jour devenait dela fatigue, et l'on s'assoupit aux

sifflements et aux cris aigus des insectes et des coli-

bris, comme à un céleste concert qui ne meurt que

longtemps après que le soleil s'est couché sous l'ho-

rizon.

Je vous ai parlé, je crois, de l'aqueduc qui, partant

du pied vierge du Corcovado, descend et serpente de

colline en colline, garde fraiche et limpide la source

qu'il a reçue à sa naissance, et alimente toute la

ville. Cet aqueduc aura aujourd'hui ma première

visite, et je vais le suivre dans toutes ses sinuosités.

De loin, on dirait un ouvrage des Romains au temps

de leur grandeur; mais, en se dépouillant de toute

prévention, on n'y voit qu'un travail de patience et

d'utilité publique

« 

J'ai mis en gras, une section du texte que je voudrais suivre, à travers ce tutorial.


Maintenant nous voudrions bien que notre texte soit au moins formaté en paragraphe. 
Je ne recherche pas la perfection mais simplement que le maximum de travail soit fait.
Pour ce faire je vais utiliser au maximum les possibilités de Word et un minimum de «  regular expressions. »

 

Voice le texte tel qu’il apparait dans Word, une fois importé. Je fais apparaitre les paragraphes :

 

 

On voit bien que la plupart des marqueurs de fin de ligne ne sont pas dû. 

C’est l’effet 'double colonnes' du texte original qui a fait des petites lignes.

On ne voudrait garder que les marqueurs fins de lignes   qui terminent un point 

tandis que la ligne suivante commence par une majuscule.

 

Dans notre cas on devrait avoir :

 

« 

… le soleil s'est couché sous l'horizon.

Je vous ai parlé, je crois, de l'aqueduc qui, partant du pied …

« 

 
Un souci supplémentaire se pose. le ‘end of paragraph
 se note ‘^p’ mais n’est pas supporté 
quand on utilise les ‘regular expression dans word.
Aussi je commence donc par remplacer tous les
 par un string XXP dont je suis sûr qu’il n’existe pas dans le texte original.

A la fin je réintroduirais les par une opération inverse.

 

 

Notre texte ressemble à ceci :

 

 

    Je vais maintenant préserver tous les points suivit d’un XXP suivit d’une majuscule.

Car ils représentent la fin d'un paragraphe suivit d’un nouveau paragraphe.

    Quant à tous les autres marqueurs fin de paragraphe , on va les supprimer.

 

Notez que j’ai coché « Use wildcards » qui est ce qui tient de ‘regular expression’ en Word.

Nous introduisons notre expression régulière:


          Cherche:

                .XXX([A-Z])

et remplace par

  

              .XXY\1               

Pour la forme cette regular expression se traduit en bon français comme ceci :

 

Pour tout point, suivit de la chaine XXP suivit d’une majuscule,

remets le point, suivit de la chaîne XXY et remets la majuscule que tu as capturé.

 

 

    Un de nos XXP devient XXY notez la ligne :

« 

qui ne meurt queXXPlongtemps après que le soleil s'est couché sous l'ho-XXPrizon.XXYJe vous ai parlé, je crois…

« 


Si vous n’avez pas coché ‘use wildcard’ il ne se passe rien. Vérifiez bien qu’il y a des XXY.
Maintenant que j’ai identifié tous les vrais paragraphes, je supprime tous les XXP restant et les remplace par un espace :

           

 

    Mon texte ressemble à ceci :

 

    Une seule longue chaîne de texte ou l’on note des XXY.

    Je vais remplacer tous les XXY par un  et ma nouvelle ligne je la fait commencer par une tabulation :

 

   

Et voici le résultat final, on voit que que le mot « hor- hizon » à besoin d’une correction.

 

Il vous reste maintenant le plus long : relire le document word en vous reportant au PDF original pour ajuster le document Word. 

Si vous avez des images,  ‘pdftoimage.exe’, qui fait aussi partie de ‘xpdf’ est vraiment très bon. 

ensuite, j’utilise gimp (autre freeware) pour le traitement et l’incorporation de l’image dans le document word.

 

    Bien maintenant que la correction est finie, je sauve mon document word comme fichier ‘html Web filtered’ :

 

Il me reste à importer cela dans calibre et lui demander de convertir en ePup. 
Si vous ne connaissez pas encore calibre,  sachez que c’est un freeware et qu’il fait autorité dans le monde de l’ebook.

On trouvera calibre ici  :

http://calibre-ebook.com/

Pour allez plus loin, je vous recommande aussi ce tutorial:

 (cet autre article sur le traitement des images avec XDPF et Gimp 2

    http://ebooks.critiqueslibres.com/divers/tuto_pdf_image_gimp.html

Notes:

Il est possible que votre fichier ne soit pas aussi propre que celui traité ici.
Par exemple il peut y avoirs des espace entre le point et le .

Il faut préparer votre ficher, c'est à dire éliminer les diverses impuretés avant le traitement principal.
Cette opération s'appelle la 'normalisation'. Les Anglais utilisent aussi le terme '"beautify the file".
Exemple: Il peut y avoir plusieurs espaces (un nombre n d'espace)  qui se suivent ou bien plusieurs  en série.
N'hésiter pas à les enlever en utilissant les search & replace :

search & replace

Pour enlever un espace entre le . et le :
enlever un espace entre le point et le end of paragraphe

Et faites autant d'opération qu'il faut pour présenter au traitement principal, un fichier qui contiendra le moins possible
de  bizarreries. Explorez votre fichier pour comprendre ce qu'il contient et agissez sur ce qui ne vous plait pas.
Il n'y a ni miracle ni martingales, juste de l'attention et du travail.

 

 Variation sur un thème.

Le premier exemple partait d'un texte relativement simple. 

Mais votre texte peut contenir un certain nombre de contrainte supplémentaires.

Soit le texte suivant :

corvette vous renient. Mais, tenez, voilà votre double 
pirogue qui vous tend les bras ; prenez garde de la 
chavirer; relevez votre houppelande qui traîne. Bon- 
jour, Bordelais! Tiens,  donc est-il? Il m'a glissé 
dans les mains. 

—Insolent! 

- Il a dit insolent. Je l'aplatirai. 

Petit accourut. 

 Il t'a appelé insolent, je crois? 

- Parole d'honneur ! 

- Laisse-moi faire, il m'appartient ; je m'en em- 
pare. La relâche sera amusante. 

L'officier de quart, prévenu de cette petite alterca- 
- tion, s'élança pour adresser quelques mots d'excuse 
à M. Rives, qui débordait, et fit faire à Marchais une 
faction de deux heures sur les barres de cacatois. Pe- 
tit dit alors entre ses dents : 
 Suffit, son affaire est faite. 

 Il me payera cette faction, mon brave Petit ! 

criait Marchais en grimpant ; je te le recommande. 

 Marchais, embête-toi là-haut, mon garçon ; 
nous nous amuserons quand tu seras descendu. 
 

importé dans Word avec mise en évidence de la ponctuation, cela donne ceci:
tuto text 01

Pour le traiter je ne vais donner que les 'formules' search and replace.
La première ligne est le search et la deuxième colonne est le replace:

SearchReplaceCocher 'expression régulirère'
^p^p^P
^pXXP
XXP—<espace>XXP—
XXP—^tXXP—
.<espace>XXP .XXP
!<espace>XXP !XXP

?<espace>XXP

?XXP
([\.\!\?])XXP([A-Z—])\1XXY\2Y
XXY^p^t
XXP
—([A-Z])—<espace>\1Y


On obtient ceci :

tuto text 02

Le texte a encore des soucis, mais ils sont lié essentiellement aux '-'.
Il vous appartient de décide si vous les corrigez un par un
ou si vous les trairez avec 'search & replace".