英文伪原创(python实现制作伪原创翻译小程序(一)_ )
优采云 发布时间: 2021-11-19 21:18英文伪原创(python实现制作伪原创翻译小程序(一)_
)
写在开头
我从头开始学习python,在业余时间花了大约一周的时间为伪原创编写了一个翻译小程序。它是在c#和js语言的基础上完成的,所以我没有花时间去学习基本的语法,我只是在需要的时候去使用它。现将程序实现的思路和步骤记录下来。
编译环境使用PyCharm,然后直接进行项目开发。
Python 基本语法
写的时候大概看了一下python的语法。基本语法大同小异,包括各种if语句、循环语句等,因为是小程序,没有用到高级语法。唯一需要注意的是python没有{}和; 等待命令结束语句,但它是由缩进控制的。函数声明使用def关键字,变量定义不需要关键字。唯一需要注意的是def中使用全局变量需要先Affirm,否则会被判断为局部变量,无法给全局变量赋值。这个问题是我写的时候出现的,找到解决方法记录下来。
python的特点是可以引用很多模块,而且都是第三方构建的。比如我需要使用图形控件,直接使用wxpython库。
Python制作伪原创翻译小程序
现在,从头开始制作的伪原创翻译小程序有两个主要版本。一开始只实现了汉英和英汉互译的功能,如图:
伪原创工具
由于现在搜索引擎对汉译英直译非常强大,文章英译汉非常强大,所以我觉得我们可以选择翻译的方式,所以改版后,选择的选项就多了翻译,最终效果如下图:
汉英法汉伪原创翻译
这样一个伪原创之后,可能和原文有点不一样。需要稍加修改,使句子流畅,但绝对不会因为重复率高而受到惩罚。关键是自己做,免费的,免费的,免费的。. 让我们来看看如何实现它。
1.pip 安装需要的模块
要使用 pip 安装模块,首先需要 pip。如果安装的python版本在3.4以上,pip自带,也可以使用cmd命令查看是否安装。
检查pip是否安装
如果没有安装pip,直接去官网下载pip安装即可。下载地址:
只需下载并安装!
本程序安装的主要库有:requests、re、hashlib、wx、time
其中,requests模块的作用是发送网络请求,返回响应数据。re是用于正则表达式筛选的模块,hashlib hash模块主要用于生成MD5码,time模块用于根据当前时间生成随机数。wx 模块是 python 的图形用户界面(GUI),可以生成组合框、按钮等。
在 cmd 或 pycharm 终端中,输入:
pip install requests
等待安装完成,表面上已经安装了requests模块。
其余模块安装类似,安装命令如下:
pip install re
pip install hashlib
pip install wx
pip install time
如果遇到安装失败的问题,可能是pip版本太低的原因。升级到对应版本下载,但一般不会有问题。如图:
pip版本太低2.申请百度翻译API
由于翻译过程需要百度翻译的AIP,请先申请。步骤如下:
打开百度翻译开放平台,登录账号,没有的话就注册一个。然后,点击“管理控制台”,提示:您需要注册成为百度翻译开发者,点击“开始注册”,然后按要求完成注册。注册后,进入控制台,找到你的APP ID和密钥,如下图:
百度翻译APP ID
记录你的id和key,后面程序会用到。
具体如何使用百度翻译,直接给出官方文档和支持说明。参考网站:
3.伪原创翻译小程序代码实现
万事俱备,现在主要讲解一下实现的具体思路和步骤,最后附上完整的代码。
1.首先导入之前安装的模块,使用import关键字,代码如下:
import wx, requests,re,hashlib,time #导入wx包
2. 根据百度API写一个翻译小程序
首先定义百度翻译API变量,然后通过方法构造函数,具体代码如下:
# 使用百度翻译api参数和配置随机数
salt = str(time.time())#随机数,设置为当前时间。
apiurl='http://api.fanyi.baidu.com/api/trans/vip/translate'
appid = "百度翻译注册的APP ID"
secretKey = '对于的密钥'
selectMode = 0 #选择默认翻译的类型
# 翻译的函数,输入翻译的文本,文本语言,输出翻译后语言
def translate(text,inlanguage,outlanguage):
text = str(text)
sign = appid + text + salt + secretKey # appid+q+salt+密钥 的MD5值
sign = hashlib.md5(sign.encode("utf-8")).hexdigest() # 对sign做md5,得到32位小写的sign
#sign = md5(sign.encode()) MD5加密
try:
# 根据技术手册中的接入方式进行设定
paramas1 = {
'appid': appid,
'q': text,
'from': inlanguage,
'to': outlanguage,
'salt': salt,
'sign': sign
}
response = requests.get(apiurl, paramas1)
jsonResponse = response.json() # 获得返回的结果,结果为json格式
dst = str(jsonResponse["trans_result"][0]["dst"]) # 取得翻译后的文本结果
print(dst)
return dst
except Exception as e:
print(e)
注意APP ID和key是在第二步注册的,可以免费使用。实名认证后每天免费翻译200万字,正常使用完全够用。
3. 用 wx 创建一个页面
这一步主要是设置两个文本容器来存放需要翻译和翻译的文本容器,然后设置一个combox容器来选择不同的翻译模式。最后,将按钮按钮设置为翻译按钮。主要代码如下:
#创建应用程序对象
app = wx.App()
win = wx.Frame(None, title="cyl伪原创工具".encode('utf8'), size=(800, 700))#size为默认窗口大小,可以根据自己的需要设置win.Show()
#添加两个文本框
contents1 = wx.TextCtrl(win, pos=(5, 5), size=(800, 300), style=wx.TE_MULTILINE | wx.TE_RICH)
contents2 = wx.TextCtrl(win, pos=(5, 380), size=(800, 340), style=wx.TE_MULTILINE | wx.TE_RICH)
# 添加翻译按钮
loadButton = wx.Button(win, label='翻译'.encode('utf8'), pos=(400, 330), size=(120, 40))
# 添加combox选择容器
listChoices = ['中-英','英-中','中-英-中','中-英-法-中']#列表框选项wx.ListBox
panel = wx.Panel(parent=win, pos=(200,325), size=(400,50))# 容器
selectCombox = wx.ComboBox(panel, pos=(10,10), value='中-英',choices=listChoices, style=0)#combox框创建,wx.CB_SORT表示排序
# 设置combox的选择触发事件
def setSelectValue():
global selectMode
selectMode= selectCombox.GetCurrentSelection()
print(listChoices)
# 获取数量,获取当前选择索引,获取当前选择值
# print(selectCombox.GetCount())
# print(selectCombox.GetCurrentSelection())
selectCombox.Bind(wx.EVT_COMBOBOX,setSelectValue)
in. selectMode 是一个全局变量,表示选择了翻译模式。combox 的索引用于替换选择的模式。在函数中赋值selectMode的时候一定要记得用global 关键词来引用全局变量而不是Local变量。
4. 最后根据翻译模式,触发botton按钮调用翻译函数进行翻译,将翻译后的文本写入第二个文本容器中。功能如下:
# 伪原创方法
def wyc(event):
contents2.Clear()#清空内容
text = contents1.GetValue();
if text:
text1 = text + "\n"
text_list = re.findall('(.*?)\s+',text1)
print(selectMode)
for text in text_list:
if selectMode == 0:
wyctext = translate(text,'zh','en')
contents2.AppendText(wyctext+'\n')
if selectMode == 1:
wyctext = translate(text,'en','zh')
contents2.AppendText(wyctext+'\n')
if selectMode == 2:
wyctext = translate(text,'zh','en')
wyctext = translate(wyctext, 'en', 'zh')
contents2.AppendText(wyctext+'\n')
if selectMode == 3:
wyctext = translate(text,'zh','en')
wyctext = translate(wyctext, 'en', 'fra')
wyctext = translate(wyctext, 'fra', 'zh')
contents2.AppendText(wyctext+'\n')
else:
wx.MessageBox("检测内容为空")
通过多次翻译,实现复杂的翻译变换。
4.伪原创 代码打包
程序写好后,需要打包成应用程序,才能在没有编译器的情况下运行。现在将上面的程序代码打包成一个程序,操作就很简单了。
首先,在pycharm终端中,输入
pip install pyinstaller
安装完成后,直接输入如下命令打包自己的程序:
pyinstaller --console --onefile main.py
注意:main.py是你要打包程序的py文件,改成你自己的py文件即可。打包完成后会在同级目录下生成dist文件夹,程序在dist文件夹下。
最好,运行程序,你就完成了。
伪原创 写在最后
通过这个实际项目,我发现python确实是一门好用的高级编程语言,但是在学习的过程中也存在一些困扰我的问题。例如,全局变量需要使用 global 关键字来调用函数;刚接触combox的时候,不知道怎么调用他的触发事件;conbox的列表选项设置,一开始看网上的代码,样式设置为自动排序,导致列表选项文本不匹配,最后解决了,不过python简单,效率不高高。如果觉得有用,欢迎关注cylgis。
完整代码
注意:需要更改应用程序 ID 和密钥。
import wx, requests,re,hashlib,time #导入wx包
selectinlanguage = 'zh'#默认输入中文
outlanguage = 'en'#默认输出英文
# 使用百度翻译api参数和配置随机数
salt = str(time.time())#随机数,设置为当前时间。
apiurl='http://api.fanyi.baidu.com/api/trans/vip/translate'
appid = "*****"
secretKey = '******'
selectMode = 0 #选择默认翻译的类型
# 翻译的函数,输入翻译的文本,文本语言,输出翻译后语言
def translate(text,inlanguage,outlanguage):
text = str(text)
sign = appid + text + salt + secretKey # appid+q+salt+密钥 的MD5值
sign = hashlib.md5(sign.encode("utf-8")).hexdigest() # 对sign做md5,得到32位小写的sign
#sign = md5(sign.encode()) MD5加密
try:
# 根据技术手册中的接入方式进行设定
paramas1 = {
'appid': appid,
'q': text,
'from': inlanguage,
'to': outlanguage,
'salt': salt,
'sign': sign
}
response = requests.get(apiurl, paramas1)
jsonResponse = response.json() # 获得返回的结果,结果为json格式
dst = str(jsonResponse["trans_result"][0]["dst"]) # 取得翻译后的文本结果
print(dst)
return dst
except Exception as e:
print(e)
#创建应用程序对象
app = wx.App()
win = wx.Frame(None, title="cyl伪原创工具".encode('utf8'), size=(800, 700))#size为默认窗口大小,可以根据自己的需要设置win.Show()
#添加两个文本框
contents1 = wx.TextCtrl(win, pos=(5, 5), size=(800, 300), style=wx.TE_MULTILINE | wx.TE_RICH)
contents2 = wx.TextCtrl(win, pos=(5, 380), size=(800, 340), style=wx.TE_MULTILINE | wx.TE_RICH)
# 添加翻译按钮
loadButton = wx.Button(win, label='翻译'.encode('utf8'), pos=(400, 330), size=(120, 40))
# 添加combox选择容器
listChoices = ['中-英','英-中','中-英-中','中-英-法-中']#列表框选项wx.ListBox
panel = wx.Panel(parent=win, pos=(200,325), size=(400,50))# 容器
selectCombox = wx.ComboBox(panel, pos=(10,10), value='中-英',choices=listChoices, style=0)#combox框创建,wx.CB_SORT表示排序
# 设置combox的选择触发事件
def setSelectValue():
global selectMode
selectMode= selectCombox.GetCurrentSelection()
print(listChoices)
# 获取数量,获取当前选择索引,获取当前选择值
# print(selectCombox.GetCount())
# print(selectCombox.GetCurrentSelection())
selectCombox.Bind(wx.EVT_COMBOBOX,setSelectValue)
# 伪原创方法
def wyc(event):
contents2.Clear()#清空内容
text = contents1.GetValue();
if text:
text1 = text + "\n"
text_list = re.findall('(.*?)\s+',text1)
print(selectMode)
for text in text_list:
if selectMode == 0:
wyctext = translate(text,'zh','en')
contents2.AppendText(wyctext+'\n')
if selectMode == 1:
wyctext = translate(text,'en','zh')
contents2.AppendText(wyctext+'\n')
if selectMode == 2:
wyctext = translate(text,'zh','en')
wyctext = translate(wyctext, 'en', 'zh')
contents2.AppendText(wyctext+'\n')
if selectMode == 3:
wyctext = translate(text,'zh','en')
wyctext = translate(wyctext, 'en', 'fra')
wyctext = translate(wyctext, 'fra', 'zh')
contents2.AppendText(wyctext+'\n')
else:
wx.MessageBox("检测内容为空")
# 再一次翻译清空选择
def selectList():
contents2.Clear() # 清空内容
#为按钮添加绑定事件,点击按钮执行wyc函数
loadButton.Bind(wx.EVT_BUTTON, wyc)
win.Show() #显示窗体
app.MainLoop()#运行程序