Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

iKnow の実装

iKnow 意味分析エンジンは、Caché の完全に統合されたコンポーネントです。別途インストールする必要はありません。構成の変更も不要です。

iKnow を使用できるかどうかは、Caché ライセンスによって管理されます。ほとんどの標準 Caché ライセンスは、iKnow へのアクセスを提供しています。iKnow をサポートするどの Caché ライセンスでも、iKnow の全コンポーネントを制限なしで完全に使用できます。

iKnow は、ObjectScript プログラムから呼び出すことが可能なクラス・オブジェクト・メソッドとプロパティを含む API のコレクションとして提供されます。Caché から iKnow 処理を呼び出すための API が提供されています (API クラス)。また、SQL (QAPI クラス) と SOAP Web サービス (WSAPI クラス) から iKnow 処理を呼び出すための同等の API が提供されています。これらの API は、"インターシステムズ・クラス・リファレンス" の %iKnow パッケージで説明されています。iKnow は Caché のコア・テクノロジであるため、アプリケーションのようなインタフェースは備えていません。ただし、iKnow はいくつかの一般的なサンプル出力インタフェースを %iKnow.UI パッケージで提供しています。

iKnow を使用するには、Caché ネームスペース内に iKnow ドメインを定義する必要があります。複数の iKnow ドメインを作成できます。Caché ネームスペースは複数の iKnow ドメインを含むことができます。すべての iKnow 処理は、指定のドメイン内で実行されます。iKnow がインデックスを作成する一連のテキスト・ソースは、ドメイン内に作成されます。すべての iKnow クエリと他のテキスト処理では、このデータにアクセスするためのドメインを指定する必要があります。

サンプル・プログラムに関するメモ

このドキュメントのサンプル・プログラムの多くでは、最初にドメイン (またはそのデータ) を削除してから、元のテキスト・ファイルから空のドメインにすべてのデータをロードしています。これにより、サンプル・プログラムの目的に沿って、iKnow がインデックスを作成したソース・データが、ロード元のファイルや SQL テーブルのコンテンツと正確に一致することが保証されます。

この削除および再ロード手法は、多数のテキスト・ソースを処理する実際のアプリケーションには推奨されません。現実のアプリケーションでは、ドメインの全ソースのロードという時間のかかる作業は、一度だけ実行するべきです。その後で個々のソースを追加または削除して、インデックスが作成されたソース・データを元のテキスト・ファイルや SQL テーブルのコンテンツで最新の状態に保つことができます。

%Persistent オブジェクト・メソッドに関するメモ

iKnow では、ドメインや構成などのオブジェクト・インスタンスの作成と削除を行うために、標準の %Persistent オブジェクト・メソッドをサポートしています。これらの %Persistent メソッドの名前は、%New()Opens in a new tab などの % 記号で始まります。%Persistent オブジェクト・メソッドの使用は、Create() などの旧式の非永続メソッドを使用する際に推奨されます。新しいコードに対しても、%Persistent オブジェクト・メソッドを使用することをお勧めします。このドキュメント全体を通じたプログラム例は、それら推奨 %Persistent メソッドの使用のために改訂されています。

%New() 永続メソッドでは、%Save() メソッドが必要になることに注意してください。旧式の Create() メソッドでは、個別の保存操作が必要ありません。

%iKnow と %SYSTEM.iKnow に関するメモ

このドキュメント全体で参照されるすべてのクラスは %iKnow パッケージ内にあります。ただし、%SYSTEM.iKnowOpens in a new tab クラスには、iKnow の一般的なオペレーションのコーディングを簡素化するために使用可能な、複数の iKnow ユーティリティも含まれています。これらのユーティリティにはショートカットが作成されているため、%SYSTEM.iKnowOpens in a new tab クラス・メソッドによって実行されるすべてのオペレーションは、%iKnow パッケージ API でも実行できます。

