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 ↓.
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.
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)
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.
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 ...
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.
Partie chronophage
urllib.request.urlopen utilisé dans la méthode getXmlElementText Cela semble être urllib.request.urlopen ou urllib.urlopen selon la version de python. Le mot d'importation peut-il changer?
XML a un espace de noms et la recherche de balises échoue Si vous transmettez la balise que vous souhaitez rechercher à la méthode find, elle renverra l'élément enfant. Cependant, s'il existe un espace de noms, il semble que vous deviez ajouter l'espace de noms à la balise.
element = root.find('.//{http://btonic.est.co.jp/NetDic/NetDicV09}' + tag)
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à.
Recommended Posts