将unicode small capitals转换为ASCII等效值

问题描述 投票:1回答:1

我有以下数据集

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

我想使用Python脚本进入ASCII格式,例如:

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

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

python unicode ascii python-unicode
1个回答
1
投票

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

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

要获取序数值,我们可以构造每个字符的名称,然后从unicodedata数据库中获取字符并在其上调用ord。请注意,没有小型大写'X'字符,而在Python版本中,3.7小型大写'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.translatestr.maketrans制作转换表,然后执行转换。

>>> # Make as translation table
>>> tt = str.maketrans(mapping)
>>> # Use the table to "translate" strings to their ASCII equivalent.
>>> s = 'ᴍᴏɴᴛʜ'
>>> s.translate(tt)
'MONTH'
© www.soinside.com 2019 - 2024. All rights reserved.