首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中是否有一个模块或正则表达式可以将所有字体转换为统一的字体?(文本来自Twitter)

Python中是否有一个模块或正则表达式可以将所有字体转换为统一的字体?(文本来自Twitter)
EN

Stack Overflow用户
提问于 2021-05-09 00:03:09
回答 1查看 54关注 0票数 0

我正在处理一些来自twitter的文本,使用Tweepy。所有这些都很好,目前我只想从单词的一些基本频率计数开始。然而,我遇到了一个问题,用户在推文中使用不同字体的能力使得一些单词看起来像是他们自己独特的单词,而实际上它们是已经遇到的单词,但字体/字体大小不同,如下图所示(这些单词是以前统计过的单词,在电子表格中出现过)。

这打乱了计数的准确性。我想知道是否有一个包或一般的解决方案,使所有的单词统一的字体/大小-无论是当我标记它(只是手动,而不是使用一个模块),或当它写入到csv (使用csv模块)。或者任何其他我可能没有考虑过的解决方案。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-05-09 05:29:23

你可以(大部分)通过使用unicodedata.normalize('NFKC', str)来规范化你的输入来解决你的问题。

KC规范化形式(这是NF所代表的)首先对文本执行“兼容性分解”,替换表示样式变体的Unicode字符,然后对结果执行规范组合,以便通过分解转换为n和单独的~变音符号的ñ随后被转换回ñ,即该字符的规范组合。(如果您不想执行重组步骤,请使用NFKD规范化。)有关更精确的描述和示例,请参阅Unicode Annex 15

Unicode包含许多符号,主要用于数学,这些符号只是某些字母或数字的风格变体。或者,在某些情况下,可以使用几个字母或数字,例如²或℆。特别是,这包括使用具有特定数学或其他含义的字体变体编写的常用符号,例如ℒ(拉普拉斯变换)和ℚ(有理数集)。规范分解将剥离风格信息,将这四个示例分别减少为'1/4','c/u','L‘和'Q’。

第一个发布的Unicode标准定义了基本多层平面( Basic Multilingula Plane,BMP)中的Letter-like symbols block块。(上面的所有示例都是从该块中提取的。)在Unicode3.1中,完整的拉丁和希腊字母和数字被添加到Mathematical Alphanumeric Symbols block中,其中包括罗马字母表的52个大写和小写字母(小写和大写)的13种不同字体变体,5种字体变体中的58个希腊字母(其中一些可以被认为是罗马字母,例如?,它是upsilon,而不是大写Y),以及5种变体(?????)中的10个数字。还有一些数学家显然想要的松散字符。

所有这些都不应该在数学排版之外使用,但这并不是大多数社交网络用户关心的约束。因此,人们通过使用这些Unicode字符来弥补Twitter (和其他地方)中缺乏样式文本的不足,尽管这些字符并不能在所有设备上正确呈现,使屏幕阅读器的工作变得困难,不容易搜索,以及使用黑客排版的所有其他缺点,例如您遇到的问题。(在您的屏幕截图中也可以看到一些渲染问题。)

兼容性分解可以在很大程度上解决问题,但它也倾向于删除真正有用的信息。例如,x²和H₂O就变成了x2和H2O,这可能是您想要的,也可能不是您想要的。但这可能是你能做的最好的了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67449550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档