python--opencc使用过程的问题

使用python-opencc模块,实现汉字的繁简互转。这里使用了繁体转为简体。代码示例:

import opencc
cc = opencc.OpenCC('mix2s')     #mix2s - Mixed to Simplified Chinese
f = open(target,'w')
for line in open(fname).readlines():
        l = line.decode('utf8','ignore').rstrip(u'\n')
        f.write(cc.convert(l)+u'\n')
f.close()
print len(open(target).readlines())

转化完成的文本使用readlines()读取时,长度只剩1了。即没有换行了。
先查看了一下opencc模块的convert函数源码。

def convert(self, text):
    """Convert text """
    proc = subprocess.Popen([self.opencc_path, '-c', self.confg], 
                            cwd=self.data_path,
                            stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE)
    proc.stdin.write(text.encode('utf8'))
    proc.stdin.close()
    code = proc.wait()
    if code:
        raise RuntimeError('Failed to call opencc with exit code %s' % code)
    result = proc.stdout.read() 
    return result.decode('utf8')

可以看到,输入是unicode编码,程序在完成转化之后输出的还是unicode编码,所以,先尝试写入文件时,编码为utf8,而不是直接写

l=cc.convert(l).encode('utf8','ignore')
f.write(l+'\n')

问题基本解决。
不过这种转换方式速度非常慢,不知道完全使用opencc的C++代码会不会好一点。

    原文作者:JieJ
    原文地址: https://www.jianshu.com/p/b25af891317a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