6

我已经阅读了很多关于 Unicode 的内容,但我仍然对规范化及其不同形式感到非常困惑。简而言之,我正在从事一个项目,该项目涉及从 PDF 文件中提取文本并执行一些语义文本分析。

我已经设法使用一个简单的 python 脚本令人满意地提取文本,但现在我需要确保所有等效的正交字符串都有一个(并且只有一个)表示。例如,“fi”印刷连字应分解为“f”和“i”。

我看到 python 的unicodedata.normalize函数提供了几种用于规范化 unicode 代码点的算法。有人可以解释一下:

  • NFC
  • NFKC
  • NFD
  • NFKD

我阅读了相关的维基百科文章,但对于我微弱的大脑来说,它太不透明了,无法理解。有人可以用简单的英语向我解释一下吗?

另外,您能否推荐一下最适合自然语言处理项目的规范化方法?

4

1 回答 1

6

像 é 这样的字符既可以写成单个字符,也可以写成两个字符的序列,一个正e则加重音符号(变音符号)。规范化在这些备选方案中始终如一地选择,并将以一致的方式对多个变音符号进行排序。

由于您需要处理连字,因此您应该使用“兼容性(分解)组合”、NFKD 或 NFKC,它们可以使连字标准化。使用组合形式或分解形式可能都可以,但如果您还想进行有损匹配(例如,匹配é即使用户键入普通e),您可以使用兼容性分解 NFKD 并丢弃变音符号以进行松散匹配。

于 2012-06-27T23:28:23.617 回答