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

Posted

技术标签:

【中文标题】哪种形式的 unicode 规范化适合文本挖掘?【英文标题】:Which form of unicode normalization is appropriate for text mining? 【发布时间】:2012-06-29 07:16:06 【问题描述】:

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

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

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

NFC NFKC NFD NFKD

我读了relevant wikipedia article,但它太不透明了,我弱智的大脑无法理解。有人可以用简单的英语向我解释一下吗?

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

亚历克西斯,谢谢您的回复。请允许我总结一下您的帖子,以确保我理解正确。简而言之,我应该选择“兼容性”标准,因为(据我所知),这就是将连字分成等效的单独字符形式的原因。另外,使用分解意味着变音符号被分成两个字符,对吗?这样,我可以分别查看基本字母(例如e)及其变音符号。此外,NFKD 是执行兼容性分解的规范化形式。我错过了什么吗? 我想你明白了。仔细查看您可以从兼容性表格中获得的确切信息。 请注意,NFKD 很好,因为它将诸如“fi”之类的连字转换为分隔符fi。将 E=mc² 转换为 E=mc2 的行为是否出色取决于您的用例。

以上是关于哪种形式的 unicode 规范化适合文本挖掘?的主要内容,如果未能解决你的问题,请参考以下文章

交易数据的数据挖掘分类——哪种算法最适合?

保存文本时怎么有unicode啥的

哪个是更好的 Unicode 规范化形式?

什么是文件的BOM头

MATLABUTF-8编码文本输出

在 Python 中将 unicode 文本规范化为文件名等