将 unicode 小型大写字母转换为其 ASCII 等价物
Convert unicode small capitals to their ASCII equivalents
我有以下数据集
'Fʀɪᴇɴᴅ',
'ᴍᴏᴍ',
'ᴍᴀᴋᴇs',
'ʜᴏᴜʀʟʏ',
'ᴛʜᴇ',
'ᴄᴏᴍᴘᴜᴛᴇʀ',
'ʙᴇᴇɴ',
'ᴏᴜᴛ',
'ᴀ',
'ᴊᴏʙ',
'ғᴏʀ',
'ᴍᴏɴᴛʜs',
'ʙᴜᴛ',
'ʟᴀsᴛ',
'ᴍᴏɴᴛʜ',
'ʜᴇʀ',
'ᴄʜᴇᴄᴋ',
'ᴊᴜsᴛ',
'ᴡᴏʀᴋɪɴɢ',
'ғᴇᴡ',
'ʜᴏᴜʀs',
'sᴏᴜʀᴄᴇ',
然后我想使用 Python 脚本转换成 ASCII 格式
例如:
Fʀɪᴇɴᴅ - FRIEND
ᴍᴏᴍ - MOM
我试过编码解码,但是不行
我也试过这个solution。但这并不能解决我的问题。
Python 没有提供直接转换 small caps characters to their ASCII equivalents. However it's possible to do this using str.translate.
的方法
要使用 str.translate
,我们需要创建小型大写字符的序数值到 ASCII 字符的映射。
为了得到序数值,我们可以构造每个字符的名称,然后从unicodedata database and call 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
进行翻译 table,使用 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'
我有以下数据集
'Fʀɪᴇɴᴅ',
'ᴍᴏᴍ',
'ᴍᴀᴋᴇs',
'ʜᴏᴜʀʟʏ',
'ᴛʜᴇ',
'ᴄᴏᴍᴘᴜᴛᴇʀ',
'ʙᴇᴇɴ',
'ᴏᴜᴛ',
'ᴀ',
'ᴊᴏʙ',
'ғᴏʀ',
'ᴍᴏɴᴛʜs',
'ʙᴜᴛ',
'ʟᴀsᴛ',
'ᴍᴏɴᴛʜ',
'ʜᴇʀ',
'ᴄʜᴇᴄᴋ',
'ᴊᴜsᴛ',
'ᴡᴏʀᴋɪɴɢ',
'ғᴇᴡ',
'ʜᴏᴜʀs',
'sᴏᴜʀᴄᴇ',
然后我想使用 Python 脚本转换成 ASCII 格式 例如:
Fʀɪᴇɴᴅ - FRIEND
ᴍᴏᴍ - MOM
我试过编码解码,但是不行 我也试过这个solution。但这并不能解决我的问题。
Python 没有提供直接转换 small caps characters to their ASCII equivalents. However it's possible to do this using str.translate.
的方法要使用 str.translate
,我们需要创建小型大写字符的序数值到 ASCII 字符的映射。
为了得到序数值,我们可以构造每个字符的名称,然后从unicodedata database and call 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
进行翻译 table,使用 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'