> ## 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.

# Script de clasificación de documentos

> Configure un script de clasificación de documentos en ABBYY FlexiCapture para combinar clasificadores, clasificación en cascada y asignar clases según la confianza.

Un clasificador de ABBYY FlexiCapture procesa los documentos enviados y determina su clase. Esto le permite elegir una Definición de Document que se usará para la extracción de campos.

Cada clasificador corresponde a un lote de entrenamiento de clasificación específico.

Para usar varios clasificadores para un solo lote, debe configurar un script de clasificación. Esto es útil cuando algunos documentos necesitan una clasificación adicional: el primer clasificador asigna una clase a cada documento y, a continuación, el script selecciona un clasificador adicional en función del resultado. Por ejemplo, los documentos pueden clasificarse primero en "facturas" y "contratos", y luego las facturas pueden clasificarse más detalladamente según el nombre de la empresa.

<Note>
  Este script solo puede configurarse para un lote de entrenamiento de clasificación ya existente. No puede configurarlo al crear un lote nuevo.
</Note>

<div id="set-up-a-classification-script">
  ## Configurar un script de clasificación
</div>

<Steps>
  <Step title="Abrir Propiedades del proyecto">
    Haz clic en **Proyecto → Propiedades del proyecto**.
  </Step>

  <Step title="Abrir la pestaña Recognition">
    En la ventana de propiedades del proyecto, ve a la pestaña **Recognition**.
  </Step>

  <Step title="Abrir el editor de scripts de clasificación">
    En la sección **Clasificación**, haz clic en **Establecer** a la derecha de **Usar script**.
  </Step>

  <Step title="Agregar un clasificador">
    En el cuadro de diálogo, haz clic en **Agregar** y elige un lote de clasificación de la lista.
  </Step>

  <Step title="Establecer un nombre de alias">
    Si lo deseas, cambia el **Nombre de alias** del clasificador. El script hace referencia al nombre de la columna **Nombre de alias**, por lo que no tendrás que volver a escribirlo si el nombre de un clasificador cambia durante el procesamiento.
  </Step>

  <Step title="Abrir el editor de scripts">
    Haz clic en **Editar script** para abrir la [ventana del editor de scripts](/es/flexi-capture/interface/script-editor).
  </Step>
</Steps>

<div id="parameters">
  ## Parámetros
</div>

| Name                  | Type                                                                            | Access              | Description                                                                                                                                                                                                           |
| --------------------- | ------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BatchTypeClassifier` | [IBatchTypeClassifier](/es/flexi-capture/appendix/scripts/ibatchtypeclassifier) | De solo lectura     | Un clasificador del tipo de lote.                                                                                                                                                                                     |
| `IsConfident`         | bool                                                                            | De solo lectura     | Confianza de la clasificación. A diferencia de los clasificadores automáticos, cuando se usa el script, este parámetro debe especificarse manualmente en las propiedades de la página. Consulte el siguiente ejemplo. |
| `Page`                | [IPage](/es/flexi-capture/appendix/scripts/ipage)                               | Lectura y escritura | Página del documento.                                                                                                                                                                                                 |
| `Processing`          | [IProcessingCallback](/es/flexi-capture/appendix/scripts/iprocessingcallback)   | Lectura y escritura | Objeto para registrar información sobre el procesamiento.                                                                                                                                                             |

El siguiente ejemplo especifica `IsConfident` en las propiedades de la página:

```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">
  ## Clasificar una página y establecer el nombre de la clase
</div>

Este script clasifica páginas y añade el nombre de una clase a sus propiedades:

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

<div id="get-classification-confidence">
  ## Obtener el nivel de confianza de la clasificación
</div>

Este script obtiene los niveles de confianza de la clasificación:

```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">
  ## Combinar varios clasificadores para una clasificación en cascada
</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">
  ## Asigne la clase Unknown a los documentos con baja confianza
</div>

Utilice este script si su escenario no requiere que se asigne una clase a los documentos con un nivel de confianza bajo, aunque ya se les haya especificado una clase. Un operador debe clasificar dichos documentos manualmente.

<Note>
  Para que el script funcione, cree previamente una clase nueva —por ejemplo, "Unknown"— y vincúlela a la Definición de Document en el cuadro de diálogo **Class Mapping**. Para obtener más información, consulte [Asignar clases a secciones de Definición de Document](/es/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() ); // registra el valor de confianza de la clasificación en el registro de eventos
    Page.Comment = Page.Comment + c.Name + "-" + c.Confidence.ToString() + "; "; // registra el valor de confianza de la clasificación en los comentarios de la página
}

if (classVars.Count>0)
{
    if (classVars[0].Confidence<80) Page.IsResultClassConfident=false; // umbral de confianza por debajo del cual un documento se clasificará como de clasificación incierta
    else Page.IsResultClassConfident=true;

    if (classVars[0].Confidence<20) Page.ResultClassName="Unknown"; // umbral de confianza por debajo del cual se asignará a un documento la clase "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>
  Los valores del umbral de confianza de este script se incluyen solo con fines de demostración. Modifíquelos según su workflow.
</Note>
