Skip to content

Commit f9d3fc1

Browse files
committed
Return to original wiktionary implementation
1 parent 59b2991 commit f9d3fc1

1 file changed

Lines changed: 27 additions & 13 deletions

File tree

vocabsieve/sources/wiktionary_source.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@
77
from ..dictformats import kaikki_line_to_textdef
88
from ..constants import langcodes
99

10+
def fmt_result(definitions):
11+
"Format the result of dictionary lookup"
12+
lines = []
13+
for defn in definitions:
14+
if defn['pos'] != "":
15+
lines.append("<i>" + defn['pos'] + "</i>")
16+
lines.extend([str(item[0] + 1) + ". " + item[1]
17+
for item in list(enumerate(defn['meaning']))])
18+
return "<br>".join(lines)
1019

1120
class WiktionarySource(DictionarySource):
1221
def __init__(self, langcode: str, options: SourceOptions) -> None:
@@ -17,22 +26,27 @@ def __init__(self, langcode: str, options: SourceOptions) -> None:
1726
super().__init__("Wiktionary (English)", langcode, options)
1827

1928
def _lookup(self, word: str) -> LookupResult:
20-
logger.info(f"Looking up {word} in Wiktionary")
21-
language_longname = langcodes[self.langcode]
29+
logger.info(f"Looking up {word} in Wiktionary (English), langcode {self.langcode}")
2230
try:
2331
res = cached_get(
24-
f"https://kaikki.org/dictionary/{language_longname}/meaning/{word[0]}/{word[0:2]}/{word}.jsonl")
32+
'https://en.wiktionary.org/api/rest_v1/page/definition/' +
33+
word)
2534
except Exception as e:
2635
logger.error(f"Failed to get data from Wiktionary: {repr(e)}")
27-
return LookupResult(error=repr(e))
36+
return LookupResult(error=str(e))
2837
if res.status_code != 200:
2938
return LookupResult(error=str(res.text))
30-
datalines = res.content.decode('utf-8').splitlines()
31-
items: list[str] = []
32-
for line in datalines:
33-
data = json.loads(line)
34-
items.append(kaikki_line_to_textdef(data))
35-
if items:
36-
return LookupResult(definition="<br>\n".join(items))
37-
else:
38-
return LookupResult(error="No definitions found")
39+
definitions = []
40+
data = res.json()
41+
if self.langcode not in data.keys():
42+
return LookupResult(error="Word not defined in language")
43+
data = data[self.langcode]
44+
for item in data:
45+
meanings = []
46+
for defn in item['definitions']:
47+
parsed_meaning = BeautifulSoup(defn['definition'], features="lxml")
48+
meanings.append(parsed_meaning.text)
49+
50+
meaning_item = {"pos": item['partOfSpeech'], "meaning": meanings}
51+
definitions.append(meaning_item)
52+
return LookupResult(definition=fmt_result(definitions))

0 commit comments

Comments
 (0)