Exemplo n.º 1
0
def job():
    ISSNs = pd.read_csv('./issn.csv')
    savedFilename = "./res1.csv"
    dataList = []
    index = 0
    files = 0
    names = ['ISSN', '全名', '中文全名', '年文章量', '投稿难易度', '初审周期', '主页']
    resFile = pd.DataFrame(columns=names, data=dataList)
    resFile.to_csv(savedFilename, mode='a+', index=False)
    for issn in ISSNs['issn']:
        HtmlStr = getData(issn)
        enFullName, NumOfPapers, EasyOrHard, ReviewTime, HomePage = parseHtml(
            HtmlStr)
        zhFullName = baidu_translate(enFullName)
        #print(issn,enFullName,zhFullName,NumOfPapers,EasyOrHard,ReviewTime,HomePage)
        dataList.append([
            issn, enFullName, zhFullName, NumOfPapers, EasyOrHard, ReviewTime,
            HomePage
        ])
        print('第{}条处理完毕,ISSN={}'.format(index, issn))
        index = index + 1
        if index % 30 == 0:
            resFile = pd.DataFrame(data=dataList)
            resFile.to_csv(savedFilename, mode='a+', header=False, index=False)
            dataList = []
            print("第{}次保存".format(files))
            files = files + 1
    if len(dataList) != 0:
        resFile = pd.DataFrame(data=dataList)
        resFile.to_csv(savedFilename, mode='a+', header=False, index=False)
        print("剩余数据保存完毕")
    print("全部处理完毕")
Exemplo n.º 2
0
def test(issn):
    HtmlStr = getData(str(issn))
    enFullName, NumOfPapers, EasyOrHard, ReviewTime, HomePage = parseHtml(
        HtmlStr)
    zhFullName = baidu_translate(enFullName)
    print(enFullName, zhFullName, NumOfPapers, EasyOrHard, ReviewTime,
          HomePage)
Exemplo n.º 3
0
def translate():
    return jsonify({
        'text': baidu_translate(
            request.form['test'],
            request.form['sourceLang'],
            reqsuet.form['destLang']
        )
    })
Exemplo n.º 4
0
 def show_data(self, dic):
     '''将数据显示在界面中'''
     date = dic['date']
     location = dic['locinfo']
     url = dic['url']
     content = dic['content']
     self.lineEdit_1.setText(date)
     self.lineEdit_2.setText(str(location))
     self.lineEdit_3.setText(url)
     self.plainTextEdit_4.clear()
     self.plainTextEdit_4.appendPlainText(content)
     translation = baidu_translate(content)
     self.plainTextEdit_5.clear()
     self.plainTextEdit_5.appendPlainText(translation)
     self.lineEdit_6.clear()
Exemplo n.º 5
0
    def login(self):
        '''
        模擬登陸。
        測試 appid 及 secretKey 是否合法,是否高級帳戶。
        記錄用戶是否記住帳戶信息。
        '''
        test_translation = ''
        for i in range(2):
            res = baidu_translate('呢個係登陸測試!',
                                  self.appid,
                                  self.secretkey,
                                  from_lang='yue')
            test_translation = res.get('trans_result')
            print(res)

            # 連續發起兩次請求。
            # 第一次請求,驗證帳號密鑰是否正確。
            if test_translation and i == 0:
                self.login_pushButton.setDisabled(True)  # 驗證成功後,不需要再次登陸。
                self.start_pushButton.setDisabled(False)  # 登陸後允許發出翻譯請求。
                self.appid_lineEdit.setDisabled(True)  # 登陸成功後禁止修改帳號密碼。
                self.secretkey_lineEdit.setDisabled(True)
                if self.remember_checkBox.isChecked():
                    self.remember_info()
                self.new_log('驗證成功!')
            # 第二次請求,驗證是否高級版 API,可以調整請求速度。
            elif test_translation and i == 1:
                self.is_premium = True
                self.log('API權限 - 高級版')
            # 錯誤代碼解釋。
            elif res.get('error_code') == '54003' and i == 1:
                self.log('API權限 - 普通版\n')
            elif res.get('error_code') == '52003':
                self.new_log('請檢查 appid 或 secretkey 是否正確。')
            # 其他錯誤代碼。
            else:
                print(res)
                self.new_log(json.dumps(res))
