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 日