UiPathのRPAチャレンジ!!!
こんにちは、マイカです。
今回はPLAYの公式noteから転載してお送りしております!
PLAYのフィードで技術系の投稿をすることはほとんどないのですが、この記事をもとにこういった技術を持っているエンジニアがいるんだ!ということを知って頂けたらと思っております^^
●「Invoice Extraction」の解き方
今回は、UiPathのRPAチャレンジ「Invoice Extraction」の解き方を共有します。なお、本問題がRPA×AIの領域な事もあり(※)、中上級者の方を想定して記事を書きます。
※Google Cloud Vision OCRを使います。
【問題】
期日切れの請求書データをCSVに出力せよ、という問題です。(意訳)
なお、表から取得できる請求書は2種類あり、請求書番号、請求書日付、会社名、合計支払額を抽出する必要があります。
【解き方】
それでは、解きます。
・「データスクレイピング」アクティビティで表データを取得します。結果の最大数を12に、出力変数をExtractDataTableとします。なお、ここで取得できなかった請求書ページへのリンクは、後に「クリック」アクティビティで取得します。
・「クリック」アクティビティで、1ページ目に戻ります。
・「CSVを読み込む」アクティビティで、最終的な成果物となるファイルを読み込み、データテーブル型の変数dataTableを出力します。
以降、「繰り返し(各行)」アクティビティで、表の各行に対して処理を行います。
・請求書ページに移動するボタンのセレクターを見ると、tableRowが上から2,3,4,5となっている為、初期値1の変数rowNumberを設定し、順に2,3,4,5,2,3,4,5,2,3,4,5となるよう、rowNumberが5になった時に2に戻します。
・「代入」アクティビティで、表からIDと期日を取得します。期日は以下のように取得します。
・「条件分岐」アクティビティで、期日を過ぎていなければ「繰り返しをコンティニュー」アクティビティで、後続処理を行わずに、次の行の処理に移動します。
・「クリック」アクティビティで、請求書ページに移動します。
なお、請求書ページに移動する為のセレクターは以下のように設定しています。
・「画像の有無を確認」アクティビティで、開いた請求書を検知します。出力値はisAeneanLLCです。Aenean LLCの請求書ならTrueになります。
開いた請求書によって、処理を分けます。
【Aenean LLCの請求書の処理】(isAeneanLLCがTrue)
・「画面スクレイピング」で、出力変数をinvoiceAllTextとし、テキストを取得します。そして、Tesseract OCRやMicrosoft OCRでは、テキストを正確に認識できないため、OCRはGoogle Cloud Vision OCRを利用します(★)。(今回私は、こちらの資料を参考にし、APIキーを取得しました。)
★Tesseract OCRでテキスト読み取りをした場合↓(精度低)
★Google Cloud Vision OCRでテキスト読み取りをした場合↓(精度高)
・「代入」アクティビティで、請求書番号を以下のように設定します。(変数はinvoiceNumber、型はString。)
・「代入」アクティビティで、請求書の日付を以下のように設定します。(変数はinvoiceDate、型はDateTime。)
・「代入」アクティビティで、請求金額を以下のように設定します。(変数はinvoiceTotalDue、型はString。)
・「代入」アクティビティで、請求社名を「"Aenean LLC"」とします。(変数はinvoiceName、型はString。)
Aenean LLCの請求書の処理は以上です。
【Sit Amet Corp. の請求書の処理】(isAeneanLLCがFalse)
Sit Amet Corp.の処理は、Aenean LLCの請求書の処理と殆ど同じです。各アクティビティで出力する変数もAenean LLCと同様のものを利用します。
・「画面スクレイピング」で、出力変数をinvoiceAllTextとし、テキストを取得します。invoiceAllTextの内容は以下メッセージボックスのようになります。
・「代入」アクティビティで、請求書番号を設定します。
・「代入」アクティビティで、請求金額を設定します。
・「代入」アクティビティで、請求社名を「"Sit Amet Corp."」に設定します。
・OCRで読み取ったテキストの請求書日付の位置は、2パターンある為、「トライキャッチ」アクティビティで請求書日付を取得します。
パターン1:請求書日付の上の行が、「Date:」であるパターン。
パターン2:請求書日付の上の行が、「Sit Amet Corp.」であるパターン。
Sit Amet Corp.の請求書の処理は以上です。
以下、これまでに取得したデータの整形と、データテーブルへの追加処理をします。
・「代入」アクティビティで、期日と請求書日付を(yyyy-MM-dd)の形式に変更し、新たな変数inputDueDateと、inputInvoiceDateに代入します。
・「代入」アクティビティで、CSVのセルの形式が「通貨」にならないよう、請求金額の「,」を削除します。
・「データ行を追加」アクティビティで、これまで作成したデータをdataTableに代入します。
・「タブを閉じる」アクティビティで、開いていた請求書ページを閉じます。
以上で、繰り返し処理内での実装は完了です。
あと少し。
・「CSVに追加」アクティビティで、dataTableをCSVファイルに追加します。
・「クリック」アクティビティで、提出ボタンのある3ページ目を表示します。
・「文字を入力」アクティビティで、ファイル名を指定し、「クリック」アクティビティで、「開く」をクリックし、CSVファイルを提出します。
実行してみます。
以上です、お疲れさまでした!