哪种形式的unicode规范化适合文本挖掘?

时间:2012-06-27 19:05:29

标签: python unicode normalization unicode-normalization text-normalization

我一直在阅读关于Unicode的主题,但我仍然对规范化及其不同形式感到困惑。简而言之,我正在开展一个项目,涉及从PDF文件中提取文本并执行一些语义文本分析。

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

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

  • NFC
  • NFKC
  • NFD
  • NFKD

我读了relevant wikipedia article,但是对于我虚弱的大脑来说,它太不透明了。有人可以用简单的英语向我解释这个吗?

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

1 个答案:

答案 0 :(得分:5)

像é这样的字符可以写成单个字符,也可以写成两个序列,常规e加上重音(变音符号)。归一化在这些替代方案中选择一致,并将以一致的方式订购多个变音符号。

由于您需要处理连字,您应该使用“兼容(de)组合”,NFKD或NFKC,它可以规范连字。使用组合或分解形式可能没问题,但如果你也想进行有损匹配(例如匹配é,即使用户输入普通 e ,你也可以使用兼容性分解NFKD并丢弃变容法以进行松散匹配。