1. はじめに
2. 要件の説明
3. 自分の頭脳を使い始める
3.1 関連するサードパーティ パッケージをインストールする
3.2 必要なサードパーティ ライブラリをインポートします
3.3 PDF ファイルを読み取って内容を特定します
3.4 特定されたデータを処理して csv ファイルに書き込みます
まとめ
スキャンされた文書は常に一般の人々の間で人気があります。紙の文書はスキャン後にアーカイブでき、いつでも携帯電話で開くことができます。それらを使用することで、心配や労力を節約できます。ただし、電子機器を介してスキャンするため、出力されるのは画像であり、ファイル上の内容を加工したい場合、直接操作することができないなど、スキャンした文書のメリットはデメリットにもなります。
内容を引用したい場合はどうすればよいですか?心配しないでください。Python が問題の解決に役立ちます。
PDF スキャンがあります。テキストを抽出し、3 列の CSV ドキュメントに書き込みたいと考えています。内容と効果は次のとおりです:
pdfexample
csvexample
pdf スキャンはドキュメント スキャンであり、コンピュータの画像形式に変換され、テキストの抽出は画像内のテキストを識別することと同じです。したがって、私たちの仕事は、PDF を画像に変換し、OCR ツールを使用して画像内のテキストを抽出することです。
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)
PDF ファイルを画像に分割し、テキストを抽出してテキスト ファイルに書き込みます
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
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: 処理が必要なファイルのアドレス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()
テキスト ファイルをスペースで区切って csv テーブルに書き込みます
intxt: テキスト ファイル アドレス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()
image-20211215204846623
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 サイトの他の関連記事を参照してください。