语言资源和最佳做法疑难解答

本主题提供有关验证 和排查 IWordBreakerIStemmer 实现的最佳做法和建议。

本主题的组织方式如下:

最佳实践

  • 确保在注册表中将语言资源的线程模型设置为“两者”。
  • 在可能的情况下,将语言数据放入 DLL 中的资源中,而不是放在单独的文件中。 这使 DLL 更易于安装,并且更安全。 此外,将语言数据放入资源将提高该语言资源组件的性能。
  • 尽量减少语言资源组件使用的系统资源。 例如,如果语言资源对象的每个实例都需要对词典进行只读访问,请考虑在所有实例之间共享词典。
  • 请考虑使用中性断字符来处理不采用断字符实现的语言或区域设置的文本。 这将有助于确保跨所有语言一致地处理文本。
  • 检查所有返回代码,并从 IStemmer::GenerateWordFormsIWordBreaker::BreakText 等函数返回它们。 如果索引编制失败,请务必传递错误,以便通知用户哪些文档已编制索引。

测试词干分析器一致性

建议在以下情况下监视 IStemmer 实现的性能,以确保一致性:

  • 词干分析器在对 IStemmer::Init 的多个调用中一致地执行。 词干分析器使用与上一次初始化相同的参数重新初始化,而无需释放参数。
  • 给定相同的测试语料库和同一查询的重复, IStemmer::GenerateWordForms 将生成相同的输出,并对 IWordFormSink 对象的方法进行相同的调用。

在词干分析器中测试无效输入

建议监视 IStemmer 方法如何处理与无效参数相关的所有错误。 此外,建议确保词干分析器方法不会引发未经处理的异常。 词干分析器应处理以下错误:

  • 调用 IStemmer::Init ,将 pfLicense 设置为 NULL。 Init 失败,不会导致访问冲突。
  • 调用 IStemmer::GetLicenseToUse ,并将 ppwcsLicense 参数设置为 NULLIStemmer::GetLicenseToUse 不会导致访问冲突。
  • 调用 IStemmer::GenerateWordForms ,并将 pwcInBuf 参数设置为 NULLIStemmer::GenerateWordForms 失败 (返回E_FAIL) 且不会导致访问冲突。
  • 调用 cwc 参数等于 0 的 IStemmer::GenerateWordFormsIStemmer::GenerateWordForms 成功返回 (返回S_OK) 且不会导致访问冲突。
  • 调用 IStemmer::GenerateWordForms ,其中 pwcInBuf 参数设置为 NULLcwc 参数等于 0。 IStemmer::GenerateWordForms 失败 (返回E_FAIL) 且不会导致访问冲突。

测试Word中断程序一致性

建议确保 IWordBreaker 实现在以下情况下一致地执行:

  • Word断路器在其 IWordBreaker::Init 方法的多个调用中一致地执行。 断字符使用与上一次初始化相同的参数重新初始化,而无需释放参数。
  • 鉴于相同的测试语料库和同一查询的重复, IWordBreaker::BreakText 方法将生成相同的输出,并对 IWordSinkIPhraseSink 对象的方法进行相同的调用。

测试Word断路器中的无效输入

建议确保 IWordBreaker 方法处理与无效参数相关的所有错误。 此外,建议确保断字符方法不会引发未经处理的异常。 断字符应执行以下函数并处理以下错误:

扩展语言资源

了解语言资源组件

实现Word断路器和词干分析器

语言和 Unicode 注意事项