替换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 文件中的变音符号?

C#中的字符串替换变音符号[重复]

如何用c#中的变量值替换字符串?

美国布局的变音符号和其他符号的替代键盘映射

Git看到由于不同的变音符号编码而无法访问的文件的文件更改?

Azure 机器学习批处理请求返回带有 Unix 的格式错误的变音符号