#!/usr/bin/env python3 # http://inamidst.com/saxo/ # Created by Sean B. Palmer import re import urllib.parse import saxo uri = "http://en.wiktionary.org/w/index.php?title=%s&printable=yes" r_tag = re.compile(r"<[^>]+>") r_ul = re.compile(r"(?ims)") def text(html): text = r_tag.sub("", html).strip() text = text.replace("\n", " ") text = text.replace("\r", "") text = text.replace("(intransitive", "(intr.") text = text.replace("(transitive", "(trans.") return text def wiktionary(word): page = saxo.request(uri % urllib.parse.quote(word)) te = r_ul.sub("", page["text"]) mode = None etymology = None definitions = {} for line in te.splitlines(): if 'id="Etymology"' in line: mode = "etymology" elif 'id="Noun"' in line: mode = "noun" elif 'id="Verb"' in line: mode = "verb" elif 'id="Adjective"' in line: mode = "adjective" elif 'id="Adverb"' in line: mode = "adverb" elif 'id="Interjection"' in line: mode = "interjection" elif 'id="Particle"' in line: mode = "particle" elif 'id="Preposition"' in line: mode = "preposition" elif 'id="' in line: mode = None elif (mode == "etmyology") and ("

" in line): etymology = text(line) elif (mode is not None) and ("

  • " in line): definitions.setdefault(mode, []).append(text(line)) if " 300: result = result[:295] + '[...]' return result