Python:用CJKLIB把汉字转换成拼音

2024-06-13 14:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着把一堆汉字转换成拼音,从一个文件中读出汉字,然后把拼音写进另一个文件。我正在使用CJKLIB函数来完成此操作。在

这是密码

from cjklib.characterlookup import CharacterLookup

source_file = 'cities_test.txt'
dest_file = 'output.txt'

s = open(source_file, 'r')
d = open(dest_file, 'w')

cjk = CharacterLookup('T')

for line in s:
    p = line.split('\t')
    for p_shard in p:
        for c in p_shard:
            readings = cjk.getReadingForCharacter(c.encode('utf-8'), 'Pinyin')
            d.write(readings[0].encode('utf-8'))
        d.write('\t')
    d.write('\n')

s.close()
d.close()

我的问题是我一直遇到与Unicode相关的错误,当我调用getReadingForCharacter函数时,就会出现错误。如果我按原样说的话

^{pr2}$

我得到:UnicodeDecodeError:'ascii'编解码器无法解码0位置的字节0xef:序号不在范围(128)。在

如果我这样称呼它,没有.encoding()

readings = cjk.getReadingForCharacter(c, 'Pinyin')

我得到了一个由sqlalchemy抛出的错误(CJKLIB使用sqlalchemy和sqlite):除非使用能够解释8位bytestrings的文本工厂,否则不能使用8位bytestrings。。。等等

有人能帮我吗?谢谢!在

哦,还有没有办法让CJKLIB不带任何音调地返回拼音?我想在默认情况下,它会用这些奇怪的字符返回拼音来表示音调,我只希望字母没有这些音调。在


Tags: 文件函数insourcefor错误filewrite
1条回答
网友
1楼 · 发布于 2024-06-13 14:19:57

你的错误是你没有解码输入流,但你却在转身,把它重新编码,就好像它是UTF-8一样。那是走错了路。在

你有两个选择。在

您可以codecs.open使用显式编码的输入文件,这样每当您从中读取时,总是会得到常规的Unicode字符串,因为解码是自动的。这一直是我强烈的偏好。再也没有文本文件了。在

另一种选择是在将二进制字符串传递给函数之前手动解码它。我讨厌这种风格,因为它几乎总是表明你做错了什么,即使它没有,它也很笨拙,因为大家都出去了。在

我会对输出文件做同样的事情。我只是讨厌看到到处都是.encode("utf-8")和{}。设置流编码并完成它。在

相关问题 更多 >