IWordBreaker
COM公式ドキュメント
テキストを解析し、個々の単語や語句を識別します。このインターフェースは、言語固有の言語リソースコンポーネントです。バックグラウンドプロセスで使用されるため、スループットとリソース使用量の最小化の両方に最適化する必要があります。
解説(Remarks)
実装するタイミング
ある言語向けのカスタムワードブレーカーを作成するには、このインターフェースを実装します。Windows Search は、コンテンツインデックスの作成時およびクエリの実行時に、このインターフェースのメソッドを呼び出します。Windows Search 用のワードブレーカーコンポーネントは、Local Security コンテキストで実行されます。バッファーとスタックを正しく管理するように記述してください。すべての文字列コピーには、バッファーオーバーランを防ぐための明示的なチェックを設ける必要があります。常に、割り当てられたバッファーのサイズを確認し、データのサイズをバッファーのサイズと比較して検証してください。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IWordBreaker の実装を初期化し、コンポーネントが動作するモードを指定します。
| fQuery | BOOL | in | ワードブレーカーが動作するモードを示すフラグです。TRUE はクエリ時の単語分割を示します。FALSE はインデックス時の単語分割を示します。 |
| ulMaxTokenSize | DWORD | in | IWordSink に追加される単語の最大文字数です。この制限を超える単語は切り詰められます。 |
| pfLicense | BOOL* | inout | この IWordBreaker 実装にライセンス上の制限があるかどうかを示すフラグを受け取る変数へのポインターです。TRUE は、このステマーの使用が許可された用途のみに制限されていることを示します。FALSE は、この IWordBreaker 実装を自由に使用できることを示します。 |
戻り値
型: HRESULT
このメソッドは、次の値のいずれかを返します。
| 戻り値 | 説明 |
|---|---|
| 正常に完了しました。 | |
| 単語分割に必要なコンポーネントの 1 つが見つかりません。 | |
| 引数が無効です。pfLicense パラメーターが NULL です。 | |
| その他のエラーです。 |
解説(Remarks)
ワードブレーカーの機能は、インデックス作成時とクエリ時で基本的に同じです。相違点は言語に依存します。pfLicense が TRUE であり、ライセンス上の制限について詳しい情報が必要な場合は、IWordBreaker::GetLicenseToUse メソッドを呼び出してください。
テキストを解析して単語と語句を識別し、その結果を IWordSink オブジェクトおよび IPhraseSink オブジェクトに渡します。
| pTextSource | TEXT_SOURCE* | inout | Unicode テキストを格納した TEXT_SOURCE 構造体へのポインターです。 |
| pWordSink | IWordSink* | in | このメソッドが生成した単語を受け取って処理する IWordSink オブジェクトへのポインターです。NULL は、このメソッドが語句のみを識別することを示します。 |
| pPhraseSink | IPhraseSink* | in | このメソッドが生成した語句を受け取って処理する IPhraseSink オブジェクトへのポインターです。NULL は、このメソッドが語句ではなく個々の単語を識別することを示します。 |
戻り値
型: HRESULT
このメソッドは、次の値のいずれかを返します。
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。pTextSource バッファーを補充するためのテキストは、これ以上ありません。 | |
| 引数が無効です。pTextSource パラメーターが NULL です。 |
解説(Remarks)
ワードブレーカーは語句よりも単語の解析を行うことの方が多いため、pPhraseSink = 0 の場合に最適化してください。pWordSink と pPhraseSink はどちらか一方を NULL にできますが、両方を NULL にすることはできません。
IWordSink オブジェクトは、ワードブレーカーが生成した単語とその異形を保持します。単語の異形が存在する場合は、まず WordSink::PutAltWord メソッドを使用して IWordSink オブジェクトに格納し、元の単語は WordSink::PutWord メソッドを使用して最後に追加します。
ソーステキストを補充するには、TEXT_SOURCE 構造体の関数ポインター要素である pfnFillTextBuffer を使用します。IWordBreaker::BreakText メソッドは、pfnFillTextBuffer が返すすべての値を処理する必要があります。エラーが発生した場合は、バッファー内のテキストの処理を終えてからエラーを処理してください。
サポートされていません。(IWordBreaker.ComposePhrase)
| pwcNoun | LPWSTR | in | TBD |
| cwcNoun | DWORD | in | TBD |
| pwcModifier | LPWSTR | in | TBD |
| cwcModifier | DWORD | in | TBD |
| ulAttachmentType | DWORD | in | TBD |
| pwcPhrase | LPWSTR | in | TBD |
| pcwcPhrase | DWORD* | inout | TBD |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IWordBreaker インターフェースのこの実装に関するライセンス情報へのポインターを取得します。
| ppwcsLicense | WORD** | in | この IWordBreaker 実装のライセンス情報へのポインターを受け取る変数へのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWordBreaker "{D53552C8-77E3-101A-B552-08002B33B0E6}" #usecom global IWordBreaker IID_IWordBreaker "{}" #comfunc global IWordBreaker_Init 3 int,int,var #comfunc global IWordBreaker_BreakText 4 var,sptr,sptr #comfunc global IWordBreaker_ComposePhrase 5 wstr,int,wstr,int,int,wstr,var #comfunc global IWordBreaker_GetLicenseToUse 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWordBreaker "{D53552C8-77E3-101A-B552-08002B33B0E6}" #usecom global IWordBreaker IID_IWordBreaker "{}" #comfunc global IWordBreaker_Init 3 int,int,sptr #comfunc global IWordBreaker_BreakText 4 sptr,sptr,sptr #comfunc global IWordBreaker_ComposePhrase 5 wstr,int,wstr,int,int,wstr,sptr #comfunc global IWordBreaker_GetLicenseToUse 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。