SublimeText3에서 Weblio 팝업 영어와 같은 패키지를 만들었습니다.
12303 단어 패키지파이썬SublimeText3
Weblio 팝업영화사전은↓같은 느낌으로 사전의 검색결과를 표시해 줍니다.
위의 예에서는 검색하고 싶은 단어를 반전시키고 있지만 마우스 오버만으로 표시하는 설정도 있습니다.
목표로 하는 기능
이런 느낌이 들었습니다.
환경
참고로 한 사이트
코드
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)
무엇을 했습니까?
아래의 링크처에서 기본적인 만드는 방법을 학습.
sublime-text3을 사용하기 시작했기 때문에 플러그인도 만들어 보았습니다.
김에 무려~쿠 python의 기술을 이해한 신경이 쓰인다.
처음에는 Weblio API를 찾았지만 찾을 수 없었습니다.
그 중 아래 링크에서 디사장이라고 하면 번역할 수 있는 것 같다는 것을 발견.
英和・和英辞書API의 디사전을 호출하는 Ruby 코드의 샘플
아무래도 URL내에 검색하고 싶은 영단어나 파라미터를 함수와 같이 기술하는 것으로 번역 결과의 XML이 돌아오는 것 같다.
그 돌아온 XML을 해석해 번역 결과를 취득, 라고 하는 느낌.
그러나 샘플은 Ruby이므로 어떻게 파이썬으로 실현되는지 ...
이 2개의 라이브러리를 사용하는 것으로 실현할 수 있을 것 같다.
urllib에서 URL에 액세스할 때 데이터를 가져오고 이번에는 XML 파일을 가져올 수 있습니다.
xml.etree.ElementTree에서 얻은 XML을 구문 분석하는 흐름.
각 라이브러리의 사용법은 구그하면 많이 나옵니다.
번거로운 부분
파이썬 버전에 따라 urllib.request.urlopen이거나 urllib.urlopen이 될 것 같습니다. import의 단어도 바뀔지도?
find 메소드에 검색하고 싶은 태그를 건네주면(자) 아이 요소를 돌려줍니다.
다만 네임스페이스가 있으면 네임스페이스를 태그에 붙이지 않으면 안 되는 것 같습니다.
element = root.find('.//{http://btonic.est.co.jp/NetDic/NetDicV09}' + tag)
여기서 요소를 가져오고 있지만 '{}'로 둘러싸인 부분이 네임스페이스가 됩니다.
자세한 내용은 파이썬에서 네임 스페이스가있는 XML로 작업하기 (ElementTree)
덧붙여서 './/'를 붙이면 자식 요소뿐만 아니라 손자 요소 이후도 검색할 수 있습니다.
처음 패키지를 만들었는데 하루에 할 수 있을 정도로 간단했습니다.
GitHub는 등록했지만 리포지토리는 없습니다. 마음이 향하면 만듭니다.
Reference
이 문제에 관하여(SublimeText3에서 Weblio 팝업 영어와 같은 패키지를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hachimitu22/items/f022baab18ee8d267a08텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)