python - 从字符中删除重音符号,同时保留其他变音符号

标签 python unicode internationalization nlp cyrillic

在一些用拉丁文和西里尔文书写的斯拉夫语言中,上升和下降重音符号仅用于上下文中的歧义消除,即不一致,仅用于元音。

我想要一个 Python 代码或库从元音中删除尖音和重音,同时保留其他变音符号。

例如:
жизнеспосо́бный -> жизнеспособный
сè се фаќа -> се се фаќа
kşćica -> kućica

如果有任何帮助,这里是斯拉夫语言西里尔字母表中所有实际(即无重音)字母的完整列表,包括带有变音符号的字母:

абвгдежзиклмнпорстуфхцшєґіїёыіўщъьюяйјњљџђћз́с́ќѓѕ

注意:

  1. їёыіўй 是元音,即使去掉锐音符和重音符,也应保留其变音符号。但这种情况非常罕见,甚至不可能,我们可以忽略这种情况。

  2. з́с́ќѓ 是辅音,如拉丁语 ćǵśź。他们应该保留他们的尖音符号 - 他们不会为了发音或消歧目的而添加任何符号。

  3. 在精确正式映射是官方的字母表中,带有重音符的拉丁辅音的西里尔字母等价物不一定具有重音符。 (也许有帮助。)

  4. 双重音和双重音的优先级较低。

这些角色的背景阅读:
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/

相关文章:

python - 使用 python 编辑 html,但 lxml 将漂亮的 html 实体转换为奇怪的编码

python - pyPdf 错误参数无效

python - 使用正则表达式添加空组

python - pytest 应该用于集成测试嵌入式系统吗?

python - 使用 Python 3.9 和 psycopg3 时,存储在 Postgres 数据库中的混搭表情符号不会作为单个表情符号返回。例如👩‍💻返回👩\u200d💻

javascript - 在 Jquery I18N 插件中指定 'path' 的正确方法是什么?

vue.js - Nuxt JS i18n/多语言与 headless CMS

c# - 使用 PostMessage 发送 Unicode 字符

android-studio - Android Studio 国际化 - 对 XLIFF 标准的 IDE 支持