NLP のカスタマイズ
インターシステムズは、InterSystems IRIS® 自然言語処理 (NLP) を非推奨Opens in a new tabにしました。インターシステムズ製品の今後のバージョンから削除される可能性があります。以下のドキュメントは、既存ユーザのみに向けたリファレンスとしています。代替のソリューションを見いだすためのサポートを必要とする既存ユーザはインターシステムズのサポート窓口Opens in a new tabにお問い合わせください。
NLP 意味分析エンジンが InterSystems IRIS データ・プラットフォームでソース・テキストをロードおよびリストする方法をカスタマイズすることができます。以下のタイプのカスタマイズがサポートされています。
-
リスタ。既定では、NLP は一般的なデータ・ソースに対応するいくつかのリスタを提供します。一方で、使用するデータに適したカスタム・リスタを作成することも可能です。
-
プロセッサ。既定では、NLP はリスタに対応するプロセッサを使用します。一方、カスタム・プロセッサを作成してカスタム・リスタと関連付けたり、既存のプロセッサをカスタム・リスタに関連付けることができます。
-
コンバータ。コンバータは、複雑な入力テキストを NLP エンジン向けのプレーン・テキストに変換することが可能なオブジェクトです。例えば、コンバータは PDF または RTF ドキュメントからプレーン・テキストを抽出したり、XML ドキュメントから特定のノードを選択することができます。既定では、NLP はコンバータを使用しません。ユーザはカスタム・コンバータを作成し、リスタの SetConverter() または Init() メソッドでこれを指定できます。
リスタでは、オプションとして、その構成、プロセッサ、およびコンバータを指定できます。これらは、SetConfig()、SetProcessor()、および SetConverter() メソッドを使用して指定できます。または、Init() メソッドを使用すると、3 つをすべて指定できます。
以下の例は、オプション・リスタの Init()Opens in a new tab メソッドを使用してカスタム・プロセッサやカスタム・コンバータを指定する方法を示しています。どの Init() メソッド・パラメータに対しても、空の文字列 ("") を指定することで、指定のリスタの既定値を使用できます。
SET flister=##class(%iKnow.Source.File.Lister).%New(domId)
DO flister.Init(configuration,myprocessor,processorparams,myconverter,converterparams)
カスタム・リスタ
NLP は、ベース・リスタ・クラスに加え、各種入力ソースに固有のリスタを含む 5 つのサブクラスを提供しています。
カスタム・リスタを実装するには、まずベース・リスタ・クラスの %iKnow.Source.ListerOpens in a new tab を使用して、その既定値のいくつかをオーバーライドします。
リスタ名
リスタを使用するには、リスタは各ソースの外部 ID を表す形式を指定する必要があります。リスタの外部 ID は、リスタ名と完全参照から構成されます。完全参照は groupName と localRef から構成されます。以下の例で 外部 ID を示します。
:MYLISTER:groupname:localref
この例では、MYLISTER がリスタ名のエイリアスになります。エイリアスを指定しないと、リスタ・クラスの完全なクラス名が使用されます。リスタのエイリアスを判別するには、GetAlias()Opens in a new tab メソッドを使用します。
リスタ名エイリアスは、現在のネームスペース内で重複しないようにします。すでに存在しているリスタ名エイリアスを指定すると、$$$IKListerAliasInUse エラーが生成されます。
SplitFullRef() と BuildFullRef()
カスタム・リスタには SplitFullRef() インスタンス・メソッドを指定する必要があります。このメソッドは、groupName と localRef を fullRef 文字列から抽出するために使用されます。その結果は SplitExtIdOpens in a new tab クラス・メソッドに提供されます。リスタが :MYLISTER:groupname:localref のような外部 ID 形式を持つと仮定してみましょう。
このシンプルな例では、fullRef は文字列 groupname:localref から構成されるため、groupName は $PIECE(fullRef,":",1)、localRef は $PIECE(fullRef,":",2) になります。これは非常にシンプルな例で、groupName か localRef の部分に ":" 文字が含まれていると機能しないことに注意してください。
カスタム・リスタには BuildFullRef() インスタンス・メソッドを指定する必要があります。このメソッドは、groupName と localRef を組み合わせて fullRef 文字列を構成するために使用されます。その結果は BuildExtIdOpens in a new tab クラス・メソッドに提供されます。
既定のプロセッサ
プロセッサとは、リスタが生成したリストを入力として使用し、対応するソース・テキストを読み取り、インデックス作成のためにそのソース・データを NLP エンジンに宛てるクラスです。これはオプションとして、コンバータを通してこのソース・データを渡すことができます。
NLP プロセッサは %iKnow.Source.ProcessorOpens in a new tab クラスのサブクラスです。それぞれのプロセッサ・サブクラスは、ディレクトリからファイルを読み取る %iKnow.Source.File.ProcessorOpens in a new tab など、特定タイプのソースを読み取るように設計されています。
すべてのリスタは、そのリスタから取得したソースを処理することが可能な既定のプロセッサを備えています。既定では、そのリスタと同じパッケージ内のプロセッサ (Processor) というクラスを使用します。指定のリスタに対応するプロセッサがない場合、または一般的な %iKnow.Source.Temp.ProcessorOpens in a new tab を使用したい場合は、DefaultProcessor() メソッドをオーバーライドし、希望する既定のプロセッサを指定します。
リストの展開
ExpandList()Opens in a new tab メソッドは、インデックスを作成する必要があるすべてのソースをリストします。このメソッドは、カスタム・リスタのために特定タイプのソースの場所または構造全体をスキャンする方法を実装するユーザ定義サブクラスでオーバーライドする必要があります。このメソッドのパラメータは、対応する AddListToBatch() メソッドを呼び出す際に使用されるものと同じになります。パラメータは、実装するリスタによって異なります。lister.AddListToBatch() メソッドや loader.ProcessList() メソッドに指定するパラメータがユーザにわかるように、必ずリスタ固有の ExpandList() パラメータを文書化しておいてください。
ExpandList() のパラメータは以下のとおりです (指定順)。
-
Path : ソースが置かれる場所で、文字列で指定します。
-
Extensions : リストするソースを識別する 1 つまたは複数のファイル拡張子接尾語。文字列の %List として指定します。
-
Recursive : パスのサブディレクトリでソースを検索するかどうかを指定するブーリアン値。
-
Filter : リストするソースを制限するために使用するフィルタを指定する文字列。
詳細は、“プログラムによるテキスト・データのロード” の章の "リスタ・パラメータ" を参照してください。
カスタム・プロセッサ
プロセッサは、NLP 処理のために全ソースを一時グローバルにコピーするか、ソースの参照を一時グローバルに格納することができます。NLP エンジンはこれらの一時グローバルを使用して、テキストのインデックスを作成し、その結果を NLP グローバルに格納します。
リスタが対応するプロセッサを持たない場合は、%iKnow.Source.Temp.ProcessorOpens in a new tab が既定のプロセッサになります。これは各ソースの全テキストを一時グローバルにコピーします。提供される他のプロセッサは、ソースの参照を一時グローバルに格納します。..StoreTemp を使用すると、ソースのコピーを指定できます。または、..StoreRef を使用すると、ソースの参照の格納を指定できます。
メタデータ
リスタはソースをリストする一方で、ソースに追加する必要があるメタデータを抽出できます。リスタが提供するメタデータをシステムに知らせるために、関数 ..RegisterMetadataKeys(metaFieldNames) を呼び出すことができます。metaFieldNames パラメータは、メタデータのキーと値のペアについてのキーを含む %List です。この後で、関数 ..SetMetadataValues(ref, metaValues) を使用して、メタデータ値を提供できます。metaValues パラメータは、メタデータのキーと値のペアについての値を含む %List です。これらは、キーがリストされているのと同じ順序にする必要があります。
リスタにメタデータを設定したら、GetMetadataKeys()Opens in a new tab メソッドを実装することで、プロセッサでこのメタデータにアクセスできます。このメソッドは、メタデータのキーと値のペアについてのキーの %List を返します。これでプロセッサは、FetchSource() メソッドで ..SetCurrentMetadataValues(values) を呼び出すために適切な値を設定できます。この values は、メタデータのキーと値のペアについての値の %List で、キーがレポートされたのと同じ順序になります。
カスタム・コンバータ
コンバータはソース・テキストからタグを除去することで、ソース・テキストをプレーン・テキストに変換します。タグとは、表示や印刷用にテキストをフォーマットするために使用される、コンテンツ以外の要素です。例えば、RTF (Microsoft リッチ・テキスト形式) ファイルからタグを除去したり、PDF ファイルからプレーン・テキストを抽出するために、コンバータを使用できます。コンバータはリスタによって呼び出され、ソース・テキストのインデックスを作成する前に適用されます。ソース・ドキュメントの形式によっては、ソース・コンバータの使用はオプションになります。
NLP には、サブクラス %iKnow.Source.Converter.HtmlOpens in a new tab というサンプル・コンバータが 1 つ用意されており、これを使用してソース・テキストから HTML タグを削除できます。これは、基本的な HTML コンバータで、HTML ソース・テキストの完全な変換をサポートするには、このコンバータのインスタンスをカスタマイズすることが必要な場合があります。
カスタム・コンバータを実装するには、ベース・コンバータ・クラス %iKnow.Source.ConverterOpens in a new tab のいくつかのメソッドをオーバーライドする必要があります。
%OnNew
ユーザが提供する %OnNew() コールバック・メソッドは、%New() メソッドによって呼び出されます。これは、コンバータが必要とするパラメータの %List をパラメータとして使用します。
BufferString
BufferString()Opens in a new tab メソッドは、ドキュメント全体をコンバータにバッファするために、必要な回数だけ呼び出されます。それぞれの呼び出しは、data パラメータによってテキストのチャンクを提供します (最大 32K)。バッファするデータがなくなると、Convert() メソッドが呼び出されます。
Convert
Convert()Opens in a new tab メソッドは、バッファされたコンテンツを処理してデータをプレーン・テキストに変換したり (例 : RTF ファイル変換)、必要なデータをバッファから抽出します (例 : xml からのノード抽出)。変換されたデータは 32K より大きくなる可能性があるため、変換または抽出されたデータはバッファすることが必要になります。
NextConvertedPart
NextConvertedPart()Opens in a new tab メソッドは、Convert() メソッドの後で呼び出されます。このメソッドは 32K のチャンクで変換されたデータを返す必要があります。このメソッドが呼び出されるたびに、次のチャンクを返す必要があります。データがなくなると、このメソッドは空の文字列 ("") を返して、変換されたデータの抽出が終了したことを示します。