0%

解决PDF文件复制后多余空行并实现自动翻译

最前

作为一名英语并不好的小白,近期苦于阅读英文文献,常常要用到机器翻译。然而,从PDF文件中复制内容,往往会出现多余的换行情况,强迫症患者表示这很难受,如下图所示。并且这样多余的换行出现一定程度上影响了翻译的结果,也不利于中文阅读,影响看论文的速度。

Error

解决方案

1. 利用Python将多余的换行去除掉

该功能参考了CSDN作者YLPGG的思路,使用时仅需复制需要翻译的内容到程序中,可复制多段文字,然后在内容后输入一个#(井字符号),再回车即可,代码如下:

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
def get_content():
'''
处理PDF文件复制后多余的换行
'''
print('请输入要翻译的内容:')
transText = ""
line = sys.stdin.readline()

while line != "#\n":
transText += line
line = sys.stdin.readline()

transText = transText.replace(".\n","段落")
transText = transText.replace("\n"," ")
transText = transText.replace("段落","\n")

pattern = re.compile(r'\n[A-Z]')
res = pattern.findall(transText)

for i in res:
transText = transText.replace(str(i),'\n'+str(i)[1])

transText = transText.split('\n')

for each in transText:
get_translation(each)

2. 利用Python访问API获取翻译结果,代码如下:

2.1 百度翻译API

使用前需在百度翻译开放平台注册开发者账号,每个月有200w字符的免费翻译额度,超出后按照49元/百万字符支付当月全部翻译字符数费用,应该个人使用200w字符是够用的,论文狂魔除外。

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
def get_translation(q):
'''
调用百度翻译Api实现翻译
'''
appid = '百度翻译appid'
secretKey = '百度翻译secreKey'

url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'

try:
compile_trans = re.compile(r'(^[\u4e00-\u9fa5]{0,}$)')
if compile_trans.match(q):
from_ = 'zh'
to_ = 'en'
else:
from_ = 'en'
to_ = 'zh'
salt = random.randint(32768, 65536)

sign = (appid + q + str(salt) + secretKey).encode("utf-8")
m1 = hashlib.md5(sign)
sign = m1.hexdigest()

data = {
'q' : q,
'from' : from_,
'to' : to_,
'appid' : appid,
'salt' : salt,
'sign' : sign,}

res = requests.post(url, data).text
target = json.loads(res)
print(target['trans_result'][0]['dst']+'\n\n\n')
except:
pass

其它翻译API待更新

最后

已知Bug

  1. 由于识别段落换行和多余换行区别的局限性,如果正巧某行文字的最后一个字符为“.”(英文句号),则会被认为是正常的段落换行,导致分段错误,但不影响句子的完整性。

  2. 部分英语文献中可能含有特殊字符,会导致翻译API返回错误,在程序中会被直接跳过,但大部分正常文献都没有问题。

下载链接

我的GitHub:https://github.com/busbyjrj/translate

最近更新时间:2018年8月12日