-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrepack.py
executable file
·151 lines (133 loc) · 3.23 KB
/
repack.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/usr/bin/python
# coding: utf-8
import sys
import os
import ftplib
import glob
import struct
import codecs
if len(sys.argv) < 3:
print ("Usage: <原文.csv> <翻译.csv>")
sys.exit(1)
# 原文
fin = open(sys.argv[1],'r',encoding='utf-8');
# 翻译列表,格式为开始偏移量,结束偏移,原文,翻译
fincsv = open(sys.argv[2], 'r', encoding='utf-8');
outfile = "out.csv"
# 输出
fout = open(outfile, 'w', encoding='utf-8');
# 原文的全部内容
csv = fin.read();
fix = 0;
cnt = 0;
# 读入一行
line = fincsv.readline();
# 最后的位置
lastpos = 0;
g_wordlist = [
[ u'總裁',u'社長' ],
[ u'萩',u'荻' ],
[ u'黑',u'黒' ],
[ u'關',u'関' ],
[ u'臟',u'臓' ],
[ u'幹',u'干' ],
[ u'滿',u'満' ],
[ u'待',u'呆' ],
[ u'參',u'参' ],
[ u'貓',u'猫' ],
[ u'晚',u'晩' ],
[ u'瞭',u'了' ],
[ u'戀',u'恋' ],
[ u'來',u'来' ],
[ u'殘',u'残' ],
[ u'會',u'会' ],
[ u'觸',u'触' ],
[ u'溫',u'温' ],
[ u'當',u'当' ],
[ u'隨',u'随' ],
[ u'穗',u'穂' ],
[ u'學',u'学' ],
[ u'獸',u'獣' ],
[ u'與',u'与' ],
[ u'覆',u'復' ],
[ u'徵',u'征' ],
[ u'導',u'道' ],
[ u'裡',u'里' ],
[ u'裏',u'里' ],
[ u'黏',u'粘' ],
[ u'―', u'—' ],
[ u'─', u'—' ],
]
def foreach_replace(string):
for i in g_wordlist:
string = string.replace(i[0], i[1])
return string
compare_csv = foreach_replace(csv)
def get_fuzzy_index_v2(org):
org = foreach_replace(org)
fixup_startpos = lastpos
fixup_startpos = compare_csv.find(org, fixup_startpos)
if fixup_startpos != -1:
tlen = len(org)
#print ("%d: 修复: %d, %d %s (lastpos %d)" % (cnt, fixup_startpos, fixup_startpos+tlen, org.encode('utf-8'), lastpos))
return fixup_startpos, fixup_startpos + tlen
return -1, -1
while (line):
# 注释?
if line[0] == '#':
cnt += 1;
# 读下一行
line = fincsv.readline();
continue
# 使用逗号分割
arr = line.strip().split(',');
if len(arr) == 4 or len(arr) == 5:
# 开始位置
pos0 = int(arr[0]);
# 结束位置
pos1 = int(arr[1]);
assert(pos1 > pos0)
savedpos0 = pos0
savedpos1 = pos1
org = arr[2]
assert(len(org))
orgfile = csv[pos0:pos1]
# 翻译中的原文应同原文中的原文相等
if foreach_replace(orgfile) != foreach_replace(org):
print ("警告 %d行: 翻译中的原文同原文中的原文不相等" % (cnt+1))
print ("\t翻译: %s" % (org.encode('utf-8')))
print ("\t原文: %s" % (orgfile.encode('utf-8')))
# 采用模糊查找
pos0, pos1 = get_fuzzy_index_v2(org)
if pos0 == -1:
print ("%d, %d, %s - 未找到,必须人工干预! lastpos: %d" % (savedpos0, savedpos1, org.encode('utf-8'), lastpos))
assert(False)
# 翻译后的文本
txt = (arr[3]);
if len(txt) == 0:
cnt += 1;
# 读下一行
line = fincsv.readline();
continue
# 写翻译位置之前的文本
fout.write(csv[lastpos:pos0] + txt);
# 不允许发生乱序
assert(lastpos <= pos0)
# 更新最后位置
lastpos = pos1;
else:
# 报错
print('error at: ' );
print(line)
assert(False)
# 记数+1
cnt += 1;
# 每10000个更新打印
if (cnt % 10000 == 0):
print(cnt);
# 读下一行
line = fincsv.readline();
# 写最后的
fout.write(csv[lastpos:]);
print ("%d line imported" % (cnt))
print ("dumped as %s" % (outfile))