【问题标题】:Convert unicode small capitals to their ASCII equivalents将 unicode 小写大写字母转换为其 ASCII 等价物
【发布时间】:2019-09-07 02:10:45
【问题描述】:

我有以下数据集

'Fʀɪᴇɴᴅ',
 'ᴍᴏᴍ',
 'ᴍᴀᴋᴇs',
 'ʜᴏᴜʀʟʏ',
 'ᴛʜᴇ',
 'ᴄᴏᴍᴘᴜᴛᴇʀ',
 'ʙᴇᴇɴ',
 'ᴏᴜᴛ',
 'ᴀ',
 'ᴊᴏʙ',
 'ғᴏʀ',
 'ᴍᴏɴᴛʜs',
 'ʙᴜᴛ',
 'ʟᴀsᴛ',
 'ᴍᴏɴᴛʜ',
 'ʜᴇʀ',
 'ᴄʜᴇᴄᴋ',
 'ᴊᴜsᴛ',
 'ᴡᴏʀᴋɪɴɢ',
 'ғᴇᴡ',
 'ʜᴏᴜʀs',
 'sᴏᴜʀᴄᴇ',

然后我想用 Python 脚本转换成 ASCII 格式 例如:

Fʀɪᴇɴᴅ - FRIEND
ᴍᴏᴍ - MOM

我尝试过编码解码,但不起作用 我也试过这个solution。但这并不能解决我的问题。

【问题讨论】:

  • 请展示您的尝试
  • 您提供的链接是针对其他问题的。尝试寻找规范化(模块unicodedata

标签: python unicode ascii python-unicode


【解决方案1】:

Python 没有提供将small caps 字符直接转换为对应的ASCII 字符的方法。但是可以使用str.translate 来做到这一点。

要使用str.translate,我们需要创建一个小型大写字母的序数值到 ASCII 字符的映射。

要获得序数值,我们可以构造每个字符的名称,然后从unicodedata 数据库中获取字符并在其上调用ord。请注意,没有小型大写字母“X”字符,并且在 3.7 之前的 Python 版本中不存在小型大写字母“Q”。

>>> from string import ascii_uppercase
>>> import unicodedata as ud

>>> # Filter out unsupported characters
>>> # Python < 3.7
>>> letters = (x for x in ascii_uppercase if x not in ('Q', 'X'))
>>> # Python >= 3.7
>>> letters = (x for x in ascii_uppercase if x != 'X') 

>>> mapping = {ord(ud.lookup('LATIN LETTER SMALL CAPITAL ' + x)): x for x in letters}

一旦我们有了映射,我们就可以使用它为str.translate 制作一个转换表,使用str.maketrans,然后执行转换。

>>> # Make as translation table
>>> tt = str.maketrans(mapping)
>>> # Use the table to "translate" strings to their ASCII equivalent.
>>> s = 'ᴍᴏɴᴛʜ'
>>> s.translate(tt)
'MONTH'

【讨论】:

  • 你几乎解决了我的问题。但我收到此错误,KeyError:“未定义的字符名称'LATIN LETTER SMALL CAPITAL Q'”
  • @ArayanSingh 似乎 3.7 之前的 Python 版本不包括小型大写字母“Q” - 大概是由于他们使用的 unicode 数据库版本。修改答案以考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
相关资源
最近更新 更多