Commit ae32fa10 authored by Bernard Stephan's avatar Bernard Stephan
Browse files

Mise à jour du fichier README.md de la racine

parent 07fb955c
# PDF2Blocs # PDF2Blocs
Un script java qui permet de segmenter des documents numériques au format PDF ayant un contenu textuel en français. Un script python qui permet de segmenter des documents numériques au format
PDF ayant un contenu textuel en français.
La segmentation consiste a organiser le contenue textuel d'un document en une liste de blocs distincts. La segmentation consiste a organiser le contenu textuel d'un document
Chacun de ces blocs sera transformé en une section de page html: H1, H2, P, FigCaption, Footer, Header. en une liste de blocs distincts.
Chacun de ces blocs sera transformé en une section de page html :
H1, H2, P, FigCaption, Footer, Header.
Ce programme est basée sur l'outil pdftohtml https://doc.ubuntu-fr.org/pdftohtml et la librairie dom4j https://dom4j.github.io/.
Ce programme est basée sur l'outil pdftohtml et pdftotext, deux outils de
la librairie [poppler](https://poppler.freedesktop.org/).
Le programme prend en entrée un dossier contenant un (des) documents numérique au format PDF, et produit en sortie un fichier html.
Le programme prend en entrée un fichier au format PDF,
et produit en sortie un fichier html.
On l'exécute depuis la ligne de commande :
- pdf2blocs.jar : Executable Java > python src/py/pdf2blocks.py /chemin/vers/fichier.pdf
-> Entrée : dossier contenant un (des) documents au format PDF;
-> Sortie : 1- la version XML du (des) documents à partir de pdftohtml. Ces fichiers seront dans le même dossier d'entrée. 2- la version XML du (des) documents à partir de pdftohtml réparée d'erreurs syntaxiques. Ces fichiers seront dans un dossier nommée "fixed". 3 - La version segmentée du (des) documents. Ces fichiers seront dans un dossier nommée "blocs".
Le script est executable en mode console en utilisant la ligne de commande suivante :
```
java -jar pdf2blocs.jar [chemin_dossier]
```
- src/convert.java : Code source à partir duquel l'exécutable pdf2blocs.jar a été créé.
La fonction qui permet de construire les blocs est la fonction bar. Elle prend en entrée un document XML de pdftohtml et produit un document XML segmenté en utilisant une nouvelle balise <bloc>.
- src/ressources : fichiers externes utilisé par convert.java.
-> src/ressources/mots_vides.txt : liste de mots vides en français ;
-> src/ressources/ponctuation.txt : liste de caractères de ponctuation.
Le résultat est écrit sur la sortie standard. Il est facile de la rediriger
dans un fichier html.
L'algorithme utilisé est entièrement décrit dans le fichier
[README.md](https://gitlab.irstea.fr/copain/pdf2blocs/-/blob/master/src/py/README.md) situé dans le répertoire src/py , où se trouve le code source de
[pdf2blocks.py](https://gitlab.irstea.fr/copain/pdf2blocs/-/blob/master/src/py/pdf2blocks.py)
...@@ -430,32 +430,34 @@ La boucle principale de l'algorithme effectue les tâches suivantes : ...@@ -430,32 +430,34 @@ La boucle principale de l'algorithme effectue les tâches suivantes :
- Recherche du bloc **H** le plus haut dont l'arête gauche est dans la zone ; - Recherche du bloc **H** le plus haut dont l'arête gauche est dans la zone ;
Ce bloc va définir l'arête haute de la zone. Ce bloc va définir l'arête haute de la zone.
- si aucun bloc n'est trouvé cela veut dire qu'il n'existe pas de bloc - si aucun bloc n'est trouvé cela veut dire qu'il n'existe pas de bloc
dont l'arete gauche se trouve dans la zone. Alors, la zone est élargie dont l'arête gauche se trouve dans la zone. Alors, la zone est élargie
vers la droite et une nouvelle recherche est relancée. vers la droite et une nouvelle recherche est relancée.
- si aucun bloc n'est trouvé dans la zone et que la zone comprend la dernière colonne, - si aucun bloc n'est trouvé dans la zone
et que la zone comprend la dernière colonne,
on élargit la zone (à gauche) à l'ensemble des colonnes. on élargit la zone (à gauche) à l'ensemble des colonnes.
Ceci est dû aux déplacements de la zone dans le processus de parcours, Ceci est dû aux déplacements de la zone dans le processus de parcours,
qui peut avoir décalé la zone vers la droite en laissant des blocs qui peut avoir décalé la zone vers la droite en laissant des blocs
à gauche. à gauche.
- Le cas où l'on ne trouve pas de bloc et que la zone comprend l'ensemble - Le cas où l'on ne trouve pas de bloc et que la zone comprend l'ensemble
des colonnes signifie la fin de l'algorithme. IL n'y a plus de blocs à traiter. des colonnes signifie la fin de l'algorithme.
Il n'y a plus de blocs à traiter.
- Parmi tous les blocs dont l'arête haute est au même niveau que l'arête haute - Parmi tous les blocs dont l'arête haute est au même niveau que l'arête haute
de **H** (modulo un petit intervalle correspondant à la valeur de de **H** (modulo un petit intervalle correspondant à la valeur de
VERTICAL_ALIGMENT_THRESHOLD), on cherche le bloc le plus à gauche intitulé VERTICAL_ALIGMENT_THRESHOLD), on cherche le bloc le plus à gauche intitulé
'HG' (le bloc le plus haut et le plus à gauche de la zone). **HG** peut être le 'HG' (le bloc le plus haut et le plus à gauche de la zone).
même bloc que **H**. **HG** peut être le même bloc que **H**.
- Étant donné **HG**, trois cas sont considérés : - Étant donné **HG**, trois cas sont considérés :
* **A** : Dans le général, à l'exception des cas **B** et **C**, * **A** : Dans le général, à l'exception des cas **B** et **C**,
HG est ajouté à **ordered_blocks** et la zone **HG** est ajouté à **ordered_blocks** et la zone est ajustée
est ajustée à celle de **HG** (pour que les blocs situés dans la même colonne à celle de **HG** (pour que les blocs situés dans la même colonne que **HG**
que **HG** soient parcourus avant ceux, éventuellement plus hauts, de la colonne soient parcourus avant ceux, éventuellement plus hauts, de la colonne
suivante). suivante).
- **B** : Si l'arête droite du bloc **HG** est au delà de l'arête droite de - **B** : Si l'arête droite du bloc **HG** est au delà de l'arête droite de
la zone. C'est par exemple le cas d'un titre sur toute la largeur de la zone. C'est par exemple le cas d'un titre sur toute la largeur de
la page. Dans ce cas, la zone est agrandie jusqu'à l'arête droite de **HG**. la page. Dans ce cas, la zone est agrandie jusqu'à l'arête droite de **HG**.
Tous les blocs de la zone situé au dessus de **HG** sont inséré dans la liste L Tous les blocs de la zone situé au dessus de **HG** sont insérés
avant **HG**. dans la liste **ordered_blocks**, avant **HG**.
![figure B](images/CaseB.gif) ![figure B](images/CaseB.gif)
*Dans la figure, le bloc "B" doit être lu avant "T".* *Dans la figure, le bloc "B" doit être lu avant "T".*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment