針對語言資源和最佳做法進行疑難排解
本主題提供驗證和疑難排解 IWordBreaker 和 IStemmer 實作的最佳做法和建議。
本主題的組織方式如下:
最佳做法
- 確定語言資源的執行緒模型在登錄中設定為 「兩者」。
- 可能的話,請將語言資料放在 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) 且不會產生存取違規。
- 使用cwc參數等於 0 呼叫IStemmer::GenerateWordForms。 IStemmer::GenerateWordForms 成功傳回 (傳回S_OK) ,且不會產生存取違規。
- 呼叫 IStemmer::GenerateWordForms ,並將 pwcInBuf 參數設定為 Null , 且 cwc 參數等於 0。 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參數的結尾。
- 呼叫 IWordBreaker::BreakText ,並將 pwcInBuf 設定為 Null。 IWordBreaker::BreakText 失敗 (傳回E_FAIL) ,且不會產生存取違規。
- 使用cwc參數等於 0 呼叫IWordBreaker::BreakText。 IWordBreaker::BreakText 傳回成功 (傳回S_OK) ,且不會產生存取違規。
- 呼叫 IWordBreaker::BreakText 方法,並將 pwcInBuf 參數設定為 Null , 且 cwc 參數等於 0。 IWordBreaker::BreakText 失敗 (傳回E_FAIL) ,且不會產生存取違規。
- 在建立索引期間產生的片語包含相同的字數。
- 片語會在索引建立期間透過連續呼叫 IWordFormSink::P utWord 和 IWordFormSink::P utAltWord 方法產生。 斷詞工具只會在查詢期間使用 IPhraseSink 物件。
相關主題