Chapitre 3 Extraction de données textuelles depuis des images ou des documents pdf

L’OCRisation (OCR pour Optical Character Recognition) consiste à appliquer des algorithmes de reconnaissance de caractères à des images afin d’en extraire du texte.

Avec R, on peut réaliser l’OCRisation à l’aide du package tesseract, documenté à cette adresse. Ce package repose lui-même sur (je vous le donne en mille) le logiciel Tesseract.

library(tesseract)

Outre l’installation “classique” du package R, donc (via install.packages("tesseract") il peut être nécessaire de procéder “à la main” à des installations supplémentaires sur votre machine (ce sera notamment le cas si vous travaillez sous Debian/Ubuntu). Dans ce cas, je vous invite à suivre les indications sur cette page.

En outre, pour une reconnaissance optimale des caractères, il est préférable de disposer d’un moteur d’OCR qui corresponde à la langue du texte que l’on cherche à reconnaître. Pour des langues autres que l’anglais (“eng”), il faudra donc compléter le package tesseract en téléchargeant le moteur adéquat. Il n’est nécessaire de réaliser ce téléchargement qu’une seule fois.

Pour les utilisateurs de Windows/MacOS, il suffira vraisembablement de faire (ici pour le français):

tesseract_download("fra")

Pour les utilisateurs de Debian/Ubuntu, il peut être nécessaire au préalable pour procéder à ce téléchargement de renseigner (une seule fois!) une variable d’environnement globale TESSDATA_PREFIX en procédant comme suit:

  • Ouvrir le fichier .Renviron
usethis::edit_r_environ()
  • y renseigner le chemin vers le dossier tessdata. Chez moi, il s’agit du chemin “/usr/share/tesseract-ocr/4.00/tessdata/”, donc:
TESSDATA_PREFIX="/usr/share/tesseract-ocr/4.00/tessdata/"

Puis:

tesseract_download("fra",datapath="/usr/share/tesseract-ocr/4.00/tessdata/")

3.1 Utilisation du package tesseract

Considérons par exemple l’image suivante (scannée depuis un numéro Hors-Série de Géo sur les chats du monde…):

Réalisons maintenant l’OCRisation à l’aide de la fonction ocr():

texte_brut <- tesseract::ocr("images/chats_de_Paris.png",
                             engine = tesseract::tesseract("fra"))
texte_brut
## [1] "aris n’est pas à proprement par-\n\nler une ville à chats, comme\n\nRome ou Istanbul. Et pourtant,\n\nsi on y regarde de près, les ma-\n\ntous sont partout. Non pas dans\n\nla rue ou aux abords des monu-\n\nments anciens, même si on en\n\nvoit quelques-uns se balader au\n\nmilieu des pierres tombales sé-\n\nculaires du cimetière du Mont-\n\nparnasse ou du Père-Lachaise. Les chats du Paris\nd’aujourd’hui vivent surtout dans les cafés, les res-\ntaurants, les librairies, chez les fleuristes, les lu-\nthiers, les épiciers et dans les boutiques, régnant\nsur leur petit monde du haut d’un comptoir en zinc,\nalanguis sur une table recouverte de beaux livres\nou s’étirant nonchalamment sur le sol de marbre\nd’un grand hôtel chic. Quand Mickey, le chat atti-\ntré du célèbre café Le Select, dans le quartier de\nMontparnasse, est mort en août dernier à l’âge res-\npectable de 22 ans, tout le quartier s’est senti en\ndeuil. Accoudés au bar, les habitués désemparés\nse remémoraient des anecdotes à son sujet. L’his-\ntoire de ce chat tigré est à la fois unique et repré-\nsentative de la vie d’un félin à Paris. Le premier\nnom de Mickey était Oscar. Dans sa jeunesse,\nil vivait au café L'Atelier, juste à côté. Pour d’obs-\ncures raisons, il migra au Select, où «l’on ne\ns’y connaissait pas trop en chats». explique Fré-\n"

On obtient d’ores-et-déjà un résultat intéressant, malgré quelques petites choses à nettoyer (notamment les retours à la ligne et tirets associés). Pour réaliser ce nettoyage, on peut utiliser les fonctions du package stringr et les expressions régulières qui font l’objet du chapitre 5

library(dplyr)

txt=texte_brut %>% 
  stringr::str_replace_all("-\\n+","") %>% #tirets suivis de retours à la ligne simples ou multiples
  stringr::str_replace_all("\\n+"," ")     #retours à la ligne simples ou multiples
txt
## [1] "aris n’est pas à proprement parler une ville à chats, comme Rome ou Istanbul. Et pourtant, si on y regarde de près, les matous sont partout. Non pas dans la rue ou aux abords des monuments anciens, même si on en voit quelques-uns se balader au milieu des pierres tombales séculaires du cimetière du Montparnasse ou du Père-Lachaise. Les chats du Paris d’aujourd’hui vivent surtout dans les cafés, les restaurants, les librairies, chez les fleuristes, les luthiers, les épiciers et dans les boutiques, régnant sur leur petit monde du haut d’un comptoir en zinc, alanguis sur une table recouverte de beaux livres ou s’étirant nonchalamment sur le sol de marbre d’un grand hôtel chic. Quand Mickey, le chat attitré du célèbre café Le Select, dans le quartier de Montparnasse, est mort en août dernier à l’âge respectable de 22 ans, tout le quartier s’est senti en deuil. Accoudés au bar, les habitués désemparés se remémoraient des anecdotes à son sujet. L’histoire de ce chat tigré est à la fois unique et représentative de la vie d’un félin à Paris. Le premier nom de Mickey était Oscar. Dans sa jeunesse, il vivait au café L'Atelier, juste à côté. Pour d’obscures raisons, il migra au Select, où «l’on ne s’y connaissait pas trop en chats». explique Fré"

Juste pour voir l’ensemble du texte sans avoir à scroller horizontalement:

tibtxt=tibble(txt=txt)
knitr::kable(tibtxt)
txt
aris n’est pas à proprement parler une ville à chats, comme Rome ou Istanbul. Et pourtant, si on y regarde de près, les matous sont partout. Non pas dans la rue ou aux abords des monuments anciens, même si on en voit quelques-uns se balader au milieu des pierres tombales séculaires du cimetière du Montparnasse ou du Père-Lachaise. Les chats du Paris d’aujourd’hui vivent surtout dans les cafés, les restaurants, les librairies, chez les fleuristes, les luthiers, les épiciers et dans les boutiques, régnant sur leur petit monde du haut d’un comptoir en zinc, alanguis sur une table recouverte de beaux livres ou s’étirant nonchalamment sur le sol de marbre d’un grand hôtel chic. Quand Mickey, le chat attitré du célèbre café Le Select, dans le quartier de Montparnasse, est mort en août dernier à l’âge respectable de 22 ans, tout le quartier s’est senti en deuil. Accoudés au bar, les habitués désemparés se remémoraient des anecdotes à son sujet. L’histoire de ce chat tigré est à la fois unique et représentative de la vie d’un félin à Paris. Le premier nom de Mickey était Oscar. Dans sa jeunesse, il vivait au café L’Atelier, juste à côté. Pour d’obscures raisons, il migra au Select, où «l’on ne s’y connaissait pas trop en chats». explique Fré

3.2 Et pour OCRiser depuis un pdf??

Si vous souhaitez OCRiser depuis un pdf, vous pouvez suivre peu ou prou la démarche expliqué ci-dessus, mais en commençant par convertir votre pdf en image via le package pdftools:

pngfile <- pdftools::pdf_convert('images/geo_chats.pdf',
                                 filenames=c("docs/geo_chats.png"),
                                 dpi = 600)
## Converting page 1 to docs/geo_chats.png... done!
print(pngfile)
## [1] "docs/geo_chats.png"

La ligne de commande ci-dessus a ainsi créé une image “geo_chats_1.png”, enregistrée localement sur le PC dans le répertoire de travail, à partir du pdf.