Python réalise la reconnaissance, l'extraction et l'écriture de texte PD dans le partage de scripts de fichiers CSV

PHPz
Libérer: 2023-05-17 19:40:04
avant
1883 Les gens l'ont consulté

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

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é

1. Avant-propos

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.

2. Description de l'exigence

Il existe une copie numérisée en pdf. Nous voulons extraire le texte et l'écrire dans un document csv en trois colonnes :

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

exemple pdf

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

.

csvexample

3. Commencez à utiliser vos mains et votre cerveau

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.

3.1 Installer les packages tiers pertinents

pip3 install pdf2image pytesseract
Copier après la connexion

3.2 Importer les bibliothèques tierces requises

import os #处理文件
from pdf2image import convert_from_path# pdf转图片
import pytesseract# 识别图片文字
import csv# 处理csv文件
Copier après la connexion

3.3 Lire le fichier pdf et identifier le contenu

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

  • pdf_path : Le chemin de stockage du fichier pdf
  • image : Une liste d'images PIL représentant chaque page du document PDF
  • first_page : Permet de définir la première page traitée par pdftoppm;
  • last_page : permet de définir la dernière page à traiter par pdftoppm
  • fmt : permet de spécifier le format de sortie. Les formats actuellement pris en charge sont jpg, png et ppm ;
  • Output_folder : chemin d'enregistrement de l'image
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)
Copier après la connexion

Résultats d'exécution

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

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

image-20211215212147760

Problème d'exécution

" " 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é
  • outfile : généré après traitement L'adresse du nouveau fichier
  • 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()
    
    
    
    
    Copier après la connexion
  • Le résultat en cours d'exécution

génère un nouveau fichier txt. Le nouveau fichier supprime les lignes vides dans data.txt et remplace le contenu incorrectement reconnu dans le fichier d'origine par le bon.

writercsv(intxt,outcsv)

Écrivez le fichier texte dans le tableau csv par des espaces

intxt : adresse du fichier texte
  • outcsv : fichier csv nouvellement généré
  • def 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()
    
    
    
    Copier après la connexion
    Résultat d'exécution

    Générer un trois -colonne csv, la première colonne est le nom anglais, la deuxième colonne est le nom chinois et la troisième colonne est le pays

    Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享image-20211215204846623

    Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

    image-20211215204941725

    Summary

    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!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!