前提・実現したいこと
私用の勉強目的で
レシート画像データを複数枚OCRで読み取って
いくつか正規表現のパターンをつくって 日付・税額表示データをリストへ取得、
DataFrame へ改行しながらデータを格納していくプログラムをPythonで実現したい
辞書形式で枠を以下のように作ってみました
data = {'日付1': str01, '日付2': str02, '日付3':str03, '8%':str04, '10%': str05}
元の画像から読み取ったテキストは以下
【精度ひくいのでごちゃごちゃしています、場所が特定できるような情報、電話番号などは削除しています】
""
領 収 証
2021年04月17日(土)12:35 ゆび0634
No04300106野地
裁録機 0133 登録No8864
※サントリー天然水ケース 398
ハミング消臭ジャス詰替 \168
*みず菜 \100
*日清焼そばソース付3人 \89
ばれいしょ \298
A* 宮城県産ひとめぼれ5 k \1.499 軒
昌 小計 \2.552 較
則 (外8% 対象 \2, 384)
| 分8 \190
-和 (外10% 対象 \168)
( | 外10 \16
支払合計 デジ 。 アロ
人凍
に XXXXXXXXXXXX
ン LaCuCa残高 \3. 313
下| *印は軽減税率(8%)適用の商品です
ーーー----- L6ノ LaCUOa --ー--ニニニニニ=
|ポト対象金額
今回取引人選ト
LaCuCa決済P対象金額
LaCuCa決済P
""
発生している問題・エラーメッセージ
(パターンA)こちらのサイトの「異なる長さのリストを含む辞書をpd.DataFrameに変換(追記 (より良い方法))」を参考にしながら https://qiita.com/ShoheiKojima/items/30ee0925472b7b3e5d5c そのあとappendでDataFrameに行ごとに追加できると思ったのですが ここからのappendの仕方が分かりません。 List化したところから Series型に変換、 空のデータフレームをつくり Series型データをAppendしていくようにしてみるパターン(パターンB)も 作ってみましたが 改行されずに 単に横に連なるデータが作成されただけでした。 自分でいろいろ試してみたのですが 知識が足らず おもったように(データフレームに行別に出力)なりません。 修正方法お分かりになる方がいらっしゃいましたら お知恵をかりたく思います、よろしくお願いいたします。
該当のソースコード
Python
1import pytesseract 2import pyocr.builders 3import re 4import pathlib as path 5import pandas as pd 6 7 8tess.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 9 10builder = pyocr.builders.TextBuilder(tesseract_layout=3) 11 12for image in images: 13 with open(image, 'rb') as file: 14 img = Image.open(file) 15 txt01 = tool.image_to_string(img, lang="jpn", builder=builder) 16 17 str01 = re.findall(r'\d*年\d*月\d*日', txt01) 18 str02 = re.findall(r'\d*年\s\d月\s\d*日', txt01) 19 str03 = re.findall(r'\d*年\s\d月\d*日', txt01) 20 str04 = re.findall(r'外8%\s対象\s*\D\d\D\s\d*', txt01) 21 str05 = re.findall(r'外10%\D*\d*', txt01) 22 23 24 data = {'日付1': str01, '日付2': str02, '日付3':str03, '8%':str04, '10%': str05} 25 df = pd.DataFrame(data.values(), index=data.keys()).T 26 27 28 29
試したこと(パターンB)
別の方法で改行\nを追加して appendしたほうが通るかと思い
list型で空のリストを作成し
for image in images:
with open(image, 'rb') as file:
img = Image.open(file)
txt01 = tool.image_to_string(img, lang="jpn", builder=builder)
str01 = re.findall(r'\d*年\d*月\d*日', txt01) li01.append(str01) str02 = re.findall(r'\d*年\s\d月\s\d*日', txt01) li01.append(str02) str03 = re.findall(r'\d*年\s\d月\d*日', txt01) li01.append(str03) str04 = re.findall(r'外8%\s対象\s*\D\d\D\s\d*', txt01) li01.append(str04) str05 = re.findall(r'外10%\D*\d*', txt01) li01.append(str05) str06 = "\n" li01.append(str06)
として動かし
li01
結果
[['2021年04月17日'],
[],
[],
['外8% 対象 \2, 384'],
['外10% 対象 \168'],
'\n',
[],
['2021年 4月 9日'],
[],
[],
[],
'\n']
となったところでシリーズ型に変換しデータフレームへ追加を行ってもみましたが
DF01 = pd.DataFrame([])
_df = pd.Series(li01)
_df = _df.append(_df, ignore_index= True)
pd.DataFrame(_df).T
結果横に伸びるだけでした
\nで改行できるかと思ったのですが…
【下記は2枚のレシートを読み込んでDataFrame.Tをこころみた後の結果】
補足情報(FW/ツールのバージョンなど)
windows10
Python 3.8
pandas 1.2.4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。