1. Avant-propos
2. Description des exigences
3. Commencez à utiliser votre cerveau
3.1 Installez les packages tiers pertinents
3.2 Importez les bibliothèques tierces dont vous avez besoin
3.3 Lisez les fichiers PDF et identifiez les contenu
3.4 Traiter les données identifiées et les écrire dans un fichier csv
Résumé
Les documents numérisés ont toujours été populaires auprès du public. Toutes les données papier seront archivées après numérisation. Vous pouvez l'ouvrir sur votre. téléphone portable lorsque vous souhaitez l'utiliser, économisant ainsi de l'argent. Cependant, les avantages du document numérisé entraînent également un inconvénient. Parce qu'il est numérisé via un appareil électronique, il en résulte une image. Si vous souhaitez traiter le contenu du fichier, une opération directe n'est pas possible.
Et si vous souhaitez citer le contenu ? Ne vous inquiétez pas, Python vous aidera à résoudre le problème.
Il existe une copie numérisée en pdf. Nous voulons extraire le texte et l'écrire dans un document csv en trois colonnes :
exemple pdf
.csvexample
Les numérisations PDF sont des documents numérisés au format d'image informatique et convertis en celui-ci. Extraire le texte équivaut à reconnaître le texte dans l'image. Par conséquent, notre travail consiste à convertir le PDF en image, puis à utiliser l'outil OCR pour extraire le texte de l'image.
pip3 install pdf2image pytesseract
import os #处理文件 from pdf2image import convert_from_path# pdf转图片 import pytesseract# 识别图片文字 import csv# 处理csv文件
tess_ocr(pdf_path, lang, first_page, last_page)
Diviser le fichier pdf Divisez en images, extrayez le texte et écrivez-le dans un fichier texte
def tess_ocr(pdf_path, lang,first_page,last_page): # 创建一个和pdf同名的文件夹 images = convert_from_path(pdf_path, fmt='png',first_page=first_page,last_page=last_page,output_folder=imagefolder,userpw='site')# 转成图片 text = '' for img in images: text += pytesseract.image_to_string(img, lang=lang) # 识别图片文字 with open(r'exampledata.txt' 'a', encoding='utf-8') as f: #写入txt文件 f.write(text)
Générez un dossier du même nom pour stocker les images divisées, puis extrayez le texte de l'image et écrivez-le dans les données. .txt
image-20211215212147760
" " Problème lance 1 :
pdf2image.exceptions.PDFInfoNotInstalledError : Impossible d'obtenir le nombre de pages est-il installé et dans PATH ? Solution : Télécharger pler .
>1 Méthode 1 : Définir la variable d'environnement poppler/bin ;
>2 Méthode 2 :
Le paramètre spécifie le chemin absolu :
images = convert_from_path(pdf_path=pdf_file_path, poppler_path=r'l'adresse du bin fichier dans poppler')
" " Problème lancé 2 :
pytesseract.pytesseract.TesseractNotFoundError : tesseract n'est pas installé ou il n'est pas dans votre PATH Voir le fichier README pour plus d'informations "
Solution : téléchargez et installez en plus tesseract-. ocr et configurer les variables d'environnement.
3.4 Traiter les données identifiées et les écrire dans un fichier csv
modification(infile, outfile)Nettoyer le document texte généré
infile : l'adresse du fichier qui doit être traitédef modification(infile, outfile): infp = open(infile, "r",encoding='utf-8') outfp = open(outfile, "w",encoding='utf-8') lines = infp.readlines() #返回列表,包含所有的行。 #依次读取每行 for li in lines: if li.split(): #str.split(str="", num=string.count(str)),过滤文件中的空行 # 根据识别情况对数据进行清洗 li = li.replace('[', ' ').replace(']', '') outfp.writelines(li) infp.close() outfp.close()
Écrivez le fichier texte dans le tableau csv par des espaces
intxt : adresse du fichier textedef writercsv(intxt,outcsv): # 使用newlines=''可保证存储的数据不空行。 csvFile = open(outcsv, 'a',newline='', encoding='utf-8') writer = csv.writer(csvFile) csvRow = [] f = open(intxt,'r',encoding='utf-8') for line in f: csvRow = line.split() #以空格为分隔符 if len(csvRow)>1 and len(csvRow)<=3:#约束条件,视情况而定 writer.writerow(csvRow) f.close() csvFile.close()
image-20211215204846623
image-20211215204941725
A travers cette étude, nous avons réalisé l'extraction de texte à partir de documents numérisés et La nécessité d'écrire le contenu dans des documents dans différents formats selon les besoins.
Au départ, je pensais que la bibliothèque d'extraction de pdf conviendrait également aux documents numérisés, j'ai donc essayé la bibliothèque Pdfplumber et la bibliothèque PyPDF2.
Practice a constaté que Pdfplumber ne peut reconnaître les filigranes que dans les PDF numérisés et n'est pas applicable aux PDF numérisés. La bibliothèque PyPDF2 s'exécute et signale une erreur : NotImplementedError : seuls les codes d'algorithme 1 et 2 sont pris en charge.
La raison est que ce PDF crypté peut provenir d'une version supérieure d'acrobot, donc le code de l'algorithme de cryptage correspondant est '4'. Cependant, le module pypdf2 existant ne prend en charge que les noms de code de l'algorithme de cryptage Le pdf. le fichier crypté est « 1 » ou « 2 ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!