ホームページ >バックエンド開発 >Python チュートリアル >PythonでPDテキスト認識・抽出・CSVファイルへの書き込みスクリプト共有を実現

PythonでPDテキスト認識・抽出・CSVファイルへの書き込みスクリプト共有を実現

PHPz
PHPz転載
2023-05-17 19:40:041972ブラウズ

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

1. はじめに

2. 要件の説明

3. 自分の頭脳を使い始める

3.1 関連するサードパーティ パッケージをインストールする

3.2 必要なサードパーティ ライブラリをインポートします

3.3 PDF ファイルを読み取って内容を特定します

3.4 特定されたデータを処理して csv ファイルに書き込みます

まとめ

1. はじめに

スキャンされた文書は常に一般の人々の間で人気があります。紙の文書はスキャン後にアーカイブでき、いつでも携帯電話で開くことができます。それらを使用することで、心配や労力を節約できます。ただし、電子機器を介してスキャンするため、出力されるのは画像であり、ファイル上の内容を加工したい場合、直接操作することができないなど、スキャンした文書のメリットはデメリットにもなります。

内容を引用したい場合はどうすればよいですか?心配しないでください。Python が問題の解決に役立ちます。

2. 要件の説明

PDF スキャンがあります。テキストを抽出し、3 列の CSV ドキュメントに書き込みたいと考えています。内容と効果は次のとおりです:

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

pdfexample

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

csvexample

3. 手と頭を使い始めます

pdf スキャンはドキュメント スキャンであり、コンピュータの画像形式に変換され、テキストの抽出は画像内のテキストを識別することと同じです。したがって、私たちの仕事は、PDF を画像に変換し、OCR ツールを使用して画像内のテキストを抽出することです。

3.1 関連するサードパーティ パッケージをインストールします

pip3 install pdf2image pytesseract

3.2 必要なサードパーティ ライブラリをインポートします

import os #处理文件
from pdf2image import convert_from_path# pdf转图片
import pytesseract# 识别图片文字
import csv# 处理csv文件

3.3 PDF ファイルを読み取り、内容を特定します

tess_ocr (pdf_path, lang, first_page, last_page)

PDF ファイルを画像に分割し、テキストを抽出してテキスト ファイルに書き込みます

  • pdf_path: PDF の保存パスfile
  • image: PDF ドキュメントの各ページを表す PIL 画像のリスト
  • first_page: pdftoppm によって処理される最初のページを設定できます;
  • last_page: 最後のページを設定できますpdftoppm
  • fmt によって処理: 出力形式を指定できます。現在サポートされている形式は、jpg、png、ppm です。
  • 出力フォルダー: 画像の保存パス
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)

実行結果

分割を保存するための同じ名前のフォルダーを生成します。画像を作成し、画像のテキストを抽出して data.txt

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

image-20211215212147760

実行中の問題

" " 問題がスローされる1:

pdf2image.Exceptions.PDFInfoNotInstalledError: ページ数を取得できません。ポプラーはインストールされており、PATH にありますか? ''

解決策: ポプラーをダウンロードします。

#>>1 方法 1: 環境変数 Poppler/bin を設定します;

#>>2 方法 2:

パラメータは絶対パスを指定します:

images = Convert_from_path( pdf_path=pdf_file_path, Poppler_path=r'poppler 内の bin ファイルのアドレス')

" " 問題がスローされる 2:

pytesseract.pytesseract.TesseractNotFoundError: tesseract がインストールされていない、またはPATH にありません。詳細については、README ファイルを参照してください。」

解決策: さらに、tesseract-ocr をダウンロードしてインストールし、環境変数を構成します。

3.4 識別されたデータを処理して csv ファイルに書き込みます

modification(infile, outfile)

生成されたテキスト ドキュメントをクリーンアップします

infile: 処理が必要なファイルのアドレス
  • outfile: 処理後に生成された新しいファイルのアドレス
  • 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()
    
    
    
    
  • 実行結果

新しい txt ファイルを生成します。新しいファイルは data.txt 内の空白行を削除し、元のファイル内で誤って識別されたコンテンツを正しいものに置き換えます。

writercsv(intxt,outcsv)

テキスト ファイルをスペースで区切って csv テーブルに書き込みます

intxt: テキスト ファイル アドレス
  • outcsv: 新しく生成された csv ファイル
  • 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()
    
    
    
  • 実行結果

3 列の csv ファイルを生成します。最初の列は英語名、2 番目の列は中国語名、3 列目は国です

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

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

image-20211215204941725

概要

この研究を通じて、スキャンされた文書からテキストを抽出し、必要に応じてその内容をさまざまな形式に書き込むことが可能になります。 . 文書要件。

最初は、PDF を抽出するためのライブラリはスキャンされた文書にも適しているのではないかと考え、Pdfplumber ライブラリと PyPDF2 ライブラリを試してみました。

実践の結果、Pdfplumber はスキャンされた PDF のウォーターマークのみを認識でき、スキャンされた PDF には適用できないことがわかりました。PyPDF2 ライブラリが実行され、次のエラーが報告されます: NotImplementedError: アルゴリズム コード 1 と 2 のみがサポートされています。

その理由は、この暗号化 PDF は acrobot の上位バージョンからのものである可能性があるため、対応する暗号化アルゴリズム コードは「4」ですが、既存の pypdf2 モジュールは暗号化アルゴリズム コード「4」のみをサポートしています。1 ' または '2' pdf 暗号化ファイル。

以上がPythonでPDテキスト認識・抽出・CSVファイルへの書き込みスクリプト共有を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。