我在python3中寻找一种快速且可能方便的方法,将非ascii字母的字符串转换为只有ascii字母的单词。在
例子!在
żółw=>;zolw
莫扎克=莫扎克
łódź=>;洛兹
等等。。。在
在国家字母表中有许多字母可以转换成ASCII字母(如n到n)。我可以手动为我的语言(波兰语)做,通过指定如何翻译每个字母。但是有没有什么自动化的方法可以做到呢?或者能满足我需要的图书馆?在
Pythonstr.encode()
不行,因为"żółw".encode('ascii', 'replace') == "???w"
和{
我可以为波兰语字母做这样的翻译,但我不想为其他语言翻译:
>>> utf8_letters = ['ą','ę','ć','ź','ż','ó','ł','ń','ś']
>>> ascii_letters = ['a','e','c','z','z','o','l','n','s']
>>> trans_dict = dict(zip(utf8_letters,ascii_letters))
>>> turtle = "żółw"
>>> out = []
>>> for l in turtle:
... out.append(trans_dict[l] if l in trans_dict else l)
>>> result = ''.join(out)
>>> result
'zolw'
上面的代码可以满足我对波兰字母的要求,但是它很难看:<;最好的方法是什么?在
当然,这样的翻译会改变一些词的意思,但这没关系。在
unicodedata模块可用于此操作。 它有操作Unicode字符名的函数:^{} 和^{} 。在
现在让我们仔细看看。在
看到图案了吗?让我们做一个利用它的函数:
^{pr2}$它查找字符名中包含的单词,删除其后面的所有内容并将其反馈给^{} 函数。
如果不存在带的',则引发
ValueError
,并且当没有具有此类名称的字符时,KeyError
将被引发,因此函数将返回不变的字符。在下面是一个基于前一个函数“翻译”字符串的函数:
所以这个解决方案显然是非常好的,但是我将把前面的解决方案留在下面。在
^{} 模块还有一个函数,它承诺类似的结果&^{} 带有
'NFKD'
参数(兼容性分解),但它忽略了大多数字符。在如果你有字符数据,你提供的代码可以改进。在
Here是一个很好的包含字符数据的表。这是JavaScript,但可以很容易地用于Python。在
如果您不介意使用外部库,您可以尝试Unidecode。它就是为这个做的。在
相关问题 更多 >
编程相关推荐