[PYTHON] J'ai créé un package comme le dictionnaire pop-up Weblio anglais-japonais avec Sublime Text3

Le dictionnaire pop-up anglais-japonais Weblio était pratique, j'ai donc pensé que ce serait bien si l'éditeur de texte avait une telle fonction.

Le dictionnaire pop-up Weblio anglais-japonais affiche les résultats de la recherche du dictionnaire comme ↓. weblioポップアップ英和辞典.png
Dans l'exemple ci-dessus, le mot que vous souhaitez rechercher est inversé, mais il existe également un paramètre pour l'afficher simplement en survolant la souris.

Fonction visée

Il s'est avéré être quelque chose comme ça.

PopTranslateEnglishIntoJapaneseの見た目.png

environnement

Site référencé

code

PopTranslateEnglish.py


# coding=UTF-8
import sublime, sublime_plugin
import urllib.request
import xml.etree.ElementTree as ET

class popTranslateEnglishIntoJapaneseCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        search_word = self.view.substr(self.view.sel()[0])
        if search_word == "":
            print('none select word')
            return
        else:
            print(search_word)

        item_id = self.getItemID(search_word)
        text = self.getTranslatedText(item_id)
        if text == '':
            return

        text_arr = self.splitTranslatedText(text, '\t')
        self.view.show_popup_menu(text_arr, None)


    def getXmlElementText(self, url, tag):
        print('url : ' + url)
        try:
            xml = urllib.request.urlopen(url)
        except urllib.error.HTTPError as e:
            print('error code : ' + str(e.code))
            print('error read : ' + str(e.read()))
            return ''

        print(xml)
        tree = ET.parse(xml)
        root = tree.getroot()
        element = root.find('.//{http://btonic.est.co.jp/NetDic/NetDicV09}' + tag)
        text = element.text
        print(text)
        return text

    def getItemID(self, search_word):
        head = 'http://public.dejizo.jp/NetDicV09.asmx/SearchDicItemLite?Dic=EJdict&Word='
        end = '&Scope=HEADWORD&Match=EXACT&Merge=OR&Prof=XHTML&PageSize=20&PageIndex=0'
        url = head + search_word + end
        return self.getXmlElementText(url, 'ItemID')

    def getTranslatedText(self, item_id):
        head = 'http://public.dejizo.jp/NetDicV09.asmx/GetDicItemLite?Dic=EJdict&Item='
        end = '&Loc=&Prof=XHTML'
        url = head + item_id + end
        return self.getXmlElementText(url, 'Body/div/div')

    def splitTranslatedText(self, translated_text, split_word):
        return translated_text.split(split_word)

Qu'est-ce que tu as fait?

  1. Tout d'abord, recherchez comment créer un package Apprenez la méthode de base de fabrication sur le lien ci-dessous. [Depuis que j'ai commencé à utiliser sublime-text3, j'ai également créé un plug-in](http://wood-roots.com/web%E5%88%B6%E4%BD%9C/%E3%83%84%E3% 83% BC% E3% 83% AB% E3% 82% A8% E3% 83% 87% E3% 82% A3% E3% 82% BF / sublime-text3% E3% 82% 92% E4% BD% BF% E3% 81% 84% E3% 81% FA% E3% 81% 98% E3% 82% 81% E3% 81% 9F% E3% 81% AE% E3% 81% A7% E3% 83% 97% E3% 83% A9% E3% 82% B0% E3% 82% A4% E3% 83% B3% E3% 82% 82% E4% BD% 9C% E3% 81% A3% E3% 81% A6% E3% 81% BF% E3% 81% 9F) Au fait, j'ai l'impression de comprendre la description de python.

  2. Comment traduire ... Au début, j'ai cherché l'API de Weblio mais je ne l'ai pas trouvée. J'ai découvert qu'il semble que je puisse le traduire via le lien ci-dessous. Exemple de code Ruby qui appelle l'API du dictionnaire anglais-japonais / japonais-anglais dejizo Apparemment, en décrivant les mots anglais et les paramètres que vous souhaitez rechercher dans l'URL comme une fonction, le XML du résultat de la traduction sera renvoyé. C'est comme analyser le XML retourné et obtenir le résultat de la traduction. Cependant, puisque l'exemple est Ruby, comment le réaliser avec python ...

  3. urllib et xml.etree.ElementTree Il semble que cela puisse être réalisé en utilisant ces deux bibliothèques. Vous pouvez obtenir les données lorsque vous accédez à l'URL avec urllib, cette fois, vous pouvez obtenir le fichier XML. Flux d'analyse du XML acquis par xml.etree.ElementTree. Vous pouvez découvrir comment utiliser chaque bibliothèque par google.

  4. Partie chronophage

J'obtiens l'élément ici, mais la partie entourée de '{}' est l'espace de noms. Pour plus de détails, consultez Manipulation de XML avec un espace de noms en Python (arbre des éléments) En passant, si vous ajoutez «.//», vous pouvez rechercher non seulement les éléments enfants, mais aussi les éléments petits-enfants et au-delà.

  1. Enfin J'ai fait le colis pour la première fois, mais c'était aussi simple que possible en une journée. J'ai enregistré GitHub mais il n'y a pas de référentiel. Je le ferai quand j'en aurai envie.

Recommended Posts

J'ai créé un package comme le dictionnaire pop-up Weblio anglais-japonais avec Sublime Text3
J'ai fait un texte Python
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
Les validateurs W3C ne fonctionnaient pas avec Sublime Text3, alors je l'ai fait fonctionner
J'ai fait un compteur de caractères avec Python
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
J'ai fait un interlocuteur comme Siri
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une application WEB avec Django
J'ai fait un simulateur de neurones avec Python
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Créer un environnement de construction python3 avec Sublime Text3
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai créé un Bot LINE avec Serverless Framework!
J'ai fait un graphique de nombres aléatoires avec Numpy
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai créé un bot de livre de compte de ménage avec LINE Bot
J'ai créé un serveur syslog prêt à l'emploi avec Play with Docker
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai créé un outil de génération de données texte répétitif "rpttxt"
J'ai fait un jeu mono tombé avec Sense HAT
Configurer un environnement de développement Python avec Sublime Text 2
〇✕ J'ai fait un jeu
Pythonbrew avec Sublime Text
Une histoire qui a trébuché lorsque j'ai créé un bot de chat avec Transformer
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
Je veux installer le package de requirements.txt avec poésie
J'ai fait une minuterie pomodoro dure qui fonctionne avec CUI
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
J'ai fait un blackjack avec du python!
J'ai fait un robot discord
J'ai créé COVID19_simulator avec JupyterLab
J'ai créé Word2Vec avec Pytorch
J'ai créé wordcloud avec Python.
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)