Win32 API 日本語リファレンス
ホームSystem.Search › IWordBreaker

IWordBreaker

COM
IIDd53552c8-77e3-101a-b552-08002b33b0e6継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

テキストを解析し、個々の単語や語句を識別します。このインターフェースは、言語固有の言語リソースコンポーネントです。バックグラウンドプロセスで使用されるため、スループットとリソース使用量の最小化の両方に最適化する必要があります。

解説(Remarks)

実装するタイミング

ある言語向けのカスタムワードブレーカーを作成するには、このインターフェースを実装します。Windows Search は、コンテンツインデックスの作成時およびクエリの実行時に、このインターフェースのメソッドを呼び出します。

Windows Search 用のワードブレーカーコンポーネントは、Local Security コンテキストで実行されます。バッファーとスタックを正しく管理するように記述してください。すべての文字列コピーには、バッファーオーバーランを防ぐための明示的なチェックを設ける必要があります。常に、割り当てられたバッファーのサイズを確認し、データのサイズをバッファーのサイズと比較して検証してください。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Init(BOOL fQuery, DWORD ulMaxTokenSize, BOOL* pfLicense)

IWordBreaker の実装を初期化し、コンポーネントが動作するモードを指定します。

fQueryBOOLinワードブレーカーが動作するモードを示すフラグです。TRUE はクエリ時の単語分割を示します。FALSE はインデックス時の単語分割を示します。
ulMaxTokenSizeDWORDinIWordSink に追加される単語の最大文字数です。この制限を超える単語は切り詰められます。
pfLicenseBOOL*inoutこの IWordBreaker 実装にライセンス上の制限があるかどうかを示すフラグを受け取る変数へのポインターです。TRUE は、このステマーの使用が許可された用途のみに制限されていることを示します。FALSE は、この IWordBreaker 実装を自由に使用できることを示します。

戻り値

型: HRESULT

このメソッドは、次の値のいずれかを返します。

戻り値 説明
S_OK
正常に完了しました。
LANGUAGE_E_DATABASE_NOT_FOUND
単語分割に必要なコンポーネントの 1 つが見つかりません。
E_INVALIDARG
引数が無効です。pfLicense パラメーターが NULL です。
E_FAIL
その他のエラーです。

解説(Remarks)

ワードブレーカーの機能は、インデックス作成時とクエリ時で基本的に同じです。相違点は言語に依存します。pfLicenseTRUE であり、ライセンス上の制限について詳しい情報が必要な場合は、IWordBreaker::GetLicenseToUse メソッドを呼び出してください。

vtbl 4 HRESULT BreakText(TEXT_SOURCE* pTextSource, IWordSink* pWordSink, IPhraseSink* pPhraseSink)

テキストを解析して単語と語句を識別し、その結果を IWordSink オブジェクトおよび IPhraseSink オブジェクトに渡します。

pTextSourceTEXT_SOURCE*inoutUnicode テキストを格納した TEXT_SOURCE 構造体へのポインターです。
pWordSinkIWordSink*inこのメソッドが生成した単語を受け取って処理する IWordSink オブジェクトへのポインターです。NULL は、このメソッドが語句のみを識別することを示します。
pPhraseSinkIPhraseSink*inこのメソッドが生成した語句を受け取って処理する IPhraseSink オブジェクトへのポインターです。NULL は、このメソッドが語句ではなく個々の単語を識別することを示します。

戻り値

型: HRESULT

このメソッドは、次の値のいずれかを返します。

戻り値 説明
S_OK
操作は成功しました。pTextSource バッファーを補充するためのテキストは、これ以上ありません。
E_INVALIDARG
引数が無効です。pTextSource パラメーターが NULL です。

解説(Remarks)

ワードブレーカーは語句よりも単語の解析を行うことの方が多いため、pPhraseSink = 0 の場合に最適化してください。pWordSinkpPhraseSink はどちらか一方を NULL にできますが、両方を NULL にすることはできません。

IWordSink オブジェクトは、ワードブレーカーが生成した単語とその異形を保持します。単語の異形が存在する場合は、まず WordSink::PutAltWord メソッドを使用して IWordSink オブジェクトに格納し、元の単語は WordSink::PutWord メソッドを使用して最後に追加します。

ソーステキストを補充するには、TEXT_SOURCE 構造体の関数ポインター要素である pfnFillTextBuffer を使用します。IWordBreaker::BreakText メソッドは、pfnFillTextBuffer が返すすべての値を処理する必要があります。エラーが発生した場合は、バッファー内のテキストの処理を終えてからエラーを処理してください。

vtbl 5 HRESULT ComposePhrase(LPWSTR pwcNoun, DWORD cwcNoun, LPWSTR pwcModifier, DWORD cwcModifier, DWORD ulAttachmentType, LPWSTR pwcPhrase, DWORD* pcwcPhrase)

サポートされていません。(IWordBreaker.ComposePhrase)

pwcNounLPWSTRinTBD
cwcNounDWORDinTBD
pwcModifierLPWSTRinTBD
cwcModifierDWORDinTBD
ulAttachmentTypeDWORDinTBD
pwcPhraseLPWSTRinTBD
pcwcPhraseDWORD*inoutTBD

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 6 HRESULT GetLicenseToUse(WORD** ppwcsLicense)

IWordBreaker インターフェースのこの実装に関するライセンス情報へのポインターを取得します。

ppwcsLicenseWORD**inこの IWordBreaker 実装のライセンス情報へのポインターを受け取る変数へのポインターです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。