Отделите акценты от их букв - PullRequest
2 голосов
/ 21 июня 2020

Я ищу функцию, которая возьмет составную букву и разделит ее, как если бы вам нужно было ввести ее на клавиатуре US-INTL, например:

'ȯ' becomes ".o"
'â' becomes "^a"
'ë' becomes "\"e"
'è' becomes "`e"
'é' becomes "'e"
'ñ' becomes "~n"
'ç' becomes ",c"

et c.

Но при поиске этой проблемы я могу найти только функции для полного удаления акцентов, чего я не хочу.

Вот что я хочу сделать sh:

Разверните эту строку:

ër íí àha lá eïsch

в эту строку:

"er 'i'i `aha l'a e"isch

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Ниже используется разложение Unicode для отделения комбинированных знаков от латинских букв, регулярное выражение для замены объединяющего символа и его буквы, затем таблица перевода для преобразования объединяющего знака в ключ, используемый на международной клавиатуре:

import unicodedata as ud
import re

replacements = {'\N{COMBINING DOT ABOVE}':'.',
                '\N{COMBINING CIRCUMFLEX ACCENT}':'^',
                '\N{COMBINING DIAERESIS}':'"',
                '\N{COMBINING GRAVE ACCENT}':'`',
                '\N{COMBINING ACUTE ACCENT}':"'",
                '\N{COMBINING TILDE}':'~',
                '\N{COMBINING CEDILLA}':','}

combining = ''.join(replacements.keys())
typing = ''.join(replacements.values())

translation = str.maketrans(combining,typing)

s = 'ër íí àha lá eïsch'
s = ud.normalize('NFD',s)
s = re.sub(rf'([aeiounc])([{combining}])',r'\2\1',s)
s = s.translate(translation)
print(s)

Вывод:

"er 'i'i `aha l'a e"isch
1 голос
/ 21 июня 2020

Вы можете использовать словарь, чтобы сопоставить символы с их заменами, а затем перебрать строку, чтобы выполнить фактическую замену.

word_rep = dict(zip(['ȯ','â','ë','è','é','ñ','ç'] 
['.o','^a','\"e','`e','\'e','~n',',c']))
mystr = 'ër íí àha lá eïsch'
for key,value in word_rep.items():
    mystr = mystr.replace(key,value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...