Я думаю, вы видите лигатуры - у профессиональных шрифтов есть глифы, которые объединяют несколько отдельных символов в один (лучше выглядящий) глиф.Поэтому вместо того, чтобы писать «f» и «i» как два глифа, у шрифта есть один глиф «fi».Сравните «fi» (две буквы) с «f» (одиночный глиф).
В Python вы можете использовать модуль unicodedata
для манипулирования поздним текстом Unicode.Вы также можете использовать преобразование в нормальную форму NFKD для разделения лигатур:
>>> import unicodedata
>>> unicodedata.name(u'\uFB01')
'LATIN SMALL LIGATURE FI'
>>> unicodedata.normalize("NFKD", u'Arti\uFB01cial Immune System')
u'Artificial Immune System'
Так что нормализация ваших строк с помощью NFKD должна помочь вам в этом.Если вы обнаружите, что это разделяет слишком много, то мое лучшее предложение - сделать небольшую таблицу сопоставления лигатур, которые вы хотите разделить, и заменить лигатуры вручную:
>>> ligatures = {0xFB00: u'ff', 0xFB01: u'fi'}
>>> u'Arti\uFB01cial Immune System'.translate(ligatures)
u'Artificial Immune System'
См. Статью Википедии, чтобы получить список лигатур в Unicode .