IStemmer
COM公式ドキュメント
言語固有の stemmer (語幹処理エンジン) を作成するためのメソッドを提供します。stemmer は、指定された単語の活用形を生成します。
解説(Remarks)
実装するタイミング
言語用のカスタム stemmer を作成するには、このインターフェイスを実装します。Windows Search は、インデックスの作成時に識別した単語の活用形を生成するために、このインターフェイスのメソッドを呼び出します。Windows Search 用の stemmer コンポーネントは Local Security コンテキストで実行されます。バッファーとスタックを正しく管理するように記述する必要があります。すべての文字列コピーには、バッファーオーバーランを防ぐための明示的なチェックが必要です。常に割り当てたバッファーのサイズを確認し、データのサイズをバッファーのサイズと照合してください。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
stemmer を初期化します。
| ulMaxTokenSize | DWORD | in | IWordFormSink オブジェクトに追加される単語の最大文字数。この制限を超える単語は切り詰められる場合があります。 |
| pfLicense | BOOL* | inout | この IStemmer 実装にライセンス上の制限があるかどうかを示すフラグを受け取る出力変数へのポインター。TRUE は、この stemmer が許可された用途に限定されていることを示します。FALSE は、この IStemmer 実装を自由に使用できることを示します。 |
戻り値
型: HRESULT
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 正常に完了しました。 | |
| ワードブレークに使用するコンポーネントのいずれかが見つかりません。 | |
| 引数が無効です。pfLicense パラメーターが NULL です。 | |
| 正常に完了しませんでした。 |
解説(Remarks)
stemmer は必ず初期化する必要があります。IStemmer::Init メソッドは、IStemmer の他のメソッドよりも先に呼び出す必要があります。pfLicense が TRUE で、ライセンス上の制限について詳しい情報が必要な場合は、IStemmer::GetLicenseToUse メソッドを呼び出してください。
単語の別形を生成し、それらを IWordFormSink オブジェクトに格納します。
| pwcInBuf | LPWSTR | in | 語幹処理の対象となる単語を格納したバッファーへのポインター。pwcInBuf 内の文字は Unicode で表現されます。 |
| cwc | DWORD | in | pwcInBuf 内の文字数。 |
| pStemSink | IWordFormSink* | in | このメソッドが生成した単語の別形を受け取って処理する IWordFormSink オブジェクトへのポインター。 |
戻り値
型: HRESULT
このメソッドは次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 正常に完了しました。 | |
| 引数が無効です。pwcInBuf または pWordFormSink が NULL です。 |
この IStemmer 実装のライセンス情報を取得します。
| ppwcsLicense | WORD** | in | この IStemmer 実装のライセンス情報へのポインターを受け取る変数へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Windows Search はライセンス上の制限を強制しません。ライセンス情報の格納方法は実装によって決定されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IStemmer "{EFBAF140-7F42-11CE-BE57-00AA0051FE20}" #usecom global IStemmer IID_IStemmer "{}" #comfunc global IStemmer_Init 3 int,var #comfunc global IStemmer_GenerateWordForms 4 wstr,int,sptr #comfunc global IStemmer_GetLicenseToUse 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IStemmer "{EFBAF140-7F42-11CE-BE57-00AA0051FE20}" #usecom global IStemmer IID_IStemmer "{}" #comfunc global IStemmer_Init 3 int,sptr #comfunc global IStemmer_GenerateWordForms 4 wstr,int,sptr #comfunc global IStemmer_GetLicenseToUse 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。