Cet article parle principalement de l'utilisation de Python pour implémenter un logiciel de traduction. C'est super pratique. Dépêchez-vous de collecter le code et essayez-le. J'espère que cela vous inspirera pour apprendre Python !
J'ai mangé beaucoup de nourriture pour chien de frère Ping il y a deux jours. Il a écrit un logiciel de traduction pour sa petite amie, et j'ai vraiment ressenti le romantisme d'être programmeur. J'ai fait une démo similaire lorsque j'ai pris connaissance des demandes. J'ai envoyé une demande de publication à Baidu Translate pour traduire n'importe quelle phrase, j'ai encore optimisé ce code et ajouté une interface interactive les samedis et dimanches avec le logiciel de traduction d'aujourd'hui.
Tout d'abord, prenons une photo pour que chacun se sente it
La fonction du programme est très simple. Vous pouvez choisir n'importe quel traducteur parmi trois traducteurs traditionnels pour traduire des mots et des phrases, et utiliser le PyQt5. pour réaliser une interaction homme-machine. Utilisez le module de requêtes pour envoyer des requêtes et renvoyer les résultats de la traduction à l'utilisateur.
Utiliser Baidu Translate comme exemple
Tout Traduire pour afficher les informations de la page.
Vous pouvez voir sur l'image qu'il s'agit d'une demande de publication, et les données d'en-tête de la demande sont également clairement affichées dans l'image.
Nous devons ajouter les données ci-dessus, où simple_means_flag est un montant fixe et la requête représente le mot à traduire. Sur la base de ces informations, nous écrivons. un simple test du code.
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())
Après l'exécution, les résultats suivants sont affichés :
La raison de l'erreur ci-dessus est sign et token Quel est le problème avec ces deux paramètres, parlons d'abord du jeton. Le jeton se trouve directement dans le code source de la page d'accueil de Baidu Translation :
. car l'horodatage n'est pas synchronisé. Par conséquent, le jeton obtenu en demandant directement la page d'accueil de Baidu Translate ne peut pas être utilisé. Nous pouvons uniquement copier manuellement la valeur du jeton actuellement affichée sur la page Web et l'attribuer au jeton dans le code.
Le paramètre de signe est généré dans le frontend en fonction du contenu traduit. Si le contenu de la requête et la connexion dans la demande envoyée ne correspondent pas, la réponse reçue est une erreur. La prochaine chose à faire est de déchiffrer le signe Baidu Translate. Le signe est généré à partir d'un fichier js. La figure ci-dessous est le fichier js qui génère le signe.
将这个代码放在格式化工具中重新排版一下,找到 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视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!