%SYSTEM.iKnowOpens in a new tab クラス・メソッドの情報を表示するには、Help() メソッドを使用します。すべての %SYSTEM.iKnowOpens in a new tab メソッドの情報を表示するには、%SYSTEM.iKnow.Help("") を呼び出します。特定の %SYSTEM.iKnowOpens in a new tab メソッドの情報を表示するには、以下の例に示すように、メソッド名を Help() メソッドに指定します。

  DO ##class(%SYSTEM.iKnow).Help("IndexDirectory")

詳細は、"インターシステムズ・クラス・リファレンス" を参照してください。

必要なディスク容量と iKnow グローバル

ネームスペースの iKnow グローバルは ^ISC.IK という接頭語を持ちます。

  • ^ISC.IK.* は最終グローバルで、iKnow データを含む永続的グローバルです。この iKnow データは、元のソース・テキストの約 20 倍のサイズになります。

  • ^ISC.IKS.* はステージング・グローバルです。データのロード時に、これは元のソース・テキストの 16 倍のサイズに増大する可能性があります。ステージング・グローバルは、ジャーナルされていないデータベースにマッピングしてください。ソースのロードと処理が完了すると、iKnow はこれらのステージング・グローバルを自動的に削除します。

  • ^ISC.IKT.* は一時グローバルです。データのロード時に、これは元のソース・テキストの 4 倍のサイズに増大する可能性があります。一時グローバルは、ジャーナルされていないデータベースにマッピングしてください。ソースのロードと処理が完了すると、iKnow はこれらの一時グローバルを自動的に削除します。

  • ^ISC.IKL.* はログ・グローバルです。これらはオプションで、無視できるほど小さなサイズです。

Caution:

これらのグローバルは内部使用専用です。いかなる場合も、iKnow ユーザは iKnow グローバルとの直接の対話を試みてはいけません。

例えば、30GB のソース・ドキュメントをロードする場合は、iKnow の永続的なデータ ストレージでは 600GB が必要になります。データのロード時には、1.17TB の使用可能なスペースが必要で、そのうちの 600GB が iKnow によるインデックス作成の完了時に自動解放されます。

さらに、Mgr ディレクトリの cachetemp サブディレクトリは、ファイルのロード時およびインデックス作成時に元のソース・テキストの 4 倍のサイズに増大する可能性があります。

これらの必須ディスク容量が適用されるのは、Caché 2012.2 でドメインを作成して、iKnow データをロードするとき、または Caché 2012.2 (iKnow バージョン 2) の機能をサポートするために、Caché 2012.1 (iKnow バージョン 1) で作成されたドメインをアップグレードするときです。これらは、Caché 2012.1 の iKnow データで作成およびロードされた既存のドメインには適用されず、あるいは 2012.2 内の 2012.1 ドメインに追加されたいずれのデータにも適用されません。“iKnow ツール” の章の iKnow データのアップグレード での説明のとおり、Caché 2012.1 ドメインで必要なディスク容量は少なくなっています (サポートする機能も少なくなっています)。

Caché 2013.1 (iKnow バージョン 3) で必要なデータ・ディスク容量は、Caché 2012.2 と比べてそれほど大きくはありません。

元のソース・テキストのサイズに基づいて、Caché のグローバル・バッファのサイズを増やす必要があります。詳細は、このドキュメントの “テキスト・ロード時のパフォーマンスに関する考慮事項” の章を参照してください。

バッチ・ロードのスペース割り当て

Caché では、ソース・テキストのバッチ・ロードを処理するために、各 iKnow ジョブに 256MB の追加メモリが割り当てられます。既定では、iKnow によってシステム上の各プロセッサ・コアにジョブが 1 つ割り当てられます。$$$IKPJOBS ドメイン・パラメータでは iKnow ジョブの数を設定し、通常は既定の設定で最適な結果が示されます。ただし、iKnow ジョブの最大数は、16 またはプロセッサ・コアの数のうち小さいほうにすることをお勧めします。

入力データ

