言語リソースとベスト プラクティスのトラブルシューティング

このトピックでは、 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を返します)、アクセス違反は発生しません。
  • IStemmer::GenerateWordForms を cwc パラメーターが 0 の状態で呼び出す。 IStemmer::GenerateWordForms は正常に返され (S_OKを返します)、アクセス違反は発生しません。
  • pwcInBuf パラメーターが NULL に設定され、cwc パラメーターが 0 に設定された IStemmer::GenerateWordForms の呼び出し。 IStemmer::GenerateWordForms は失敗し (E_FAILを返します)、アクセス違反は発生しません。

単語分割器の整合性のテスト

IWordBreaker の実装が次の条件下で一貫して実行されるようにすることをお勧めします。

  • ワード ブレーカーは、 IWordBreaker::Init メソッドの複数の呼び出しで一貫して実行されます。 ワード ブレーカーは、パラメーターを解放せずに、前の初期化と同じパラメーターで再初期化します。
  • 同じテスト コーパスと同じクエリの繰り返しを指定すると、 IWordBreaker::BreakText メソッドは同じ出力を生成し 、IWordSink オブジェクトと IPhraseSink オブジェクトのメソッドに対して同じ呼び出しを行います。

ワードブレーカーの無効入力をテストする

無効なパラメーターに関連するすべてのエラーは、 IWordBreaker メソッドで確実に処理することをお勧めします。 また、ワード ブレーカー メソッドで未処理の例外が発生しないようにすることをお勧めします。 ワード ブレーカーは、次の関数を実行し、次のエラーを処理する必要があります。

  • IWordBreaker::Init への呼び出しは、LANGUAGE_E_DATABASE_NOT_FOUNDまたはS_OKを返す必要があります。
  • IWordBreaker::Init を呼び出すと、pfLicense パラメーターが FALSE に正常に初期化され、IStemmer::GetLicenseToUse が呼び出され、アクセス違反は発生しません。
  • ワード ブレーカーは、IWordBreaker::BreakText メソッドの awcBuffer パラメーターの末尾を超えて読み取りません。
  • IWordBreaker::BreakText の呼び出しで、pwcInBuf が NULL に設定されている。 IWordBreaker::BreakText は失敗し (E_FAILを返します)、アクセス違反は発生しません。
  • cwc パラメーターが 0 に等しい IWordBreaker::BreakText の呼び出し。 IWordBreaker::BreakText は正常に返され (S_OKを返します)、アクセス違反は発生しません。
  • pwcInBuf パラメーターが NULL に設定され、cwc パラメーターが 0 に等しい IWordBreaker::BreakText メソッドを呼び出します。 IWordBreaker::BreakText は失敗し (E_FAILを返します)、アクセス違反は発生しません。
  • インデックスの作成時に生成される語句には、同じ数の単語が含まれます。
  • 句は、IWordFormSink::PutWord メソッドと IWordFormSink::PutAltWord メソッドを連続して呼び出すことでインデックス作成時に生成されます。 ワード ブレーカーでは、クエリ時に IPhraseSink オブジェクトのみが使用されます。

言語リソースの拡張

言語リソース コンポーネントについて

ワード ブレーカーとステミング機能の実装

言語と Unicode に関する考慮事項