python - Python:删除希腊变音符号/口音
问题描述
有没有一种相对简单的方法可以从希腊字符串中删除变音符号?例如,如果字符串是“Ο πάνω όροφος”,我希望它变成“ο πανω οροφος”,仍然是希腊语,没有重音。我想避免字符串替换,因为它可能很慢,并且大多数类似问题的答案都使用 unidecode 将希腊字符转换为英文,我不希望那样。
解决方案
大多数官方文件只需要大写字母,不需要变音符号。
这行得通吗?
>>> import unicodedata as ud
>>> s="Ο πάνω όροφος"
>>> d = {ord('\N{COMBINING ACUTE ACCENT}'):None}
>>> ud.normalize('NFD',s).upper().translate(d)
'Ο ΠΑΝΩ ΟΡΟΦΟΣ'
使用 NFD 规范化将基本代码点与变音符号分开。d
翻译表列出了 Unicode 序数翻译……在这种情况下,删除了变音符号。我不熟悉希腊变音符号的用法,因此可能需要扩展该表。
.replace('\u0301','')
可以用于一种重音,但.translate()
如果有多个替换,效率会更高。
跳过.upper()
以匹配您的原始问题:
>>> ud.normalize('NFD',s).translate(d)
'Ο πανω οροφος'
推荐阅读
- java - Bazel java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener
- java - Netty中的“操作完成”是什么意思
- ruby - 如何在 Ruby 中使用 Google 数据传输 API 进行传输
- docker - docker run -v & .dockerignore 试图忽略文件夹
- java - 删除文本中数字中的多余空格
- swift - Swift 4.2,Xcode 游乐场中的 String firstIndex() 函数错误
- hive - 什么是 Hive 表名最大字符限制?
- ruby-on-rails - RoR - Carrierwave + S3,通过 API 存储图像 url
- javascript - 如何检查 JavaScript 数组是否仅包含两个特定值
- azure-ad-b2c - Azure AD B2C 用户 - 应用程序分配