iKnow は構造化されていないデータの分析に使用されます。一般的には、このデータは複数のテキスト・ソース (多くの場合は多数のテキスト) から構成されます。テキスト・ソースは以下のような任意のタイプにすることが可能です。

  • 構造化されていないテキスト・データを含むディスク上のファイル (例 : txt ファイル)。

  • 構造化されていないテキスト・データを含む 1 つ以上のフィールドを持つ SQL 結果セットのレコード。

  • 構造化されていないテキスト・データを含む RSS Web フィード。

  • 構造化されていないテキスト・データを含む Caché グローバル。

iKnow は元のテキスト・ソースの変更や、これらのテキスト・ソースのコピーの作成は行いません。iKnow はその代わりに、元のテキスト・ソースの分析結果を正規化およびインデックス付けされた項目として格納し、それぞれの項目に ID を割り当てます。この ID によって、iKnow はそのソースを参照できます。ソース、文、パス、CRC、およびエンティティの各レベルで、別個の ID が項目に割り当てられます。

iKnow は、Dutch/nl (オランダ語)、English/en (英語)、French/fr (フランス語)、German/de (ドイツ語)、Japanese/ja (日本語)、Portuguese/pt (ポルトガル語)、Russian/ru (ロシア語)、Spanish/es (スペイン語)、Swedish/sv (スウェーデン語)、および Ukrainian/uk (ウクライナ語) のテキストをサポートしています。テキストに含まれる言語を指定する必要はありません。また、すべてのテキストや個々のテキストのすべての文が同じ言語である必要もありません。iKnow は各テキストの各文の言語を自動的に識別できます。そして、その文に適した言語モデルを適用します。テキストが含む言語および自動言語識別を実行するかどうかを指定する iKnow 構成を定義できます。iKnow 構成を使用することで、iKnow のパフォーマンスを大幅に向上させることができます。

テキスト・コンテンツの種類 (例 : 医師の診断書、新聞記事など) を指定する必要はありません。iKnow は、あらゆるコンテンツ・タイプのテキストを自動的に処理します。

ファイル形式

iKnow はあらゆる拡張子 (接尾語) を持つあらゆる形式のソース・ファイルを受け入れます。既定では、ソース・テキスト・ファイルはフォーマットされていないテキスト (例 : .txt ファイル) から構成されていると想定されます。他の形式のソース・ファイル (.rtf、.doc など) も処理されますが、一部のフォーマット要素がテキストとして処理される可能性があります。これを回避するために、ソース・ファイルを .txt ファイルに変換してこれらの .txt ファイルをロードするか、iKnow コンバータを作成して iKnow ロード時にソース・テキストからフォーマットを除去することができます。

ファイル拡張子のリストを リスタ・パラメータとして指定します。すると、これらの拡張子を持つファイルのみがロードされます。例えば、このファイル拡張子のリストは、AddListToBatch() メソッド・パラメータとして指定できます。

SQL レコード形式

iKnow は SQL 結果セットのレコードをソースとして受け入れます。iKnow は iKnow ソース ID として各レコードに一意の整数値を生成します。iKnow では一意の値を含む SQL フィールドを指定でき、iKnow はこれを使用してソース・レコードの外部 ID を作成します。iKnow ソース ID と外部 ID は、しばしば両方とも一意の整数値になりますが、iKnow ソース ID は iKnow によって割り当てられ、外部 ID ではないことに注意してください。一般的に、iKnow ソース・テキストは結果セット・レコードの一部のフィールドのみ (多くの場合、構造化されていないテキスト・データを含む 1 つのフィールド) から取得されます。レコードの他のフィールドは無視できます。または、それらの値をメタデータとして使用してフィルタ処理 (包含または除外) したり、ソースにアノテーションを付けることもできます。

テキストの正規化

