基于python的一个论文降重脚本

寒假闲暇无事,正好有一个朋友写论文,让我写个脚本帮助其降重

本脚本利用百度翻译api进行,原理非常简单:中文翻译中文,也就是说先利用中文翻译成外国语言,再将其翻译成为中文。

 

在input输入需要翻译的文字,然后通过powershell运行,就能在powershell窗口或者output文件夹获取降重结果。

你需要自己申请一个百度翻译的接口,将你自己的APP ID与密钥分别写入图示1与2的位置。

百度翻译api申请

然后直接运行就行了。

签名生成方法

签名是为了保证调用安全,使用 MD5 算法生成的一段字符串,生成的签名长度为 32 位,签名中的英文字符均为小写格式。

生成方法:

Step1. 将请求参数中的 APPID(appid), 翻译 query(q,注意为UTF-8编码),随机数(salt),以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥的顺序拼接得到字符串 1。
Step2. 对字符串 1 做 md5 ,得到 32 位小写的 sign。
注:
1. 待翻译文本(q)需为 UTF-8 编码;
2. 在生成签名拼接 appid+q+salt+密钥 字符串时,q 不需要做 URL encode,在生成签名之后,发送 HTTP 请求之前才需要对要发送的待翻译文本字段 q 做 URL encode
3.如遇到报 54001 签名错误,请检查您的签名生成方法是否正确,在对 sign 进行拼接和加密时,q 不需要做 URL encode,很多开发者遇到签名报错均是由于拼接 sign 前就做了 URL encode;
4.在生成签名后,发送 HTTP 请求时,如果将 query 拼接在 url 上,需要对 query 做 URL encode。

输入参数

请求方式: 可使用 GET 或 POST 方式,如使用 POST 方式,Content-Type 请指定为:application/x-www-form-urlencoded
字符编码:统一采用 UTF-8 编码格式
query 长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)

字段名类型是否必填描述备注
qstring请求翻译queryUTF-8编码
fromstring翻译源语言可设置为auto
tostring翻译目标语言不可设置为auto
appidstringAPP ID可在管理控制台查看
saltstring随机数可为字母或数字的字符串
signstring签名appid+q+salt+密钥的MD5值
以下字段仅开通了词典、TTS用户需要填写
ttsinteger是否显示语音合成资源0-显示1-不显示
dictinteger是否显示词典资源0-显示1-不显示
以下字段仅开通了”我的术语库“用户需要填写
actioninteger判断是否需要使用自定义术语干预API1-是0-否

输出参数

返回的结果是json格式,包含以下字段:

字段名类型描述备注
fromstring源语言返回用户指定的语言,或者自动检测出的语种(源语言设为 auto 时)
tostring目标语言返回用户指定的目标语言
trans_resultarray翻译结果返回翻译结果,包括 src 和 dst 字段
trans_result.*.srcstring原文接入举例中的“apple”
trans_result.*dststring译文接入举例中的“苹果”
error_codeinteger错误码仅当出现错误时显示
以下字段仅开通了词典、TTS用户可见
src_ttsstring原文tts链接mp3格式,暂时无法指定发音
dst_ttsstring译文tts链接mp3格式,暂时无法指定发音
dictstring中英词典资源返回中文或英文词典资源,包含音标,简明释义等内容

接入举例

例如:将英文单词 apple 翻译成中文:

请求参数

q=apple
from=en
to=zh
appid=2015063000000001(请替换为您的appid)
salt=1435660288(随机码)
平台分配的密钥: 12345678

生成签名sign:

step1:拼接字符串1:

拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678得到                       字符串1:“2015063000000001apple143566028812345678”

step2:计算签名:(对字符串1做md5加密)

sign=md5(2015063000000001apple143566028812345678),得到sign=f89f9594663708c1605f3d736d01d2d4

拼接完整的请求如下:

http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4

主要代码如下

# 导入相关模块
import hashlib
import random
import requests
import time


# 你的APP ID
appID = '***************'
# 你的密钥
secretKey = '***************'
# 百度翻译 API 的 HTTP 接口
apiURL = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
def baiduAPI_translate(query_str, to_lang):
    '''
    传入待翻译的字符串和目标语言类型,请求 apiURL,自动检测传入的语言类型获得翻译结果
    :param query_str: 待翻译的字符串
    :param to_lang: 目标语言类型
    :return: 翻译结果字典
    '''
    # 生成随机的 salt 值
    salt = str(random.randint(32768, 65536))
    # 准备计算 sign 值需要的字符串
    pre_sign = appID + query_str + salt + secretKey
    # 计算 md5 生成 sign
    sign = hashlib.md5(pre_sign.encode()).hexdigest()
    # 请求 apiURL 所有需要的参数
    params = {
        'q': query_str,
        'from': 'auto',
        'to': to_lang,
        'appid': appID,
        'salt':salt,
        'sign': sign
    }
    try:
        # 直接将 params 和 apiURL 一起传入 requests.get() 函数
        response = requests.get(apiURL, params=params)
        # 获取返回的 json 数据
        result_dict = response.json()
        # 得到的结果正常则 return
        if 'trans_result' in result_dict:
            return result_dict
        else:
            print('Some errors occured:\n', result_dict)
    except Exception as e:
        print('Some errors occured: ', e)


def baiduAPI_translate_main(query_str, dst_lang=''):
    '''
    解析翻译结果后输出,默认实现英汉互译
    :param query_str: 待翻译的字符串,必填
    :param dst_lang: 目标语言类型,可缺省
    :return: 翻译后的字符串
    '''
    if dst_lang:
        # 指定了目标语言类型,则直接翻译成指定语言
        result_dict = baiduAPI_translate(query_str, dst_lang)
    else:
        # 未指定目标语言类型,则默认进行英汉互译
        result_dict = baiduAPI_translate(query_str, 'zh')
        if result_dict['from'] == 'zh':
            result_dict = baiduAPI_translate(query_str, 'en')
    # 提取翻译结果字符串,并输出返回
    dst = result_dict['trans_result'][0]['dst']
    #print('{}: {} -> {}: {}'.format(result_dict['from'], query_str, result_dict['to'], dst))
    return dst


if __name__ == '__main__':

    with open('output.txt', 'w', encoding='UTF-8') as ouput:
        ouput.truncate()   #清空文件


    with open('input.txt','r', encoding='UTF-8') as input:
        line = input.readline()

        while line:
            #如果该行为空,不循环,直接输出空
            if line.strip() == "" :
                line = input.readline()
                with open('output.txt', 'a') as ouput:
                    ouput.write('\n')
                continue
            if(line == '' or line == ' '):
                continue
            # time.sleep(1)
            print(line)
            try:
                ans = baiduAPI_translate_main(line, 'en') # 这里调节参数选择中间层语言
                time.sleep(1)
                ans = baiduAPI_translate_main(ans, 'zh')

                print(ans)
                with open('output.txt', 'a') as ouput:
                    ouput.write(ans + '\n')
            except Exception as e:
                print(e)

            line = input.readline()
            time.sleep(1)

想下载参考的可以点下面链接

资源下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值