出于需要经常会读一些英语的pdf文档,奈何英语太差只得借助机翻。每次都需要把pdf里的文档复制粘贴到翻译软件里,接着在把结果复制到word文档里,之间还需要排版什么的。今天突然发现百度翻译有一个公开的API,而且 "通用翻译功能" 每个月200万个字符免费。这就有了想法了,从今天开始试着做一个工具来实现这个目标。
今天是第一天,总结下今天干了哪些事。毕竟自己水平有限,心里还是有点B数的。不总结过两天就全忘光了。
事先说下我是python3.6 + anconda + pycharm
先是翻了翻百度的API说明
地址: http://api.fanyi.baidu.com/api/trans/product/apidoc
注册后可以在下图示意的地方找到密匙和ID,有用
API说明里一大堆说明讲真没花心思看,往下拉的时候突然发现居然提供了python的demo. 瞬间眼前一亮之后!你懂得,有demo无非修修改改的事,既然有了为啥还要发明轮子呢?
范例下回来捋了一遍,直观简明,挺好搞懂的。只是这个demo是python2.x版本的,需要修改一点点。我直接贴出修改后的代码:
import http.client
# 原始代码 import httplib
#----是的,python3里这个库改名了,用法一丁点都没变
import hashlib
# 原始代码 import md5
#----反正我尝试pip安装md5的时候提示没有这个库,好在hashlib里有#md5呀!
import urllib
import random
# 账号和密匙
appid = ''
secretKey = ''
# 对应的填入你注册后给你的ID和密匙,点上面的管理控制台,然后点左边的开发
# 者信息,你可以看我上面的发的图
httpClient = None
myurl = '/api/trans/vip/translate'
q = 'I am a poor guy'
fromLang = 'en'
toLang = 'zh'
salt = random.randint(32768, 65536)
sign = appid + q + str(salt) + secretKey
m1 = hashlib.md5()
# 源代码 m1 = md5.new()
# 使用hashlib提供的md5功能
m1.update(sign.encode('utf-8'))
# 需要encode一下,不然会报错的,python2和python3的区别之一
sign = m1.hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
# 原代码里的urllib.quote(q) 改成了 urllib.parse.quote(q) 意思是去空格还是啥来着?
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
# 源代码 httpClient = httplib.HTTPConnection('api.fanyi.baidu.com')
# 修改下库的名称就行了。其他不变
httpClient.request('GET', myurl)
# response是HTTPResponse对象
response = httpClient.getresponse()
data = response.read()
print('翻译结果如下')
print(data.decode('unicode_escape'))
except Exception as e:
print('出错了')
print(e)
# 上面这一部分有一些小修改,比如decode了一下和print的用法也变了下。没啥大不了的。
finally:
if httpClient:
httpClient.close()
修改过的代码是可以直接用的,返回了我是一个可怜的家伙----真实写照。
然后又摸索了下pdf文件的读取,这是个大坑。百度了一会发现都在说一个叫pdfminer的东西,然后我就被坑了,我看到的大部分关于pdfminer的用法都是python2的 也有部分python3.x。很遗憾我这都用不上要么装不起来,要么无限报错。磨损了一段时间之后才搞定了pdf中文本转txt,打算走一条曲线救国的路。
首先你需要安装的是pdfminer.six 什么pdfminer(python2.x专用) 什么pdfminer3k 都是渣渣!
实际上的安装最好不要用pip install pdfminer.six 虽然这样也能装上。但如果你和我一样装了anconda的话,我更荐使用另一种安装方法。
去https://github.com/pdfminer/pdfminer.six 下载回压缩包,解压出来后是一个文件名为‘’pdfminer.six-master‘的文件夹,将文件夹复制到你的anconda安装目录下的\Lib\site-packages文件夹下,参考下图
该文件夹下\docs\index.html 为该软件的说明。你应该去看一看,详细的使用方法就在里面。下面的内容都是参考这个说明来进行的。
然后以管理员的方式打开cmd,cd到这个文件夹目录下,运行python setup.py install
这样就开始安装了,结束后在Anconda\Scripts目录下会出现pdf2txt.py这个好用的工具
在命令行中cd到Anconda\Scripts目录下后可以使用: python pdf2txt.py -o 文件名.txt 目标pdf的方法来使用。
比如 python pdf2txt.py -o D:\test1.txt C:\wtf.pdf
会将C盘下名为wtf的pdf文档中的文字内容提取到D盘下的test1.txt文件里。
嫌切换目录麻烦的话也可以这么写: python 目录\pdf2txt.py -o 文件名.txt 目标pdf的方法来使用。
比如 python C:\ProgramData\Anaconda3\Scripts\pdf2txt.py -o D:\test1.txt C:\wtf.pdf
详细的用法还是去看index.html了 朋友
另外还需要安装CJK支持。
cmd里cd切换回‘’pdfminer.six-master‘的文件夹,接着挨个运行下面的代码
mkdir pdfminer\cmap
python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
python setup.py install
最后做为懒人,怎么可以这么麻烦不是嘛,把这个加入到pycharm外部工具里不就好了
设置如下,当然根据你的安装位置需要自己修改下,不难的。
这样大体环节上就全打通了,之后只需要写代码就好了。。。。。。明天再说。