NLP の実装
NLP 意味分析エンジンは、InterSystems IRIS® Data Platform の完全に統合されたコンポーネントです。別途インストールする必要はありません。構成の変更も不要です。
NLP を使用できるかどうかは、InterSystems IRIS ライセンスによって管理されます。ほとんどの標準 InterSystems IRIS ライセンスが NLP へのアクセスを提供しています。NLP をサポートするどの InterSystems IRIS ライセンスでも、NLP の全コンポーネントを制限なしで完全に使用できます。
NLP は、ObjectScript プログラムから呼び出すことが可能なクラス・オブジェクト・メソッドとプロパティを含む API のコレクションとして提供されます。InterSystems IRIS から NLP 処理を呼び出すための API が提供されています (API クラス)。また、SQL (QAPI クラス) と SOAP Web サービス (WSAPI クラス) から NLP 処理を呼び出すための同等の API が提供されています。これらの API は、"インターシステムズ・クラス・リファレンス" の "%iKnow" パッケージで説明されています。NLP は InterSystems IRIS のコア・テクノロジであるため、アプリケーションのようなインタフェースは備えていません。ただし、NLP はいくつかの一般的なサンプル出力インタフェースを %iKnow.UI パッケージで提供しています。
InterSystems IRIS NLP を使用してテキスト・ソースを分析するには、InterSystems IRIS ネームスペースに NLP ドメインを定義し、そのドメインにテキストをロードする必要があります。単一のネームスペースに (複数のコンテキストに対する) 複数のドメインを作成できます。ドメインを作成すると、そこにある一連のテキスト・ソースのインデックスが NLP によって生成されます。すべての NLP クエリと他のテキスト処理では、このデータにアクセスするためのドメインを指定する必要があります。
サンプル・プログラムに関するメモ
このドキュメント内のサンプルの多くで、Aviation.Event SQL テーブルからのデータが使用されています。このサンプル・データを使用する場合、https://github.com/intersystems/Samples-AviationOpens in a new tab で入手できます(GitHub の知識や GitHub アカウントは必要ありません)。 README.md ファイルの内容を確認します。このファイルは、GitHub リポジトリに含まれるファイル名とディレクトリの下に表示されています。README.md ファイルの下部にある “Setup instructions” セクションまでスクロールして、その手順を完了します。
このドキュメントのサンプル・プログラムの多くでは、最初にドメイン (またはそのデータ) を削除してから、元のテキスト・ファイルから空のドメインにすべてのデータをロードしています。これにより、サンプル・プログラムの目的に沿って、NLP がインデックスを作成したソース・データが、ロード元のファイルや SQL テーブルのコンテンツと正確に一致することが保証されます。
この削除および再ロード手法は、多数のテキスト・ソースを処理する実際のアプリケーションには推奨されません。現実のアプリケーションでは、ドメインの全ソースのロードという時間のかかる作業は、一度だけ実行するべきです。その後で個々のソースを追加または削除して、インデックスが作成されたソース・データを元のテキスト・ファイルや SQL テーブルのコンテンツで最新の状態に保つことができます。
%Persistent オブジェクト・メソッドに関するメモ
NLP では、ドメインや構成などのオブジェクト・インスタンスの作成と削除を行うために、標準の %Persistent オブジェクト・メソッドをサポートしています。これらの %Persistent メソッドの名前は、%New()Opens in a new tab などの % 記号で始まります。%Persistent オブジェクト・メソッドの使用は、Create() などの旧式の非永続メソッドを使用する際に推奨されます。新しいコードに対しても、%Persistent オブジェクト・メソッドを使用することをお勧めします。このドキュメント全体を通じたプログラム例は、それら推奨 %Persistent メソッドの使用のために改訂されています。
%New() 永続メソッドでは、%Save() メソッドが必要になることに注意してください。旧式の Create() メソッドでは、個別の保存操作が必要ありません。
必要なディスク容量と NLP グローバル
ネームスペースの NLP グローバルは ^IRIS.IK という接頭語を持ちます。
-
^IRIS.IK.* は最終グローバルで、NLP データを含む永続的グローバルです。この NLP データは、元のソース・テキストの約 20 倍のサイズになります。
-
^IRIS.IKS.* はステージング・グローバルです。データのロード時に、これは元のソース・テキストの 16 倍のサイズに増大する可能性があります。ステージング・グローバルは、ジャーナルされていないデータベースにマッピングしてください。ソースのロードと処理が完了すると、NLP はこれらのステージング・グローバルを自動的に削除します。
-
^IRIS.IKT.* は一時グローバルです。データのロード時に、これは元のソース・テキストの 4 倍のサイズに増大する可能性があります。一時グローバルは、ジャーナルされていないデータベースにマッピングしてください。ソースのロードと処理が完了すると、NLP はこれらの一時グローバルを自動的に削除します。
-
^IRIS.IKL.* はログ・グローバルです。これらはオプションで、無視できるほど小さなサイズです。
Caution:
これらのグローバルは内部使用専用です。いかなる場合も、NLP ユーザは NLP グローバルとの直接の対話を試みてはいけません。
例えば、30GB のソース・ドキュメントをロードする場合は、NLP の永続的なデータ ストレージでは 600GB が必要になります。データのロード時には、1.17TB の使用可能なスペースが必要で、そのうちの 600GB が NLP によるインデックス作成の完了時に自動解放されます。
さらに、Mgr ディレクトリの iristemp サブディレクトリは、ファイルのロード時およびインデックス作成時に元のソース・テキストの 4 倍のサイズに増大する可能性があります。
元のソース・テキストのサイズに基づいて、InterSystems IRIS のグローバル・バッファのサイズを増やす必要があります。詳細は、このドキュメントの “テキスト・ロード時のパフォーマンスに関する考慮事項” の章を参照してください。
バッチ・ロードのスペース割り当て
InterSystems IRIS では、ソース・テキストのバッチ・ロードを処理するために、各 NLP ジョブに 256MB の追加メモリが割り当てられます。既定では、NLP によってシステム上の各プロセッサ・コアにジョブが 1 つ割り当てられます。$$$IKPJOBS ドメイン・パラメータでは NLP ジョブの数を設定し、通常は既定の設定で最適な結果が示されます。ただし、NLP ジョブの最大数は、16 またはプロセッサ・コアの数のうち小さいほうにすることをお勧めします。
出力構造
NLP は、その処理の結果を格納するためにグローバル構造を作成します。これらのグローバル構造は、NLP クラス API のみによって使用されることを意図されています。ユーザがこれらを見ることはできず、ユーザがこれらを変更することはできません。
NLP がインデックスを作成したデータは、InterSystems IRIS リスト構造として格納されます。各 NLP リスト構造には、その項目に対して生成された ID (一意の整数値) が含まれます。NLP エンティティには、値または整数値の ID によってアクセスできます。
NLP はインデックス付けされたエンティティ間の関係を保持して、各エンティティが関連するエンティティ、そのエンティティ・シーケンスのパス、そのパスを含む元の文、およびソース・テキスト内でのその文の位置を参照できるようにしています。元のソース・テキストには、常に NLP からアクセスできます。NLP の処理によって元のソース・テキストが変更されることは一切ありません。
定数
NLP は %IKPublic.inc ファイルに定数値を定義します。以下の例に示されているように、このインクルード・ファイルを指定した後で、$$$ マクロ呼び出しを使用して、これらの定数を呼び出すことができます。
#include %IKPublic
WRITE "The $$$FILTERONLY constant=",$$$FILTERONLY
これらの定数には、ドメイン・パラメータ名、クエリ・パラメータ値、および他の定数が含まれます。
エラー・コード
一般的なエラー・コードの 8000 ~ 8099 は、NLP での使用に予約されています。詳細は、"InterSystems IRIS エラー・リファレンス" の "一般的なエラー・メッセージ" を参照してください。