- 概要
- Document Processing Contracts
- Document Processing Contracts について
- Box クラス
- IPersistedActivity インターフェイス
- PrettyBoxConverter クラス
- IClassifierActivity インターフェイス
- IClassifierCapabilitiesProvider インターフェイス
- ClassifierDocumentType クラス
- ClassifierResult クラス
- ClassifierCodeActivity クラス
- ClassifierNativeActivity クラス
- ClassifierAsyncCodeActivity クラス
- ClassifierDocumentTypeCapability クラス
- ExtractorAsyncCodeActivity クラス
- ExtractorCodeActivity クラス
- ExtractorDocumentType クラス
- ExtractorDocumentTypeCapabilities クラス
- ExtractorFieldCapability クラス
- ExtractorNativeActivity クラス
- ExtractorResult クラス
- ICapabilitiesProvider インターフェイス
- IExtractorActivity インターフェイス
- ExtractorPayload クラス
- DocumentActionPriority 列挙型
- DocumentActionData クラス
- DocumentActionStatus 列挙型
- DocumentActionType 列挙型
- DocumentClassificationActionData クラス
- DocumentValidationActionData クラス
- UserData クラス
- Document クラス
- DocumentSplittingResult クラス
- DomExtensions クラス
- Page クラス
- PageSection クラス
- Polygon クラス
- PolygonConverter クラス
- Metadata クラス
- WordGroup クラス
- Word クラス
- ProcessingSource 列挙型
- ResultsTableCell クラス
- ResultsTableValue クラス
- ResultsTableColumnInfo クラス
- ResultsTable クラス
- Rotation 列挙型
- SectionType 列挙型
- WordGroupType 列挙型
- IDocumentTextProjection インターフェイス
- ClassificationResult クラス
- ExtractionResult クラス
- ResultsDocument クラス
- ResultsDocumentBounds クラス
- ResultsDataPoint クラス
- ResultsValue クラス
- ResultsContentReference クラス
- ResultsValueTokens クラス
- ResultsDerivedField クラス
- ResultsDataSource 列挙型
- ResultConstants クラス
- SimpleFieldValue クラス
- TableFieldValue クラス
- DocumentGroup クラス
- DocumentTaxonomy クラス
- DocumentType クラス
- Field クラス
- FieldType 列挙型
- LanguageInfo クラス
- MetadataEntry クラス
- TextType 列挙型
- TypeField クラス
- ITrackingActivity インターフェイス
- ITrainableActivity インターフェイス
- ITrainableClassifierActivity インターフェイス
- ITrainableExtractorActivity インターフェイス
- TrainableClassifierAsyncCodeActivity クラス
- TrainableClassifierCodeActivity クラス
- TrainableClassifierNativeActivity クラス
- TrainableExtractorAsyncCodeActivity クラス
- TrainableExtractorCodeActivity クラス
- TrainableExtractorNativeActivity クラス
- Document Understanding Digitizer
- Document Understanding ML
- Document Understanding OCR ローカル サーバー
- Document Understanding Process - Studio のテンプレート
- Document Understanding アクティビティ
- IntelligentOCR
- ML サービス
- OCR
- OCR Contracts
- リリース ノート
- OCR コントラクトについて
- プロジェクトの対応 OS
- IOCRActivity インターフェイス
- OCRAsyncCodeActivity クラス
- OCRCodeActivity クラス
- OCRNativeActivity クラス
- Character クラス
- OCRResult クラス
- Word クラス
- FontStyles 列挙型
- OCRRotation 列挙型
- OCRCapabilities クラス
- OCRScrapeBase クラス
- OCRScrapeFactory クラス
- ScrapeControlBase クラス
- ScrapeEngineUsages 列挙型
- ScrapeEngineBase
- ScrapeEngineFactory クラス
- ScrapeEngineProvider クラス
- OmniPage
- PDF
- [リストから削除済] ABBYY
- [リストから削除済] ABBYY Embedded
PDF ファイルを読み込み
.pdf
ファイルの内容を読み取り、個別に抽出できます。
必要に応じて、文字を認識できるシンプルなアクティビティを使用することも、OCR エンジンを持つアクティビティを使用することもできます。OCR エンジンを使用する利点は、スキャンしたドキュメント、署名のあるドキュメント、あるいは手書きのドキュメントであっても、ドキュメントの読み取りを適用できることです。
.pdf
ファイルを読み取る 2 つの状況を示しています。
- 1 つ目のシナリオとして、[PDF のテキストを読み込み] アクティビティを使用しながら
.pdf
ファイルを読み取る方法を説明しています。 -
2 つ目のシナリオとして、[OCR で PDF を読み込み] アクティビティを使用しながら
.pdf
ファイルを読み取る方法を説明しています。この 2 つのシナリオの主な違いは、2 つ目のシナリオで OCR エンジンも使用されている点です。これは、分析されたファイルが画像やスキャンされたファイルである場合、あるいは署名や手書きのフィールドを含むものである場合に、抽出された情報の詳細が最初のケースよりも正確だということを意味しています。どちらのアクティビティも、UiPath.PDF.Activities パッケージに含まれています。
両方のシナリオに必要なワークフローは 1 つだけであり、任意の読み取り方法の選択をユーザーに求める時点までは共通です。
サンプルと同等のオートメーション プロセスは以下のように構築できます。
- Studio を開いて、新しいプロセスを作成します。
-
ワークフロー デザイナーに [フローチャート] コンテナーをドラッグします。
-
次の変数を作成します。
変数名
変数の型
既定値
chooseOption
GenericValue
注: 同じ場所からプロセス全体を実行できるようにするか、指定されたファイルを使用するためにこの例をダウンロードするには、プロジェクト ディレクトリに.pdf
ファイルを追加します。
-
-
[入力ダイアログ] アクティビティをドラッグし、[Start] ノードに接続します。
- [プロパティ] パネルで、式
"Choose one option below:"
を [ラベル] フィールドに追加します。 - [Options] フィールドに式
{"Read PDF Text", "Read PDF With OCR"}
を追加します。 - [Title] フィールドに値
"Options"
を追加します。 - Result (値) フィールドに変数
chooseOption
を追加します。
- [プロパティ] パネルで、式
-
[入力ダイアログ] アクティビティの下に [フロー条件分岐] アクティビティを配置し、アクティビティに接続します。
- [プロパティ] パネルで [条件] フィールドに式
chooseOption = "Read PDF Text"
を追加します。
- [プロパティ] パネルで [条件] フィールドに式
-
[シーケンス] コンテナーをドラッグして、[フロー条件分岐] アクティビティの [True] ブランチに接続します。[シーケンス] の名前は [PDF のテキストを読み込み] にします。このアクティビティは、正規表現を使用して情報を抽出します。
-
次の変数を作成します。
変数名
変数の型
既定値
extractedText
文字列
arrayText
System.String[]
address
GenericValue
city
文字列
phoneNumber
文字列
invoiceNumber
文字列
vendor
GenericValue
bankName
文字列
bankAccount
文字列
ibanCode
文字列
-
- [シーケンス] コンテナーをドラッグして、[フロー条件分岐] アクティビティの [False] ブランチに接続します。[シーケンス] の名前は [OCR で PDF を読み込み] にします。このアクティビティは、OCRエンジン (Microsoft OCR および Tesseract OCR) を使用して情報を抽出します。
-
次の変数を作成します。
変数名
変数の型
既定値
extractedTextTesseract
文字列
extractedTextMicrosoft
文字列
現時点でのワークフローは次のようになります。
[PDF のテキストを読み込み] アクティビティを使用して PDF ファイルを読み込む
- [PDF のテキストを読み込み] シーケンス コンテナーをダブルクリックして開きます。
-
シーケンス内に [PDF のテキストを読み込み] アクティビティをドラッグします。
- [プロパティ] パネルの [ファイル名] フィールドに式
"NPO Invoice.pdf"
を追加します。 - [Range] フィールドに値
"All"
を追加します。 - [テキスト] フィールドに変数
extractedText
を追加します。
- [プロパティ] パネルの [ファイル名] フィールドに式
-
[PDF のテキストを読み込み] アクティビティの下に [代入] アクティビティを配置します。
- [左辺値 (To)/宛先] フィールドに変数
arrayText
を追加します。 - [右辺値 (Value)] フィールドに式
extractedText.Split(Environment.NewLine.ToArray, StringSplitOptions.RemoveEmptyEntries)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
[代入] アクティビティの下に [条件分岐 (if)] アクティビティをドラッグします。
- [条件 (Condition)] フィールドに式
arrayText(0).Equals("Tiefland Glass AG")
を追加します。
- [条件 (Condition)] フィールドに式
-
[シーケンス] コンテナー内に [代入] アクティビティをドラッグします。
- [左辺値 (To)/宛先] フィールドに変数
address
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(2)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
city
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(3).Split(","c)(0)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
phoneNumber
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
invoiceNumber
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
vendor
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(arrayText.Count-5)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
[Else] フィールド内に [代入] アクティビティをドラッグします。
- [左辺値 (To)/宛先] フィールドに変数
address
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(1)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
city
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(2).Split(","c)(0)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
phoneNumber
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
invoiceNumber
を追加します。 - [右辺値 (Value)] フィールドに式
arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
もう 1 つの [代入] アクティビティを追加し、前のアクティビティの下に配置します。
- [左辺値 (To)/宛先] フィールドに変数
vendor
を追加します。 -
[右辺値 (Value)] フィールドに式
arrayText(arrayText.Count-5)
を追加します。現時点でのシーケンスは次のようになります。
- [左辺値 (To)/宛先] フィールドに変数
-
[条件分岐 (if)] コンテナーの下に [繰り返し (コレクションの各要素)] アクティビティを配置し、アクティビティをダブルクリックして開きます。
- Values (値) フィールドに変数
arrayText
を追加します。
- Values (値) フィールドに変数
-
[繰り返し (コレクションの各要素)] アクティビティの [本体] コンテナー内に [条件分岐 (if)] アクティビティをドラッグします。
- [条件 (Condition)] フィールドに式
item.Contains("Bank Name:")
を追加します。
- [条件 (Condition)] フィールドに式
-
[Then] フィールド内に [代入] アクティビティをドラッグします。
- [左辺値 (To)/宛先] フィールドに変数
bankName
を追加します。 - [右辺値 (Value)] フィールドに式
item.Split(":"c)(1)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
前のアクティビティの下に [条件分岐 (if)] アクティビティを配置します。
- [条件 (Condition)] フィールドに式
item.Contains("Bank Account:")
を追加します。
- [条件 (Condition)] フィールドに式
-
[Then] フィールド内に [代入] アクティビティをドラッグします。
- [左辺値 (To)/宛先] フィールドに変数
bankName
を追加します。 - [右辺値 (Value)] フィールドに式
item.Split(":"c)(1)
を追加します。
- [左辺値 (To)/宛先] フィールドに変数
-
前のアクティビティの下に [条件分岐 (if)] アクティビティを配置します。
- [条件 (Condition)] フィールドに式
item.contains("IBAN Code:")
を追加します。
- [条件 (Condition)] フィールドに式
-
[Then] フィールド内に [代入] アクティビティをドラッグします。
- [左辺値 (To)/宛先] フィールドに変数
ibanCode
を追加します。 -
[右辺値 (Value)] フィールドに式
item.Split(":"c)(1)
を追加します。[繰り返し (コレクションの各要素)] コンテナーは次のようになります。
- [左辺値 (To)/宛先] フィールドに変数
-
[PDF のテキストを読み込み] シーケンスに戻り、[繰り返し (コレクションの各要素)] アクティビティの下に [テキスト ファイルに書き込み] アクティビティをドラッグします。
- FileName フィールドに値
"InvoiceDetails.txt"
を追加します。 -
式
"Invoice details"+Environment.NewLine+Environment.NewLine+"Vendor: "+vendor+Environment.NewLine+"Vendor address: "+address+Environment.NewLine+"City: "+city+Environment.NewLine+"Phone number:"+phoneNumber+Environment.NewLine+"Invoice number:"+invoiceNumber+Environment.NewLine+"Bank name:"+bankName+Environment.NewLine+"Bank account:"+bankAccount+Environment.NewLine+"IBAN Code:"+ibanCode
を [テキスト] フィールドに追加します。[繰り返し (コレクションの各要素)] コンテナーは次のようになります。
- FileName フィールドに値
- [Main] ワークフローの作業領域に戻ります。
[OCR で PDF を読み込み] アクティビティを使用して PDF ファイルを読み込む
- [OCR で PDF を読み込み] シーケンス コンテナーをダブルクリックして開きます。
-
シーケンス内に [OCR で PDF を読み込み] アクティビティをドラッグします。
- FileName フィールドに値
"Invoice02.pdf"
を追加します。 - [プロパティ] パネルで [並列度] フィールドに値
1
を追加します。
- FileName フィールドに値
-
[OCR で PDF を読み込み] アクティビティ内に Google OCR エンジンをドラッグします。
- [プロパティ] パネルの [テキスト] フィールドに変数
extractedTextTesseract
を追加します。
- [プロパティ] パネルの [テキスト] フィールドに変数
-
もう 1 つの [OCR で PDF を読み込み] アクティビティをドラッグし、前のアクティビティの下に配置します。
- FileName フィールドに値
"Invoice02.pdf"
を追加します。 - [プロパティ] パネルで [並列度] フィールドに値
1
を追加します。
- FileName フィールドに値
-
[OCR で PDF を読み込み] アクティビティ内に Microsoft OCR エンジンをドラッグします。
- [プロパティ] パネルの [テキスト] フィールドに変数
extractedTextMicrosoft
を追加します。
- [プロパティ] パネルの [テキスト] フィールドに変数
-
[OCR で PDF を読み込み] アクティビティの下に [テキスト ファイルに書き込み] アクティビティをドラッグします。
- FileName フィールドに値
"OCRMicrosoft.txt"
を追加します。 - [テキスト] フィールドに変数
extractedTextMicrosoft
を追加します。
- FileName フィールドに値
-
前の Write Text File アクティビティの下に Write Text File アクティビティをドラッグします。
- FileName フィールドに値
"OCRTesseract.txt"
を追加します。 -
[テキスト] フィールドに変数
extractedTextTesseract
を追加します。[OCR で PDF を読み込み] シーケンスは、次のようになります。
- FileName フィールドに値
- プロセスを実行します。ロボットは、指定されたプロセスを使用してデータを抽出し、出力を
.txt
ファイルに保存します。
こちらからサンプルをダウンロードできます。