ABBYY FlexiCapture の分類器は、送信されたドキュメントを処理してクラスを判定します。これにより、フィールド抽出に使用する Document Definition を選択できます。
各分類器は、特定の分類学習用バッチに対応しています。
1 つのバッチで複数の分類器を使用する場合は、分類スクリプトを設定する必要があります。これは、追加の分類が必要なドキュメントがある場合に便利です。この場合、まず最初の分類器でドキュメントをクラスごとに分類し、その後、分類結果に応じてスクリプトから追加の分類器が選択されます。たとえば、最初にドキュメントを「請求書」と「契約書」に分類し、その後、請求書を会社名ごとにさらに分類できます。
このスクリプトは、既存の分類学習用バッチに対してのみ設定でき、新しいバッチの作成時には設定できません。
分類スクリプトを設定するには:
- Project → Project Properties… を開きます。
- Project Properties ウィンドウの Recognition タブに移動します。
- Classification セクションの Use script の右側にある Set… をクリックして、分類スクリプトの Editor を開きます。
- ダイアログで Add… をクリックし、リストから分類バッチを選択して、適切な分類器を指定します。
- ここで、分類器の Alias Name を変更できます。これにより、処理中に分類器名が変更されても、スクリプトを書き直す必要がなくなります。スクリプトは Alias Name 列で指定された名前を参照します。
- Edit Script… をクリックして、スクリプト エディター ウィンドウ を開きます。
名前 | 型 | アクセス | 説明 |
|---|
BatchTypeClassifier | IBatchTypeClassifier | 読み取り専用 | バッチタイプ内の分類器。 |
IsConfident | bool | 読み取り専用 | 分類信頼度。自動分類器を使用する場合とは異なり、スクリプトを使用する場合は、このパラメーターをページのプロパティで手動で指定する必要があります。 例IClassificationResult result = Classifiers[0].ClassifyPage( Page );
Page.ResultClassName = result.ClassName;
Page.IsResultClassConfident = result.IsConfident;
|
Page | IPage | 読み取り/書き込み | 文書ページ。 |
Processing | IProcessingCallback | 読み取り/書き込み | 処理に関する情報をログに記録するためのオブジェクト。 |
このスクリプトはページを分類し、各ページのプロパティにクラス名を設定します。IBatchTypeClassifierResult classifierResult = BatchTypeClassifier.ClassifyPage( Page, null );
Page.ResultClassName = classifierResult.ClassName;
以下のサンプルスクリプトでは、分類信頼度レベルを取得できます。IClassificationResult result = Classifiers[0].ClassifyPage( Page );
FCTools.ShowMessage( "Class: " + result.ClassName );
Page.ResultClassName = result.ClassName;
FCTools.ShowMessage( "IsConfident: " + result.IsConfident );
Page.IsResultClassConfident = result.IsConfident;
カスケード分類のために複数の分類器を組み合わせるサンプルスクリプト
var res0 = Classifiers.Get ( "Batch" ).ClassifyPage( Page );
IClassConfidences classVars = res0.Classes;
foreach( IClassConfidence c in classVars )
FCTools.ShowMessage( c.Name + " --> " + c.Confidence.ToString() );
FCTools.ShowMessage( "Class res0: " + res0.ClassName);
if (res0.ClassName == "Invoice")
var res1 = Classifiers.Get ( "Batch2" ).ClassifyPage( Page );
IClassConfidences classVars1 = res1.Classes;
foreach( IClassConfidence d in classVars1 )
FCTools.ShowMessage( d.Name + " --> " + d.Confidence.ToString() );
FCTools.ShowMessage( "Class res1: " + res1.ClassName);
Page.ResultClassName = res1.ClassName;
Page.ResultClassName = res0.ClassName;
FCTools.ShowMessage( "Page.ResultClassName: " +Page.ResultClassName);
分類信頼度が指定値を下回る文書に Unknown クラスを割り当てるサンプルスクリプト
特定のシナリオで、信頼度レベルの低い文書にクラスを割り当てる必要がない場合 (すでにクラスが指定されている場合も含む) は、次のスクリプトを使用できます。このような文書は、オペレーターが手動で分類する必要があります。重要! このスクリプトを動作させるには、あらかじめ新しいクラス (たとえば “Unknown”) を作成しておく必要があります。次に、そのクラスを Class Mapping… ダイアログで Document Definition に関連付ける必要があります。詳細は、クラスを Document Definition セクションにマッピングするを参照してください。IClassificationResult result = Classifiers.Get ( "ClassifierBatch" ).ClassifyPage(Page);
Page.ResultClassName = result.ClassName;
IClassConfidences classVars = result.Classes;
Page.Comment = "";
foreach( IClassConfidence c in classVars )
{
//FCTools.ShowMessage( c.Name + " -- " + c.Confidence.ToString() ); // 分類信頼度の値を event log に記録します
Page.Comment = Page.Comment + c.Name + "-" + c.Confidence.ToString() + "; "; // 分類信頼度の値をページコメントに記録します
{
if (classVars[0].Confidence<80) Page.IsResultClassConfident=false; // この値を下回ると、文書は分類結果が不確かと見なされる信頼度のしきい値
else Page.IsResultClassConfident=true;
if (classVars[0].Confidence<20) Page.ResultClassName="Unknown"; // この値を下回ると、文書に "Unknown" クラスが割り当てられる信頼度のしきい値
if (classVars.Count>1) {
int classesToShow = Math.Min(classVars.Count, 3);
for(int i=0; i<classesToShow; i++)
{ Page.Comment = Page.Comment + classVars[i].Name + "-" + classVars[i].Confidence.ToString() + "; "; }
}
FCTools.ShowMessage( "Class: " + Page.ResultClassName );
注: このスクリプト内の信頼度しきい値は説明用の例にすぎず、特定の workflow に応じてユーザーが変更できます。