在一些用拉丁文和西里尔文书写的斯拉夫语言中,上升和下降重音符号仅用于上下文中的歧义消除,即不一致,仅用于元音。
我想要一个 Python 代码或库从元音中删除尖音和重音,同时保留其他变音符号。
例如:
жизнеспосо́бный -> жизнеспособный
сè се фаќа -> се се фаќа
kşćica -> kućica
如果有任何帮助,这里是斯拉夫语言西里尔字母表中所有实际(即无重音)字母的完整列表,包括带有变音符号的字母:
абвгдежзиклмнпорстуфхцшєґіїёыіўщъьюяйјњљџђћз́с́ќѓѕ
注意:
їёыіўй 是元音,即使去掉锐音符和重音符,也应保留其变音符号。但这种情况非常罕见,甚至不可能,我们可以忽略这种情况。
з́с́ќѓ 是辅音,如拉丁语 ćǵśź。他们应该保留他们的尖音符号 - 他们不会为了发音或消歧目的而添加任何符号。
在精确正式映射是官方的字母表中,带有重音符的拉丁辅音的西里尔字母等价物不一定具有重音符。 (也许有帮助。)
双重音和双重音的优先级较低。
这些角色的背景阅读:
https://en.wikipedia.org/wiki/I_with_grave_(Cyrillic)#East_Slavic_languages
https://en.wikipedia.org/wiki/Shtokavian#Accentuation
https://en.wikipedia.org/wiki/Pitch_accent#Serbo-Croatian
https://en.wikipedia.org/wiki/Bulgarian_alphabet#.D0.8D
https://en.wikipedia.org/wiki/Macedonian_alphabet#Accented_letters
类似问题:
Removing accents/diacritics from string while preserving other special chars (tried mb_chars.normalize and iconv)
How to remove accent in Python 3.5 and get a string with unicodedata or other solutions?
最佳答案
如果您可以列出相应的对,则不需要库。
>>> unaccentify = {
... 'ѝ': 'и',
... 'о́': 'о'
... }
我打算为此建议 string.translate,但不幸的是它行不通,因为 о́
没有单一代码点。因此,我们确保左侧字符是 NFKC 规范化的:
>>> import unicodedata
>>> unaccentify = {unicodedata.normalize('NFKC', i):j for i, j in unaccentify.items()}
然后我们为所有可能的替换字母制作一个正则表达式:
>>> import re
>>> pattern = re.compile('|'.join(unaccentify))
然后使用pattern.sub
进行替换,从表中查找未重音字符。但首先我们需要规范化源字符串:
>>> def replacer(match):
... return unaccentify[match.group(0)]
...
>>> source = unicodedata.normalize('NFKC', 'жѝзнеспосо́бный')
>>> pattern.sub(replacer, source)
'жизнеспособный'
关于python - 从字符中删除重音符号,同时保留其他变音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942129/