言語リソースとベスト プラクティスのトラブルシューティング
このトピックでは、 IWordBreaker と IStemmer の実装を検証およびトラブルシューティングするためのベスト プラクティスと推奨事項について説明します。
このトピックは次のように整理されています。
ベスト プラクティス
- レジストリで、言語リソースのスレッド モデルが "両方" に設定されていることを確認します。
- 可能な場合は、別のファイルではなく DLL 内のリソースに言語データを配置します。 これにより、DLL のインストールが容易になり、セキュリティが強化されます。 さらに、言語データをリソースに配置すると、その言語リソース コンポーネントのパフォーマンスが向上します。
- 言語リソース コンポーネントが使用するシステム リソースを最小限に抑えます。 たとえば、言語リソース オブジェクトの各インスタンスで辞書への読み取り専用アクセスが必要な場合は、すべてのインスタンスで辞書を共有することを検討してください。
- ワード ブレーカー実装の言語またはロケールにないテキストを処理するには、ニュートラル ワード ブレーカーを使用することを検討してください。 これにより、すべての言語でテキストが一貫して処理されます。
- すべてのリターン コードを確認し、 IStemmer::GenerateWordForms や IWordBreaker::BreakText などの関数から返します。 インデックス作成に失敗した場合は、エラーを渡して、インデックスが作成されたドキュメントがユーザーに通知されるようにすることが重要です。
ステマーの整合性のテスト
次の条件で一貫性を保つ IStemmer 実装のパフォーマンスを監視することをお勧めします。
- ステミング機能は、 IStemmer::Init に対する複数の呼び出しで一貫して実行されます。 ステミング機能は、パラメーターを解放せずに、前の初期化と同じパラメーターを使用して再初期化します。
- 同じテスト コーパスと同じクエリの繰り返しを考えると、 IStemmer::GenerateWordForms は同じ出力を生成し、 IWordFormSink オブジェクトのメソッドに対して同じ呼び出しを行います。
ステマーでの無効な入力のテスト
IStemmer メソッドが無効なパラメーターに関連するすべてのエラーを処理する方法を監視することをお勧めします。 また、ステマー メソッドで未処理の例外が発生しないようにすることをお勧めします。 ステミング機能は、次のエラーを処理する必要があります。
- pfLicense を NULL に設定して IStemmer::Init を呼び出します。 Init は失敗し、アクセス違反は発生しません。
- ppwcsLicense パラメーターを NULL に設定して、IStemmer::GetLicenseToUse を呼び出します。 IStemmer::GetLicenseToUse では、アクセス違反は発生しません。
- pwcInBuf パラメーターを NULL に設定して、IStemmer::GenerateWordForms を呼び出します。 IStemmer::GenerateWordForms は失敗し (E_FAILを返します)、アクセス違反は発生しません。
- cwc パラメーターが 0 に等しい IStemmer::GenerateWordForms を呼び出します。 IStemmer::GenerateWordForms は正常に戻り (S_OKを返します)、アクセス違反は発生しません。
- pwcInBuf パラメーターを NULL に設定し、cwc パラメーターを 0 に設定して、IStemmer::GenerateWordForms を呼び出します。 IStemmer::GenerateWordForms は失敗し (E_FAILを返します)、アクセス違反は発生しません。
Word ブレーカーの整合性のテスト
IWordBreaker の実装が次の条件で一貫して実行されるようにすることをお勧めします。
- Word ブレーカーは、IWordBreaker::Init メソッドの複数の呼び出しで一貫して実行されます。 ワード ブレーカーは、パラメーターを解放せずに、前の初期化と同じパラメーターで再初期化します。
- 同じテスト コーパスと同じクエリの繰り返しを考えると、 IWordBreaker::BreakText メソッドは同じ出力を生成し、 IWordSink オブジェクトと IPhraseSink オブジェクトのメソッドに対して同じ呼び出しを行います。
Word ブレーカーでの無効な入力のテスト
無効なパラメーターに関連するすべてのエラーは 、IWordBreaker メソッドで確実に処理することをお勧めします。 さらに、ワード ブレーカー メソッドで未処理の例外が発生しないようにすることをお勧めします。 ワード ブレーカーは、次の関数を実行し、次のエラーを処理する必要があります。
- IWordBreaker::Init を呼び出すには、LANGUAGE_E_DATABASE_NOT_FOUNDまたはS_OKを返す必要があります。
- IWordBreaker::Init を呼び出すと、pfLicense パラメーターが FALSE に正常に初期化され、IStemmer::GetLicenseToUse が呼び出され、アクセス違反は発生しません。
- Word ブレーカーは、IWordBreaker::BreakText メソッドの awcBuffer パラメーターの末尾を超えて読み取られません。
- pwcInBuf を NULL に設定して IWordBreaker::BreakText を呼び出します。 IWordBreaker::BreakText は失敗し (E_FAILを返します)、アクセス違反は発生しません。
- cwc パラメーターが 0 に等しい IWordBreaker::BreakText を呼び出します。 IWordBreaker::BreakText は正常に返され (S_OKを返します)、アクセス違反は発生しません。
- pwcInBuf パラメーターが NULL に設定され、cwc パラメーターが 0 に設定された IWordBreaker::BreakText メソッドを呼び出します。 IWordBreaker::BreakText は失敗し (E_FAILを返します)、アクセス違反は発生しません。
- インデックスの作成時に生成されるフレーズには、同じ数の単語が含まれています。
- IWordFormSink::P utWord メソッドと IWordFormSink::PutAltWord メソッドを連続して呼び出して、インデックスの作成時にフレーズが生成されます。 ワード ブレーカーでは、クエリ時に IPhraseSink オブジェクトのみが使用されます。
関連トピック