> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ドキュメント分類スクリプト

> ABBYY FlexiCapture でドキュメント分類スクリプトを設定し、分類器の組み合わせ、カスケード分類、信頼度に基づくクラス割り当てを行います。

ABBYY FlexiCapture の分類器は、送信されたドキュメントを処理してクラスを判定します。これにより、フィールド抽出に使用する Document Definition を選択できます。

各分類器は、特定の分類学習用バッチに対応しています。

1 つのバッチで複数の分類器を使用するには、分類スクリプトを設定します。これは、一部のドキュメントで追加の分類が必要な場合に役立ちます。最初の分類器が各ドキュメントにクラスを割り当て、その後、結果に基づいてスクリプトが追加の分類器を選択します。たとえば、最初にドキュメントを「請求書」と「契約書」に分類し、その後、請求書を会社名ごとにさらに分類できます。

<Note>
  このスクリプトは、既存の分類学習用バッチに対してのみ設定できます。新しいバッチの作成時には設定できません。
</Note>

<div id="set-up-a-classification-script">
  ## 分類スクリプトを設定する
</div>

<Steps>
  <Step title="プロジェクト プロパティを開く">
    **Project → Project Properties** をクリックします。
  </Step>

  <Step title="Recognitionタブを開く">
    プロジェクト プロパティ ウィンドウで、**Recognition** タブを開きます。
  </Step>

  <Step title="分類スクリプト エディターを開く">
    **Classification** セクションで、**Use script** の右側にある **Set** をクリックします。
  </Step>

  <Step title="分類器を追加する">
    ダイアログで **Add** をクリックし、リストから分類バッチを選択します。
  </Step>

  <Step title="エイリアス名を設定する">
    必要に応じて、分類器の **Alias Name** を変更します。スクリプトは **Alias Name** 列の名前を参照するため、処理中に分類器の名前が変わっても、スクリプトを書き直す必要はありません。
  </Step>

  <Step title="スクリプト エディターを開く">
    **Edit Script** をクリックして、[スクリプト エディター ウィンドウ](/ja/flexi-capture/interface/script-editor) を開きます。
  </Step>
</Steps>

<div id="parameters">
  ## パラメーター
</div>

| Name                  | 型                                                                               | アクセス      | 説明                                                                             |
| --------------------- | ------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------ |
| `BatchTypeClassifier` | [IBatchTypeClassifier](/ja/flexi-capture/appendix/scripts/ibatchtypeclassifier) | 読み取り専用    | バッチタイプの分類器。                                                                    |
| `IsConfident`         | bool                                                                            | 読み取り専用    | 分類の信頼度。自動分類器とは異なり、スクリプトを使用する場合、このパラメーターはページのプロパティで手動で指定する必要があります。次の例を参照してください。 |
| `Page`                | [IPage](/ja/flexi-capture/appendix/scripts/ipage)                               | 読み取り/書き込み | 文書ページ。                                                                         |
| `Processing`          | [IProcessingCallback](/ja/flexi-capture/appendix/scripts/iprocessingcallback)   | 読み取り/書き込み | 処理に関する情報をログに記録するためのオブジェクト。                                                     |

次の例では、ページのプロパティで `IsConfident` を指定しています:

```csharp theme={null}
IClassificationResult result = Classifiers[0].ClassifyPage( Page );
Page.ResultClassName = result.ClassName;
Page.IsResultClassConfident = result.IsConfident;
```

<div id="classify-a-page-and-set-the-class-name">
  ## ページを分類してクラス名を設定する
</div>

このスクリプトはページを分類し、各ページのプロパティにクラス名を設定します。

```csharp theme={null}
IBatchTypeClassifierResult classifierResult = BatchTypeClassifier.ClassifyPage( Page, null );
Page.ResultClassName = classifierResult.ClassName;
```

<div id="get-classification-confidence">
  ## 分類の信頼度レベルを取得する
</div>

このスクリプトでは、分類の信頼度レベルを取得します。

```csharp theme={null}
IClassificationResult result = Classifiers[0].ClassifyPage( Page );
FCTools.ShowMessage( "Class: " + result.ClassName );
Page.ResultClassName = result.ClassName;
FCTools.ShowMessage( "IsConfident: " + result.IsConfident );
Page.IsResultClassConfident = result.IsConfident;
```

<div id="combine-multiple-classifiers-for-cascade-classification">
  ## 複数の分類器を組み合わせてカスケード分類する
</div>

```csharp theme={null}
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;
}
else
{
    Page.ResultClassName = res0.ClassName;
}
FCTools.ShowMessage( "Page.ResultClassName: " +Page.ResultClassName);
```

<div id="assign-the-unknown-class-to-low-confidence-documents">
  ## 低信頼度の文書に Unknown クラスを割り当てる
</div>

このスクリプトは、低信頼度レベルの文書について、すでにクラスが指定されていてもクラスを割り当てる必要がない場合に使用します。このような文書は、オペレーターが手動で分類する必要があります。

<Note>
  このスクリプトを機能させるには、あらかじめ新しいクラス (たとえば "Unknown") を作成し、**Class Mapping** ダイアログでそのクラスをDocument Definitionに関連付けてください。詳細は、[クラスを Document Definition セクションにマッピングする](/ja/flexi-capture/classify-mapping-classes)を参照してください。
</Note>

```csharp theme={null}
using System;

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() ); // 分類の信頼度の値をイベントログに記録する
    Page.Comment = Page.Comment + c.Name + "-" + c.Confidence.ToString() + "; "; // 分類の信頼度の値をページコメントに記録する
}

if (classVars.Count>0)
{
    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 );
```

<Note>
  このスクリプト内の信頼度のしきい値は、デモ用です。ワークフローに応じて調整してください。
</Note>
