Heim >Backend-Entwicklung >Python-Tutorial >Python implementiert Übersetzungssoftware
In diesem Artikel geht es hauptsächlich um die Verwendung von Python zur Implementierung von Übersetzungssoftware. Beeilen Sie sich, sammeln Sie den Code und probieren Sie ihn aus.
Ich habe vor zwei Tagen viel Hundefutter von Bruder Ping gegessen. Er hat eine Übersetzungssoftware für seine Freundin geschrieben, und ich habe die Romantik des Programmiererseins wirklich gespürt. Ich habe eine ähnliche Demo durchgeführt, als ich etwas über Anfragen erfahren habe. Ich habe eine Post-Anfrage an Baidu Translate gesendet, um diesen Code weiter zu optimieren und eine interaktive Schnittstelle für Samstage und Sonntage hinzuzufügen.
Machen wir zunächst ein Foto, um Ihnen eins zu geben Feel
Die Funktion des Programms ist sehr einfach. Sie können einen beliebigen Übersetzer aus drei gängigen Übersetzern auswählen, um Wörter und Sätze zu übersetzen, und PyQt5 verwenden Modul zur Erzielung einer Mensch-Computer-Interaktion. Verwenden Sie das Anforderungsmodul, um Anforderungen zu senden und die Übersetzungsergebnisse an den Benutzer zurückzugeben.
Verwenden Sie Baidu Translate als Beispiel
Beliebig Übersetzen, um Seiteninformationen anzuzeigen.
Auf dem Bild können Sie erkennen, dass es sich um eine Post-Anfrage handelt, und auch die Header-Daten der Anfrage werden im Bild deutlich angezeigt.
Wir müssen die oben genannten Daten hinzufügen, wobei simple_means_flag ein fester Betrag ist und die Abfrage das zu übersetzende Wort darstellt, das wir schreiben ein einfacher Test des Codes.
import requests headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"} post_data={ 'query': 'Ahab杂货铺', 'from': 'zh', 'to': 'en', 'sign': '413120.175857', 'token':'64d8ce70799b54833f56b43f9d6eb3b4' } post_url="https://fanyi.baidu.com/v2transapi" r=requests.post(post_url,data=post_data,headers=headers) print(r.content.decode())
Nach dem Ausführen werden die folgenden Ergebnisse ausgegeben:
Der Grund für den oben genannten Fehler ist sign und token Was ist mit diesen beiden Parametern los? Lassen Sie uns zunächst über das Token sprechen. Das Token finden Sie direkt im Quellcode der Baidu Translation-Homepage:
Da der Zeitstempel nicht synchronisiert ist, kann das durch direktes Anfordern der Baidu Translate-Homepage erhaltene Token nicht verwendet werden. Wir können den aktuell auf der Webseite angezeigten Token-Wert nur manuell kopieren und dem Token im Code zuweisen.
Der Vorzeichenparameter wird im Frontend basierend auf dem übersetzten Inhalt generiert. Wenn der Abfrageinhalt und das Vorzeichen in der gesendeten Anfrage nicht übereinstimmen, ist die empfangene Antwort ein Fehler. Als nächstes müssen Sie das Baidu Translate-Zeichen knacken. Das Zeichen wird aus einer JS-Datei generiert. Die folgende Abbildung zeigt die JS-Datei, die das Zeichen generiert.
将这个代码放在格式化工具中重新排版一下,找到 sign 执行函数的代码,再用 execjs,执行这段 js 代码,在计算过程中还需要 gtk 的值,这个值在翻译首页获取一下就可以。
js = js.replace(
上边的步骤完成以后我们就可以愉快的进行翻译了。
图形化界面用的是 pyQt5 这个模块,实现起来不难。
class Demo(QWidget): def __init__(self, parent=None): super().__init__() elf.setWindowTitle('翻译软件-公众号: Ahab杂货铺') self.Label1 = QLabel('原文') self.Label2 = QLabel('译文') self.LineEdit1 = QLineEdit() self.LineEdit2 = QLineEdit() self.translateButton1 = QPushButton() self.translateButton2 = QPushButton() self.translateButton3 = QPushButton() self.translateButton1.setText('百度翻译') self.translateButton2.setText('有道翻译') self.translateButton3.setText('谷歌翻译') self.grid = QGridLayout() self.grid.setSpacing(12) self.grid.addWidget(self.Label1, 1, 0) self.grid.addWidget(self.LineEdit1, 1, 1) self.grid.addWidget(self.Label2, 2, 0) self.grid.addWidget(self.LineEdit2, 2, 1) self.grid.addWidget(self.translateButton1, 1, 2) self.grid.addWidget(self.translateButton2, 2, 2) self.grid.addWidget(self.translateButton3, 3, 2) self.setLayout(self.grid) self.resize(400, 150) self.translateButton1.clicked.connect(lambda : self.translate(api='baidu')) self.translateButton2.clicked.connect(lambda : self.translate(api='youdao')) self.translateButton3.clicked.connect(lambda : self.translate(api='google')) self.bd_translate = baidu() elf.yd_translate = youdao() self.gg_translate = google() def translate(self, api='baidu'): word = self.LineEdit1.text() if not word: return if api == 'baidu': results = self.bd_translate.translate(word) elif api == 'youdao': results = self.yd_translate.translate(word) elif api == 'google': results = self.gg_translate.translate(word) else: raise RuntimeError('Api should be <baidu> or <youdao> or <google>...') for result in results: self.LineEdit2.setText(result)</google></youdao></baidu>
相关教程:Python视频教程
Das obige ist der detaillierte Inhalt vonPython implementiert Übersetzungssoftware. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!