替换python中的变音符号
Posted
技术标签:
【中文标题】替换python中的变音符号【英文标题】:Replace diacritics in python 【发布时间】:2021-09-02 05:58:48 【问题描述】:如何将 srt 文件中的变音符号替换为规范化的单词?
我有一个罗马尼亚语 srt,我正在尝试使用 jellyfin 流式传输电影,但我遇到了一个问题,即应用程序不支持 ĂăÂâÎîȘșȚț
等特殊字符,因此我正试图摆脱它们。
我尝试使用 unidecode,但这些词奇怪地被 ț
替换 -> th
, ș
-> o
'我也尝试过仅使用 sed 替换字符,但某些字符(如 ș
)显示为 º
,因此以下函数不会替换它们:
def strip_accents(s):
d = 'ĂăÂâÎîȘșȚț'
n = 'AaAaIiSsTt'
dl = [i for i in d]
nl = [i for i in n]
ii = 0
for x in dl:
s = re.sub(x, nl[ii], s)
ii += 1
return s
【问题讨论】:
可能编辑器和编译器使用不同的编码,在python源码中使用Unicode escaping\u
。
您使用的是哪个操作系统?你是如何获取字符串的,你知道它的编码吗?
@MarkRansom 我在我的 debian 操作系统上做所有事情
@JoopEggen 嗯。我使用 vi 作为我的编辑器
所以你很可能会一直使用 UTF-8,除非我们仍然不知道你的字符串的来源。在尝试修改字符串之前print
字符串会发生什么情况?
【参考方案1】:
因此,感谢 github 托管的 repo,我找到了一种方法来做我想做的事。我只是用正确的变音符号ș
Ș
将奇怪的字符替换为º,
ª
,一切都按照我想要的方式进行。我不需要更换变音符号来使字幕正常工作。
https://github.com/pckltr/corecteaza-subtitrari/
Python 代码:
def fix_accents(s):
char_dict = "º": "ș", "ª": "Ș", "ş": "ș", "Ş": "Ș", "ţ": "ț", "Ţ": "Ț", "þ": "ț", "Þ": "Ț", "ã": "ă"
for k,v in char_dict.items():
s = s.replace(k, v)
return s
【讨论】:
那是治标不治本。问题是您在获取字符串时使用了错误的编码。 @MarkRansom 我尝试更改编码,但没有奏效。我使用了具有编码选项的 python-opensubtitles,我尝试了 iconv 命令,但没有成功。无论如何,如果它有效,它就有效xD 如果编码错误,您唯一可以修复的字符就是您目前找到的字符。极有可能还有其他人您还没有找到。而你尝试了哪种编码,有很多可供选择。【参考方案2】:字幕,先用记事本打开,再用另存为,在这一步Encoding:UTF-8
再保存
:
您可以使用此代码作为列表:
import re
def strip_accents():
d = 'ĂăÂâÎîȘșȚț'
n = 'AaAaIiSsTt'
dl = [i for i in d]
# print(dl)
nl = [i for i in n]
# print(nl)
new_list = []
i =0
for string in dl:
new_string = string. replace(dl[i], nl[i])
new_list. append(new_string)
# print(new_strings)
i +=1
return new_list
print(strip_accents())
【讨论】:
我在 vps 上运行,所以我必须先将文件传输到我的电脑以上是关于替换python中的变音符号的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Excel 破坏 .csv 文件中的变音符号?