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

# 抽出スクリプトの例

> FieldExtractorオブジェクトを使用した抽出スクリプトのサンプル: NERオブジェクトの抽出、XMLクエリの実行、郵便番号や住所といった住所コンポーネントの解析。

これらの例では、`FieldExtractor`オブジェクトを使った抽出スクリプトで、固有表現を検出し、XMLクエリを実行し、住所コンポーネントを個別のfieldに分けて解析する方法を示します。

<div id="c-extraction-script-example">
  ## C# 抽出スクリプトの例
</div>

次の C# の例では、`FieldExtractor` オブジェクトに対して複数の抽出メソッドを実行します。キーワードと人名を照合し、テキスト範囲を field に書き込み、辞書内の 2 単語フレーズに対して XML クエリを実行します。

```csharp theme={null}
FieldExtractor.ExtractRegularExpression( "(grant(s))|(convey to)|(grant)", "keyWords" );
FieldExtractor.ExtractWordsFromUserDictionary("dictionary", "English");
FieldExtractor.ExtractNerObjects();

// コレクション名で識別済みオブジェクトにアクセスする
IExtractedObjects personObjects = FieldExtractor.ExtractedObjects( "NerPerson" );
IExtractedObjects keyWordsObjects = FieldExtractor.ExtractedObjects( "keyWords" );

// キーワードの左側にマッチングする人を検索する
for( int i = 0; i < keyWordsObjects.Count; i++ ) {
    IExtractedObject keyWord = personObjects.Item( i );
    IInterval span = keyWord.Span;
    IExtractedObject grantor = personObjects.Find( span.StartPos, false );
    string grantorName = grantor.Value;
    if ( grantorName.Length > 2 && grantorName != "Doug Darrell" ) {
        FieldExtractor.PutSpanToField( grantor.Span, "NlpField1" );
    }
}

// ソーステキストにアクセスする
string sourceText = FieldExtractor.SourceText;

// 任意のテキストスパンをfieldに書き込む
FieldExtractor.PutTextToField( 0, sourceText.Length - 1, "NlpField2" );

// 2単語のdictionaryフレーズを検索するXMLクエリ
string query = "<Request> " +
    "<Query>" +
    "<Contain MaxDistance=\"1\">" +
    "<Required>" +
    "<Form><Attributes><Attribute>dictionary1</Attribute></Attributes></Form>" +
    "</Required>" +
    "<Required>" +
    "<Form><Attributes><Attribute>dictionary2</Attribute></Attributes></Form>" +
    "</Required>" +
    "</Contain>" +
    "</Query>" +
    "</Request>";

// クエリを実行し、結果のコレクションを取得してfieldに保存する
FieldExtractor.RunQueryAndSaveToField( query, "query1", "NlpField3");

// クエリを実行し、結果のコレクションを取得する
IExtractedObjects queryResults1 = FieldExtractor.RunQuery( query, "query2" );

// クエリ実行後にクエリ結果へアクセスする別の方法
IExtractedObjects queryResults2 = FieldExtractor.QueryResults( "query2" );
```

<div id="script-parameters">
  ## スクリプト パラメーター
</div>

| Name             | 型                                                      | 権限   | Value                    |
| ---------------- | ------------------------------------------------------ | ---- | ------------------------ |
| `FieldExtractor` | [IFieldExtractor](/ja/flexi-capture/i-field-extractor) | 読み取り | 文書内のテキストに含まれるfieldを識別します |

<a id="entirefield" />

<div id="sample-address-extraction-script-for-the-entire-field">
  ## field 全体用の住所抽出スクリプトのサンプル
</div>

このスクリプトは、ソース field 全体に対して実行されます。住所を解析し、郵便番号と住所を別々の field として抽出します。

```javascript theme={null}
// 住所を解析する
this.ParseAddress();

// コンポーネントを個別のfieldに抽出する
var zip = this.ExtractedObjects( "NerZipCode" );
var street = this.ExtractedObjects( "NerStreet" );

for( var i = 0; i < zip.Count; i++ ) {
    this.PutSpanToField( zip.Item(i).Span, "ZipCode" );
}

for( var j = 0; j < street.Count; j++ ) {
    this.PutSpanToField( street.Item(j).Span, "Street" );
}
```

<a id="partofafield" />

<div id="sample-address-extraction-script-for-part-of-a-field">
  ## field の一部向け住所抽出スクリプトのサンプル
</div>

このスクリプトは、ソース field の一部に対して呼び出されます。NER の住所オブジェクトを検出し、それを各構成要素に分割して、郵便番号と住所を別々の field に保存します。

```javascript theme={null}
// fieldまたはセクションのテキスト内のすべてのNERオブジェクトを検出する
this.ExtractNerObjects();

// Addressオブジェクトを抽出する
var address = this.ExtractedObjects( "NerAddress" );

// 住所をコンポーネントに分割する
for( var addressSpanIndex = 0; addressSpanIndex < address.Count; addressSpanIndex++ ) {
    this.PutSpanToField( address.Item(addressSpanIndex).Span, "Address" );

    // 指定された住所のすべてのコンポーネントコレクション名に一意のプレフィックスを割り当てる
    var collectionName = "nerAddress" + String(addressSpanIndex);

    // 住所を抽出する
    this.ParseAddressInPosition( collectionName, address.Item(addressSpanIndex).Span.StartPos, address.Item(addressSpanIndex).Span.EndPos );

    // コンポーネントを個別のfieldに保存する
    var zip = this.ExtractedObjects( collectionName, "NerZipCode" );
    var street = this.ExtractedObjects( collectionName, "NerStreet" );
    RunQueryAndSaveToField
    for( var i = 0; i < zip.Count; i++ ) {
        this.PutSpanToField( zip.Item(i).Span, "ZipCode" );
    }
    for( var j = 0; j < street.Count; j++ ) {
        this.PutSpanToField( street.Item(j).Span, "Street" );
    }
}
```
