使用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++代码会不会好一点。