Exemplo n.º 6
0
def translate_srt(path,
                  appid,
                  secretkey,
                  from_lang='auto',
                  to_lang='zh',
                  is_premium=False,
                  limit=800):
    '''
    翻譯一個 SRT 文件,生成文件後不會改動任何排版。
    可以改寫 translate() 函數接駁其他 API。
    translate() 返回一個字典,其中鍵'trans_result'為翻譯結果:
    {'trans_result': [{'src': '<原文1>', 'dst': '<譯文1>'}, {'src': '<原文2>', 'dst': '<譯文2>'}]}
    '''
    # 只需要有中文的行,才需要翻譯。
    to_translate_lines = get_chinese_lines(path)

    # 把句子合併成文章,減少請求次數。
    # 由於翻譯請求有字數限制,Get 1000字,Post 2000字。須統計總字數,以便之後分開若干部分翻譯。
    # 為免影響翻譯質量,以及之後重新寫入文件的難度。不能平均切割,須以句子方式,即逐行切割。
    text = ''.join(to_translate_lines)
    total_count = len(text)
    yield total_count

    to_translate_parts = []  # 裝載準備請求翻譯的部分文本。
    translations = []  # 裝載翻譯 API 返回結果。
    count = 0  # 計算循環當刻所讀取的字數。
    parts = 0  # 計算分成多少部分,即請求次數。
    for line in to_translate_lines:
        count += len(line)
        total_count -= len(line)
        # Get 請求不能超過 1000 字,這裏設限制在 950 字。
        # 文本不足 950 字只需發送一次請求,或者超過限制文本的最後一部分請求。
        if count < limit and total_count == 0:
            print(f'讀取字數 {count}, 剩餘字數{total_count}')
            to_translate_parts.append(line)

            # 發送請求。
            res = baidu_translate('\n'.join(to_translate_parts),
                                  appid,
                                  secretkey,
                                  from_lang=from_lang,
                                  to_lang=to_lang)
            print(res)
            translations += res.get('trans_result')

            parts += 1
            yield total_count
            print(f'This is part {parts}.')
            print(translations)

        # 每當檢測到即將超過 950 字,就將__此行文本之前__的部分本文發出請求。
        elif count >= limit and total_count > 0:
            print(f'讀取字數 {count}, 剩餘字數{total_count}')
            # 發送請求。
            res = baidu_translate('\n'.join(to_translate_parts),
                                  appid,
                                  secretkey,
                                  from_lang=from_lang,
                                  to_lang=to_lang)
            translations += res.get('trans_result')

            # 此行之前部分文本已翻譯。須清空待翻譯文本列表,再裝載這行文本。
            to_translate_parts = []
            to_translate_parts.append(line)

            count = 0
            parts += 1
            yield total_count
            print(f'This is part{parts}')
            print(translations)
            if is_premium:
                time.sleep(0.1)  # 高級版 API 權限為 10 QPS。
            else:
                time.sleep(1)  # 普通版 API 權限為 1 QPS。

        # 未檢測到超出 950 字前,將每行文本裝載入列表,準備發音。
        else:
            print('字數未超過限制,未發出請求。')
            to_translate_parts.append(line)

    # 最後返回翻譯文件的絕對路徑字符串。
    new_path = path.absolute().__str__().replace('.srt',
                                                 f'_translated_{to_lang}.srt')
    print(new_path)
    new_path = new_path.replace('zh.srt', 'chs.srt')
    write_srt(new_path, path, translations)
    yield Path(new_path).absolute().__str__()
Exemplo n.º 7
0
def translate():
    return jsonify({
        'text': baidu_translate(
            request.form['text'],
            request.form['sourceLang'],
            request.form['destLang']) })