我一直在阅读关于Unicode的主题,但我仍然对规范化及其不同形式感到困惑。简而言之,我正在开展一个项目,涉及从PDF文件中提取文本并执行一些语义文本分析。
我已经设法使用简单的python脚本令人满意地提取文本,但现在我需要确保所有等效的正交字符串都有一个(并且只有一个)表示。例如,'fi'印刷结扎应该分解为'f'和'i'。
我看到python的unicodedata.normalize
函数提供了几种算法来规范化unicode代码点。有人可以解释一下之间的区别:
我读了relevant wikipedia article,但是对于我虚弱的大脑来说,它太不透明了。有人可以用简单的英语向我解释这个吗?
另外,您能否建议最适合自然语言处理项目的规范化方法?
答案 0 :(得分:5)
像é这样的字符可以写成单个字符,也可以写成两个序列,常规e
加上重音(变音符号)。归一化在这些替代方案中选择一致,并将以一致的方式订购多个变音符号。
由于您需要处理连字,您应该使用“兼容(de)组合”,NFKD或NFKC,它可以规范连字。使用组合或分解形式可能没问题,但如果你也想进行有损匹配(例如匹配é,即使用户输入普通 e ,你也可以使用兼容性分解NFKD并丢弃变容法以进行松散匹配。