Comment extraire du texte avec OCR à partir d'un PDF sur Linux?
44
Comment extraire du texte d'un PDF qui n'a pas été construit avec un index? C'est tout le texte, mais je ne peux rien rechercher ou sélectionner. Je suis sous Kubuntu, et Okular ne possède pas cette fonctionnalité.
Aucun paquet binaire ne semble être disponible, vous devez donc le compiler à partir des sources. Assurez-vous que les bibliothèques ImageMagick C ++ sont installées pour prendre en charge essentiellement tous les formats d'image en entrée (sinon, il n'acceptera que le format BMP).
Bien qu’il semble être essentiellement non documenté, à l’exception d’un bref fichier README, j’ai trouvé les résultats de l’OCR assez bons. L' avantage est qu'il peut générer des informations de position pour le texte OCR au format hOCR , de sorte qu'il devient possible de replacer le texte à la position correcte dans une couche masquée d'un fichier PDF. De cette façon, vous pouvez créer des fichiers PDF "interrogeables" à partir desquels vous pouvez copier du texte.
J'ai utilisé hocr2pdf pour recréer des fichiers PDF à partir des fichiers PDF d'origine avec image uniquement et des résultats OCR. Malheureusement, le programme ne semble pas prendre en charge la création de fichiers PDF de plusieurs pages. Vous devrez donc peut-être créer un script pour les gérer:
#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
cuneiform -f hocr -o "$base.html" "$page"
hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done
# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf
rm -rf -- "$tmpdir"
Veuillez noter que le script ci-dessus est très rudimentaire. Par exemple, il ne conserve aucune métadonnée PDF.
Toute idée d'améliorer ce script pour ajouter une étape de vérification orthographique pour corriger les erreurs dans l'étape de reconnaissance?
Gökhan Sever
@ Gökhan Sever, entendez-vous ajouter une vérification orthographique interactive dans laquelle l'utilisateur est invité à remplacer les mots mal orthographiés / inconnus? Je pense que vous pourriez le faire en ajoutant quelque chose comme aspell check --mode=html "$base.html"dans le script juste après avoir exécuté cunéiforme.
Jukka Matilainen le
Ceci est une solution. Cependant, sans voir tout le contexte du texte, il est difficile d'apporter des corrections. Il serait plus agréable de voir une interface construite dans l'ocrfeeder.
Gökhan Sever
1
En passant, j'utilise tesseract pour la reconnaissance des caractères: en remplaçant la ligne cunéiforme par: tesseract "$ page" "$ base" hocr
Gökhan Sever
1
Petite correction: la ligne pour tesseract au moins pour les langues autres que l'anglais, ici par exemple l'allemand (= deu) est: `tesseract" $ page "" $ base "-l deu hocr` (bien sûr, vous devez supprimer le ``) .
Keks Dose
14
Voyez si pdftotext fonctionnera pour vous. Si ce n'est pas sur votre ordinateur, vous devrez installer le paquet poppler-utils
Une liste complète des logiciels pdf ici sur wikipedia.
Edit: Puisque vous avez besoin de capacités d’OCR, je pense que vous devrez essayer une tactique différente. (c.-à-d. que je ne pouvais pas trouver un convertisseur linux pdf2text qui fasse de l'OCR).
Convertir le pdf en image
Numérisez l'image en texte à l'aide des outils de ROC
Convertir le pdf en image
gs: La commande ci-dessous devrait convertir un fichier PDF multipage en fichiers tiff individuels.
Ce programme fonctionne-t-il également pour les documents manuscrits?
Ivo Flipse
1
Non, je ne pense pas qu'il dispose de capacités OCR. Il peut simplement extraire le texte incorporé dans le pdf. Man page: linux.die.net/man/1/pdftotext
nagul
Ouais, cela fonctionne pour les documents pdf qui viennent déjà avec le texte incorporé. Mon cas est exactement celui où il ne le fait pas.
Helder S Ribeiro
1
@ obvio171 Ajout de la meilleure option que j'ai pu trouver pour que l'OCR fonctionne dans votre cas.
Nagul
12
Google docs utilisera désormais l' OCR pour convertir vos documents image / pdf téléchargés en texte. J'ai eu un bon succès avec elle.
Ils utilisent le système OCR utilisé pour le gigantesque projet Google Books .
Toutefois, il convient de noter que seuls les fichiers PDF d’une taille de 2 Mo seront acceptés pour le traitement.
Mise à jour
1. Pour l’essayer, téléchargez un fichier PDF de moins de 2 Mo dans Google Docs à partir d’un navigateur Web.
2. Cliquez avec le bouton droit sur le document téléchargé et cliquez sur "Ouvrir avec Google Documents".
... Google Docs convertira en texte et en sortie dans un nouveau fichier portant le même nom, mais Google Docs sera saisi dans le même dossier.
Le meilleur et le plus simple moyen de l'utiliser pypdfocrest de ne pas changer le pdf
pypdfocr your_document.pdf
À la fin, vous en aurez une autre your_document_ocr.pdfcomme vous le souhaitez avec un texte interrogeable. L'application ne change pas la qualité de l'image. Augmente un peu la taille du fichier en ajoutant le texte de surimpression.
Mise à jour du 3 novembre 2018:
pypdfocrn'est plus pris en charge depuis 2016 et j'ai remarqué quelques problèmes dus au fait que je n'étais pas mentalisée. ocrmypdf( module ) fait un travail symiliaire et peut être utilisé comme ceci:
Créez une image pour chaque page du PDF; l'un des exemples ci-dessus devrait fonctionner
Génère une sortie hOCR pour chaque page; J'ai utilisé tesseract (mais notez que cunéiforme semble mieux fonctionner).
Déplacez les images et les fichiers hOCR dans un nouveau dossier. les noms de fichiers doivent correspondre, donc fichier001.tif a besoin de fichier001.html, fichier002.tif fichier002.html, etc.
Dans le nouveau dossier, exécutez
pdfbeads * > ../Output.pdf
Cela placera le PDF assemblé, en mode OCR dans le répertoire parent.
#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
tesseract "$base.tiff" $base
done
# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output
rm -rf -- "$tmpdir"
Cet article indique que le produit peut le faire, ce qui est un indice utile qui devrait être publié en tant que commentaire. Cela n'explique pas comment résoudre le problème, c'est ce que les réponses devraient faire. Pouvez-vous développer votre réponse afin que quelqu'un puisse voir comment faire la solution?
Fix1234
Merci @ fix1234, je l'ai modifié pour inclure la commande.
J'ai trouvé ABBYY OCR assez pitoyable, l'un des programmes les moins performants que j'ai essayés. Cela pourrait être suffisant avec une image très nette du texte de police standard de la taille du corps du texte, sans polices mélangées, tailles mixtes, présentation complexe, graphiques, lignes, etc.
fix1234
Ya j'ai aussi essayé, ça marche bien. J'ai un doute, pouvez-vous m'aider?
Praveen Kumar KR
Si ce dont vous avez besoin n’est pas couvert par d’autres réponses ici, la meilleure chose à faire est de poser votre propre question. Cela le rendra exposé à beaucoup d'yeux.
Réponses:
J'ai eu du succès avec le port Linux sous licence BSD du système OCR Cuneiform .
Aucun paquet binaire ne semble être disponible, vous devez donc le compiler à partir des sources. Assurez-vous que les bibliothèques ImageMagick C ++ sont installées pour prendre en charge essentiellement tous les formats d'image en entrée (sinon, il n'acceptera que le format BMP).
Bien qu’il semble être essentiellement non documenté, à l’exception d’un bref fichier README, j’ai trouvé les résultats de l’OCR assez bons. L' avantage est qu'il peut générer des informations de position pour le texte OCR au format hOCR , de sorte qu'il devient possible de replacer le texte à la position correcte dans une couche masquée d'un fichier PDF. De cette façon, vous pouvez créer des fichiers PDF "interrogeables" à partir desquels vous pouvez copier du texte.
J'ai utilisé hocr2pdf pour recréer des fichiers PDF à partir des fichiers PDF d'origine avec image uniquement et des résultats OCR. Malheureusement, le programme ne semble pas prendre en charge la création de fichiers PDF de plusieurs pages. Vous devrez donc peut-être créer un script pour les gérer:
Veuillez noter que le script ci-dessus est très rudimentaire. Par exemple, il ne conserve aucune métadonnée PDF.
la source
aspell check --mode=html "$base.html"
dans le script juste après avoir exécuté cunéiforme.Voyez si pdftotext fonctionnera pour vous. Si ce n'est pas sur votre ordinateur, vous devrez installer le paquet poppler-utils
Vous pouvez également trouver la boîte à outils pdf .
Une liste complète des logiciels pdf ici sur wikipedia.
Edit: Puisque vous avez besoin de capacités d’OCR, je pense que vous devrez essayer une tactique différente. (c.-à-d. que je ne pouvais pas trouver un convertisseur linux pdf2text qui fasse de l'OCR).
Convertir le pdf en image
gs: La commande ci-dessous devrait convertir un fichier PDF multipage en fichiers tiff individuels.
Utilitaires ImageMagik : Il existe d'autres questions sur le site SuperUser sur l'utilisation d'ImageMagik pour vous aider à effectuer la conversion.
Convertir une image en texte avec OCR
Tiré de la liste de logiciels OCR de Wikipedia
la source
Google docs utilisera désormais l' OCR pour convertir vos documents image / pdf téléchargés en texte. J'ai eu un bon succès avec elle.
Ils utilisent le système OCR utilisé pour le gigantesque projet Google Books .
Toutefois, il convient de noter que seuls les fichiers PDF d’une taille de 2 Mo seront acceptés pour le traitement.
Mise à jour
1. Pour l’essayer, téléchargez un fichier PDF de moins de 2 Mo dans Google Docs à partir d’un navigateur Web.
2. Cliquez avec le bouton droit sur le document téléchargé et cliquez sur "Ouvrir avec Google Documents".
... Google Docs convertira en texte et en sortie dans un nouveau fichier portant le même nom, mais Google Docs sera saisi dans le même dossier.
la source
Geza Kovacs a créé un paquet Ubuntu qui est essentiellement un script utilisant
hocr2pdf
les suggestions de Jukka, mais qui accélère l’installation.Extrait du message de Geza sur le forum Ubuntu avec des détails sur le paquet ...
Ajout du référentiel et installation dans Ubuntu
Exécuter ocr sur un fichier
Dépôt GitHub pour le code https://github.com/gkovacs/pdfocr/
la source
Le meilleur et le plus simple moyen de l'utiliser
pypdfocr
est de ne pas changer le pdfÀ la fin, vous en aurez une autre
your_document_ocr.pdf
comme vous le souhaitez avec un texte interrogeable. L'application ne change pas la qualité de l'image. Augmente un peu la taille du fichier en ajoutant le texte de surimpression.Mise à jour du 3 novembre 2018:
pypdfocr
n'est plus pris en charge depuis 2016 et j'ai remarqué quelques problèmes dus au fait que je n'étais pas mentalisée.ocrmypdf
( module ) fait un travail symiliaire et peut être utilisé comme ceci:À installer:
ou
la source
PDFBeads fonctionne bien pour moi. Ce fil de discussion " Convertir des images numérisées en un seul fichier PDF " m'a permis de démarrer rapidement. Pour numériser un livre noir et blanc, vous devez:
Dans le nouveau dossier, exécutez
Cela placera le PDF assemblé, en mode OCR dans le répertoire parent.
la source
un autre script utilisant tesseract:
la source
Asprise OCR Library fonctionne sur la plupart des versions de Linux. Il peut prendre une entrée et une sortie PDF en tant que recherche PDF.
C'est un paquet commercial. Téléchargez un exemplaire gratuit du logiciel Asprise OCR SDK pour Linux ici et lancez-le ainsi:
Remarque: le «pdf» autonome spécifie le format de sortie.
Déni de responsabilité: Je suis un employé de la société produisant le produit ci-dessus.
la source
Essayez Apache PDFBox pour extraire le contenu textuel d'un fichier PDF. Dans le cas d'images incorporées dans des fichiers PDF, utilisez CLI d'AbBYY FineReader Engine pour Linux pour extraire du texte.
la source