iKnow は元のソース・テキストへのリンクを維持します。これにより、元の大文字の使用や句読点などのままで文を返すことが可能となっています。iKnow 内では、マッチングを容易にするために、エンティティに対して以下のような正規化処理が実行されます。

  • 大文字と小文字は区別されません。iKnow マッチングでは大文字と小文字が区別されません。エンティティ値は、すべて小文字で返されます。

  • 余分な空白は無視されます。iKnow はすべての単語を 1 つの空白で区切られているものとして扱います。

  • 複数のピリオド (...) は 1 つのピリオドに削減され、このピリオドは iKnow によって文の終了文字として扱われます。

  • ほとんどの句読点は、文、概念、関係を識別するために言語モデルで使用された後で破棄されて、さらなる分析からは除外されます。句読点は一般的にエンティティ内に保持されません。ほとんどの句読点は、句読点記号の前または後に空白がない場合のみ、エンティティに保持されます。ただし、スラッシュ (/) およびアット記号 (@) は、前後の空白の有無に関係なく、エンティティに保持されます。

  • 特定の言語特有文字は正規化されます。例えば、ドイツ語の eszett (ß) 文字は “ss” として正規化されます。

iKnow エンジンは、ソース・テキストのインデックスが作成されると、自動的にテキスト正規化を実行します。また、iKnow は自動的にディクショナリの項目や用語のテキスト正規化を実行します。

また、いずれの iKnow データ・ロードにも依存せずに文字列の iKnow テキスト正規化を実行するには、Normalize()Opens in a new tab または NormalizeWithParams()Opens in a new tab メソッドを使用できます。詳細は、以下の例を参照してください。

   SET mystring="Stately plump Buck Mulligan   ascended the StairHead,  bearing a shaving bowl"
   SET normstring=##class(%iKnow.Configuration).NormalizeWithParams(mystring)
   WRITE normstring

ユーザ定義のソースの正規化

ユーザはソースの正規化を行うために何種類かのツールを定義できます。

  • コンバータは、ロード時にソース・テキストを処理してフォーマット・タグや他のテキスト以外のコンテンツを除去します。

  • UserDictionary では、ロード時に特定の入力テキスト・コンテンツ要素を書き換える方法または使用する方法についてユーザが指定できます。例えば、UserDictionary では、既知の省略形や頭文字の置換を指定できます。これは変形や同義語を除去することでテキストを標準化するためによく使用されます。また、iKnow による標準の句読点処理に対するテキスト固有の例外を指定するためにも使用できます。

出力構造

iKnow は、その処理の結果を格納するためにグローバル構造を作成します。これらのグローバル構造は、iKnow クラス API のみによって使用されることを意図されています。ユーザがこれらを見ることはできず、ユーザがこれらを変更することはできません。

iKnow がインデックスを作成したデータは、Caché リスト構造として格納されます。各 iKnow リスト構造には、その項目に対して生成された、一意の整数値である ID が含まれます。iKnow エンティティには、値または整数値の ID によってアクセスできます。

iKnow はインデックス付けされたエンティティ間の関係を保持して、各エンティティが関連するエンティティ、そのエンティティ・シーケンスのパス、そのパスを含む元の文、およびソース・テキスト内でのその文の位置を参照できるようにしています。元のソース・テキストには、常に iKnow からアクセスできます。iKnow の処理によって元のソース・テキストが変更されることは一切ありません。

定数

iKnow は %IKPublic.inc ファイルに定数値を定義します。以下の例に示されているように、このインクルード・ファイルを指定した後で、$$$ マクロ呼び出しを使用して、これらの定数を呼び出すことができます。

#Include %IKPublic
  WRITE "The $$$FILTERONLY constant=",$$$FILTERONLY

これらの定数には、ドメイン・パラメータ名、クエリ・パラメータ値、および他の定数が含まれます。

エラー・コード

一般的なエラー・コードの 8000 ~ 8099 は、iKnow での使用に予約されています。詳細は、"Caché エラー・リファレンス" の "一般的なエラー・メッセージ" を参照してください。

FeedbackOpens in a new tab