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

# 基本概念

> NLP 抽出ルールのコード構造 — 左側部分と右側部分、存在条件、トークンテンプレート、言語別ルール。

各検索要素ごとに、Extraction Rules アクティビティ内のコードには、順次実行される一連のルールが含まれます。各ルールは2つの部分から成り、末尾はセミコロンで終わります。

```
左側部分
=>
右側部分;
```

左側部分は条件を判定し、条件を満たす値を抽出します。右側部分は新しい検索要素インスタンスを作成し、そこに値を割り当てます。

<div id="example">
  ## 例
</div>

次の単純なルールは、キーワード「Contract」を含む検索要素 `kw_Contract` を検出します。

```
[ t: "Contract" ] // "Contract"という単語を検索し、トークンをtという新しい変数に割り当てる
=>
kw_Contract( t ); // "Contract"という単語が出現するたびに、kw_Contract検索要素の新しいインスタンスを作成する
```

<div id="left-hand-part-structure">
  ## 左側部分の構成
</div>

左側部分は最大3つの部位で構成されています。

```
Existence_condition
トークンテンプレート
Additional_check
```

<div id="existence-condition-optional">
  ### **存在条件** (任意)
</div>

指定した属性を持つオブジェクトを検索します。オブジェクトが存在する場合は、同じルール内で再利用できるよう、そのオブジェクトに名前を付けることを推奨します。この条件では、オブジェクトが存在しないことを指定することもできます。

**例**

`SellerName` 検索要素のインスタンスを1件だけ見つけたい場合は、ルールの先頭で、まだインスタンスが見つかっていないことを指定します。

```
~SellerName // SellerName検索要素がまだ見つかっていないことを確認
```

<Note>
  否定条件を使用する場合は、変数名を割り当てられません。否定条件はオブジェクトが存在しないことを意味するためです。
</Note>

この条件は、address という名前の固有表現が存在するかどうかを確認します。

```
a: NERAddress // 住所の固有表現の存在を確認し、aという新しい変数に割り当てる
```

この部分で使用される構文の詳細は、[Existence condition](/ja/vantage/documentation/advanced-designer/activities/nlp-extraction-rules/code-syntax/existence-condition)を参照してください。

<div id="token-template-required">
  ### **トークンテンプレート** (必須)
</div>

トークンの並びで構成されます。**トークン**とは、自然言語の単語または句読点です。トークンには通常スペースは含まれませんが、1つの語として扱われる表現の中に空白が含まれるまれなケース (*such as* や *a lot* など) があります。

**例**

たとえば、次のトークンテンプレートは、「Grantor」というキーワードに一致するトークンが1つ、コロンのトークンが1つ、そして**Person**という固有表現の繰り返しトークン (人名は複数の語から成り、各語が個別のトークンとなり得るため繰り返しに指定) で構成されています。

```
["Grantor"] [":"] [p: @NERPerson]+
```

このテンプレートは「Grantor: Anne Smith」のようなテキスト文字列に一致し、変数 `p` に「Anne Smith」を代入します。

この部分で使用している構文の詳細は、[Token template](/ja/vantage/documentation/advanced-designer/activities/nlp-extraction-rules/code-syntax/token-template)を参照してください。

<div id="additional-check-optional">
  ### **追加チェック** (任意)
</div>

ルール内ですでに参照されているオブジェクトに対して、さらに条件をチェックします。

**例**

たとえば、契約の当事者を特定したく、field を各当事者ごとに 2 つの別個のグループインスタンスにまとめたとします。組織名と住所が見つかったら、これらの検索要素が同じ親を持つかどうかを確認できます。そうであれば、その住所はその組織に属していることを意味します。

```
n: Party.OrgName // 組織名検索要素は既に検出されています
[ a: @Party.Address ] // 住所検索要素が検出されたトークンを検索します
// 組織名と住所の検索要素が
// 同一のPartyグループ要素インスタンスの子要素であることを確認します
parent( n ) == parent( obj( a ) )
```

この部分で使用されている構文の詳細は、[Additional check](/ja/vantage/documentation/advanced-designer/activities/nlp-extraction-rules/code-syntax/additional-check)を参照してください。

<div id="right-hand-part-structure">
  ## 右側部分の構造
</div>

右側部分は、グループと検索要素の新しいインスタンスを作成し、検索要素に値を割り当てる、カンマ区切りの1つまたは複数のパートで構成されます。

```
グループAを作成,
要素Bを作成して値を割り当てる
```

通常、規則の左辺はトークン、トークン列、またはオブジェクトを見つけて変数に代入します。次に、右辺ではこの変数を用いて、その値を検索要素のいずれかに書き込むことができます。たとえば、次のコードは `t` の値を `Element1` の検索要素に書き込みます。

### 例

```
[t: "Lease"] ["Agreement"]
=>
Root.kw_AgreementType( t );
```

この部分で使用される構文の詳細は、[右側部分](/ja/vantage/documentation/advanced-designer/activities/nlp-extraction-rules/code-syntax/right-hand-part)を参照してください。

<Note>
  コードで作成できるのは、Extraction Rules アクティビティ内に既に存在する検索要素およびグループ検索要素のインスタンスのみです。コードによって新しい検索要素を作成することはできません。構造内に検索要素を追加するには、Activity Editor の[Search Elements](/ja/vantage/documentation/advanced-designer/activities/nlp-extraction-rules/search-elements)タブを使用してください。
</Note>

<div id="referencing-search-elements">
  ## 検索要素の参照
</div>

コードで検索要素にアクセスするには、その要素を一意に識別できる名前を使用する必要があります。要素に固有の名前がある場合は、その名前だけで参照できます。同じ名前の要素が複数ある場合は、その要素を識別できるよう十分な長さのパスを指定する必要があります。

<div id="examples">
  ### 例
</div>

次のような検索要素のネスト構造を考えます:

* Property
  * Type
  * Address
* Buyer
  * FullName
  * Address

コードで買い手の氏名を参照するには、同名の要素が一意であるため、単に「FullName」を使用できます。「Buyer.FullName」や「Root.Buyer.FullName」でも同様に機能します。

買い手の住所を参照するには、「Address」という要素が2つあるため、少なくとも親グループ名を付ける必要があります。ここでは「Buyer.Address」または「Root.Buyer.Address」を使用してください。

<div id="language-specific-rules">
  ## 言語別ルール
</div>

ルールを実行する対象のDocumentの言語を指定できます。指定した場合、他の言語ではそのルールはスキップされます。ルールの前にハッシュ (#) と2文字の言語コード (ISO 639-1) を付けてください。

<div id="codes-for-the-supported-languages">
  ### サポートされている言語のコード
</div>

| 言語          | コード  |
| :---------- | :--- |
| 英語          | `en` |
| ドイツ語        | `de` |
| フランス語       | `fr` |
| スペイン語       | `es` |
| イタリア語       | `it` |
| ポルトガル語 (標準) | `pt` |
| 日本語         | `ja` |
| ロシア語        | `ru` |

例えば、英語とスペイン語のDocumentを処理する場合、言語別のキーワードを使用するとよいでしょう。

<div id="examples">
  ### 例
</div>

```
#en
[ t: "Grantor" ] // 英語文書のキーワード
=>
kw_landlord( t );

#es
[ t: "Arrendador" ] // スペイン語文書のキーワード
=>
kw_landlord( t );
```
