排除故障的語言資源及最佳做法

本主題提供驗證和疑難解答 IWordBreaker 和 IStemmer 實作的最佳做法和建議。

本主題的組織方式如下:

最佳做法

  • 請確定語言資源的線程模型在登錄中設定為 「both」。。
  • 可能的話,請將語言數據放在 DLL 中的資源中,而不是放在個別的檔案中。 這可讓 DLL 更容易安裝和更安全。 此外,將語言數據放在資源中,將會導致該語言資源元件的效能提升。
  • 將語言資源元件所使用的系統資源降到最低。 例如,如果語言資源物件的每個實例都需要語彙的唯讀存取權,請考慮在所有實例之間共用語彙。
  • 請考慮使用中性的斷詞工具來處理不屬於您語言或地區設定的文字,以便實施斷詞功能。 這有助於確保在所有語言中一致地處理文字。
  • 檢查所有傳回碼,並從 IStemmer::GenerateWordForms 和 IWordBreaker::BreakText等函式傳回它們。 如果索引編製失敗,務必要傳遞錯誤訊息,讓使用者了解哪些檔案已被索引。

測試詞幹分析器的一致性

建議您在下列情況下監視 IStemmer 實作的效能,以取得一致性:

  • 字幹分析器在多次呼叫 IStemmer::Init時表現一致。 字幹分析器會使用與先前初始化中相同的參數重新初始化,而不會釋放參數。
  • 假設相同的測試主體和相同查詢的重複,IStemmer::GenerateWordForms 會產生相同的輸出,並使用相同的呼叫 IWordFormSink 物件的方法。

測試詞幹分析器中的無效輸入

建議您監視 IStemmer 方法如何處理與無效參數相關的所有錯誤。 此外,我們建議您確保字幹分析器方法不會引發未處理的例外狀況。 字幹分析器應該處理下列錯誤:

  • 呼叫 IStemmer::Init,並將 pfLicense 設為 NULL。 Init 失敗,而且不會產生存取違規。
  • 呼叫 IStemmer::GetLicenseToUse,並將 ppwcsLicense 參數設定為 NULL。 IStemmer::GetLicenseToUse 不會產生存取違規。
  • 呼叫 IStemmer::GenerateWordForms,並將 pwcInBuf 參數設定為 NULL。 IStemmer::GenerateWordForms 失敗(傳回E_FAIL),而且不會產生存取違規。
  • 呼叫 IStemmer::GenerateWordForms,cwc 參數等於 0。 IStemmer::GenerateWordForms 成功傳回 (傳回S_OK),而且不會產生存取違規。
  • 呼叫 IStemmer::GenerateWordForms,並將 pwcInBuf 參數設定為 NULL,而 cwc 參數等於 0。 IStemmer::GenerateWordForms 失敗(傳回E_FAIL),而且不會產生存取違規。

測試斷詞工具的一致性

我們建議您確定 IWordBreaker 實作會在下列情況下一致地執行:

  • 斷詞工具會在其 IWordBreaker::Init 方法的多個呼叫之間一致地執行。 斷詞工具會使用與先前初始化中相同的參數重新初始化,而不會釋放參數。
  • 假設相同的測試主體和相同查詢的重複,IWordBreaker::BreakText 方法會產生相同的輸出,並使用相同的呼叫 IWordSink 和 IPhraseSink 物件的方法。

測試詞彙切分器中的無效輸入

我們建議您確定 IWordBreaker 方法會處理與無效參數相關的所有錯誤。 此外,我們建議您確保斷詞方法不會引發未處理的例外狀況。 斷詞工具應該執行下列函式並處理下列錯誤:

擴充語言資源

瞭解語言資源元件

實施斷詞工具和詞根提取器

語言與 Unicode 考量