mtoda
November 20, 2019, 10:49am
1
PDF形式のオーダーから値を読み取り、ERPにそのデータ入力をする課題に取り組んでいます。
調べた結果、
1、スクレイピングで値の取得 →取得したいフィールド値が認識されず断念
2、付属OCRで値の取得→不安定でうまく値が取得できない、もしくは信頼できない
3,一度エクセルに変換し取り込む→非常に精度の高いソフトを使用しても、テストを繰り返すとかならずしも同じセルに値が入っているわけではないパターンがあり信頼できず断念
4,テキストとして読み込み、正規表現かつ文字操作 →一番うまく行ったが、たまに取り込んだテキストの一部(たとえばとある3桁の数字)の間に不明なスペースが入っているなど、予測できない事態が発生。そのような場合もあるということで修正可能だが、他にどんなサプライズが隠れているのかわからずERPに値を入力するというプログラムに使うべきでない気がする。
になりました。ここから先、というか残された方法は有償で非常に精度の高いOCRを使い、あくまで画像として取り込んで(というのもPDFの構造を利用して読み取る方法だと、どこに何が隠れていて予測通りに動かないか予測がつかないため)
①そのデータに構造を加える
②つまり顧客IDのとなりにあるフィールにある値を”顧客ID"と名付けるなど、ロボットが欲しいデータを取れるようなデータ構造を作る
とするしかないと思っているのですが、果たしてそんな使い方は可能なんでしょうか?有償のAbbyyとタクソノミーを使用すれば精度はおいておいて可能は可能でしょうか?それともOCRがこちらの望み通りにPDF上のデータを分別しなかった時点で、取り込みたい値が独立しないので(例えば欲しい値Aだけのフィールドにしたいが、別の値Bも入って一つのフィールドになってしまっている)、やはりだめなのでしょうか。
アドバイス頂ければ幸いです。
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
November 20, 2019, 10:56am
2
テキストから構造解析して、リトライを繰り返し、本番ロボットリリースしてます。
抽出結果は目視で確認して、解析漏れ対策してます。
pdfの版数に拠って構造が変わるかも知れませんが、止む無く…
mtoda
November 20, 2019, 1:26pm
3
やはり、テキストとして抽出してそれから文字操作をするというのが現実的ですよね。基本的にそれで行こうと思っており、またテストをしても良好で、たまたまランダムに発生する数字の羅列(ある価格)にスペースが2つ入ることがある事象が発生し、それ自体は対処したのですが、またこのようによくわからない事象が起こるのならやめようかなと思ったのですが、おっしゃるとおり様々なパターンでテストを繰り返しすべて網羅する力技でいけなくもないかなと。
ちなみにPDFをXMLに変換したのですが、こちらが求めていた構造できれいに摘出されていて、まだ頭を捻ってそこからどのように必要なデータを取り出すのか考えないといけないのですが、うまくいけばテキスト抽出より安定した結果が得られる可能せいがありやってみます。
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
November 20, 2019, 1:46pm
4
その時その時々で、対応出来る(しなきゃ)のがuipathの醍醐味だと思ってます。
問題に関して良い知見が得られたら、フィードバックお願いしますね。
cheez_RPA
(いわさき りょうすけ (UiPath Japan MVP 2019 - 2021))
November 21, 2019, 1:36am
5
Robot が「すべてのケースに対して有効となるようにする」ことは現実的に難しいので、どこまで割り切るのか、という話に尽きるかと思います。
今回の @mtoda さんの要件はPDFですが、それに限らず Excel のデータであっても、予期せぬインプットは発生します。
ですので、インプットのケース全体を100%としたときに、そのうちのN%が Robot で処理できるようにし、残りの(100 - N)% はエラーデータとして後に確認・修正できるようにしておくことが最善策のように思います(Nは任意の割合)。
参考として、先日の UiPath Forward III にて「Human In The Loop」というものが発表されており、 Orchestrator を利用されている場合に、人間による確認が必要なデータを「タスク」として表示し、それに対して修正・入力したデータを元に Robot が継続して処理を行う、といった動きができるようになります。そのような仕組みを活用することで、効果的な RPA の実装ができるかもしれません。
2 Likes
mtoda
November 21, 2019, 8:36am
6
回答ありがとうございます。
今回のPDFデータの処理はテキストとして取り込み、正規表現、文字操作を使って文字処理しています。ですので作り方により
①ほぼ100%確実に値が正確に取れる部分
②基本的に大丈夫だが、もしxxxのフィールドにyyyフィールドと同じ値がたまたま人的に入力されたらきびしいというような構造的に危なっかしさを取り払えない部分
③PDFからテキストを取り込んだ際に、今まで観測されていない現象(なぜかある値にスペースが入ったなど)が発生し、うまく値取得ができない可能性
の3つに別れます。
アドバイス頂いた「Human In The Loop」の考え方は、
・絶対にミスがあってはいけないフィールド値(価格など)で
・かつそのフィールドが上記であげた②のような制約を受ける場合
の際に、まず「Human In The Loop」でそのフィールド値を人間がチェックして、それから処理を進めるというイメージでしょうか?
つまり
①まず何をタスクとして定義するか決める(チェックが必要な値の選定)
②ロボットがOrchestra上で始動
③タスク部分に到達し、人間によるチェックが行われる
④再びロボットが動き出す
という流れで、人間どタッグを組み、信頼性を高めて実装する感じですかね。
2 Likes