連続ページのPDFをOCRで読み取ってcsvに吐き出したい

1ページに1枚の業務報告書が記載されている複数ページのPDFファイルを読み取ってcsvに吐き出したいのですが、うまくいきません。
試しにテキストファイルに吐き出してみるとうまくいくので、OCRとは関係ない多分もっと別の基本的なことが理解できていないのだと思います。
ご教示賜れればと存じます。

エラー:型’String’の値を’System.Data.DataTable"に変換できません

OCRでPDFを読み込んだデータ(ここではPDFdata変数ですかね)はString型となっています。
つまり文字列です。
CSVというのはカンマ区切りで項目や値を持つデータです。

UiPathのアクティビティ「CSVに追加」ではDataTable型といわれる形式のデータをCSVファイルに吐き出すことができます。
しかしString型をCSVに追加することはできません。なので添付のようにエラーとなっています。

根本的なことをいうと、PDFデータを読み取ってCSVにするというシチュエーションがあまり浮かばないのですが(PDFデータが表形式のデータとかでしょうか?)、見直せるならTXTファイルに吐き出すようにするとかでしょうか。

1 Like

ありがとうございます。
頂いた回答ベースに調べてみましたところ、間に「データテーブルを生成」挟んで
みたらうまくいきました。あまりに基本的なことでお恥ずかしいです・・・

ある程度のフォーマットは決まっているので、EXCELマクロ辺りを併用して、帳票OCRまではいかなくても似たことができないかな、と思っていました。
が、csv見てみたらぐちゃぐちゃでした。もう少し考えてみます。

ありがとうございました。

1 Like

なるほど、なんとなくやりたい事が分かりましたが以下のような感じでしょうか?

・PDFデータ
名前:○○ 性別:××
担当業務:○○ 実施内容:××

・作りたいcsv
名前,性別,担当業務,実施内容
○○,××,○○,××

これを複数回繰り返して1つのcsvにまとめたいという感じですかね?

おそらく単純に「データテーブルを生成」でデータテーブル型にするだけだと
ダラダラとした文字列がcsvに出力されるだけとなってしまうので入力データを変換してあげる必要がありますね。
(上のように入力データ(PDFデータ)がきっちり定まっていればできそうではあります)

ありがとうございます。
まさにおっしゃる通りです。ただ、完全に定型ではなく、微妙に違う(元がwordっぽいので、入力範囲を広げられる(頂いた例ですと、「実施内容」の部分です。)のがネックになっています。

ダラダラとした文字列がcsvに出力されるだけ

そしてこちらもおっしゃる通りです・・・

>入力データを変換
申し訳ございません、この辺り少し教えてください。
テーブルに入れた状態でcsvに吐く前にデータをいじる感じでしょうか。

微妙に違う(元がwordっぽいので、入力範囲を広げられる(頂いた例ですと、「実施内容」の部分です

もしこの案件が社内の業務改善(容易に意見を言える環境)でしたら、入力形式を固定させることを考えるのもありだと思います。
ここでおっしゃっている入力範囲を広げられるというのが、入力文字数が増えるということでしたら特に問題はないと思います。そうではなく入力項目が人によって増えるということでしょうか?
もし可能でしたら例としてデータを見せていただけると考えやすいです…

テーブルに入れた状態でcsvに吐く前にデータをいじる感じでしょうか。

いえ、文字列をデータテーブルにする前にいじります。
イメージは、
①「名前」「性別」「担当業務」「実施内容」とそれぞれ変数を定義
②それぞれの変数に文字列から抽出(正規表現を使ったり…)
です。こうすることでデータテーブルが作りやすいかと思います。
伝わりますでしょうか…?

ありがとうございます。
残念ながら、他社様のを紙で頂いているだけですので、こちらからはあまり口を出せない状況でして。
入力項目は増えないのですが、入力量によって枠の範囲が大きく変わります。

変数と正規表現につきましては、本当に基本的なことだけは
知っておりますので、多分意味だけは理解できていると思います。
ただ、上記の例のように、余計な文字が入ったりで、条件付けが
難しそうです。

1000万円従業員100名代表者山田一郎
営業品目ー製造
業種ー製造業
ニーズ調査
内容司
昨日訪問した際に、が出て困っているとの話があった。
専門家に相談するとのことであった。
マニュアル等の紹介はあったが、具体的にはの専門家に話
をするようにとのことで、とりあえず、その方向で進めるとのことであった。

申し訳ございません、エラーが出たので分けました。

1 Like

残念ながら、他社様のを紙で頂いているだけですので、こちらからはあまり口を出せない状況でして。

承知しました。他社様でしたか…仕方ないですね。
ただ、他社様の今後ために入力の統一を促すような提案も良いと思いますよ。
RPA化のために業務の標準化を進めるのは大切だと思いますので!
今回は変えない方向で話を進めます。

入力項目は増えないのですが、入力量によって枠の範囲が大きく変わります。

枠の範囲が大きく変わるというのは特に問題にならないような気がします…
結局、「項目名:値」という組み合わせを作るだけなので、値は大きくなっても問題はないと思います。(OCRで読み取れなくなるのであれば問題ですが)

例のご提示ありがとうございます。
この例で取得したい(csvに吐き出したい)項目はどれでしょうか?
1行目の1000万円・・はちょっと意味が分からないですね…従業員100名とか代表者とかは分かりますが。
「営業品目」「業種」はうまく取得できそうですね。
あとはニーズ調査以下もちょっと分からないです。

この中で取得したいのは「項目名:値」でいうと
???:1000万円
従業員:100名
代表者:山田一郎
営業品目:製造
業種:製造業
内容:昨日訪問した際に・・・

であってますか?毎回このような感じでデータが来るならできなくもなさそうですが…

1 Like

body min entropy = 0

ありがとうございます。

OCRの精度なのか、データの前後関係にブレがありますが(これはこれで困ったものです)、また、先ほどはエラーが出た際に色々いじったので
うまく貼れなかった項目がありますが、

基本的には
社名:ABC社
訪問日:令和元年2月3日
内容:

が読み取れれば十分です。

そうなんですよね、そもそも今時紙でしか頂けないというのも
時代錯誤な感じはありますので、一度お話はしたのですが、難しいようです。

OCRの精度なのか、データの前後関係にブレがありますが(これはこれで困ったものです)、また、先ほどはエラーが出た際に色々いじったので
うまく貼れなかった項目がありますが

ここは私には分からないですね…ocrを使った自動化はしたことがないので…
データが前後するのは問題ないかと思いますが、値を抽出するために項目名がないと厳しいですね。

やはり、実際のデータでocr読み込みして
①データが正しく読み取れるか
②規則性があるか
を見る必要があると思います。逆にある程度データがとれて規則性があれば後はなんとかなるとおもいます。

お忙しいところありがとうございます。

値を抽出するために項目名がないと厳しいですね。
やっぱりそうですよね。
項目はあるにはあるのですが、読み取りが不安定なもので・・・

①データが正しく読み取れるか
②規則性があるか

ありがとうございます。
私もそう思います。特に、②は昨日じっくり眺めてみたのですが、
正直微妙なラインですが、いくつかパターンに分けられそうですので、
もう少しトライしてみます。

ご相談に乗って頂きありがとうございました。

1 Like