import json import os import glob import genanki class Word: group_index = {} def __init__(self, group, hanzi, definition): self.group = group self.hanzi = hanzi self.definition = definition self.index = self.group_index[group] = self.group_index.get(group, -1) + 1 def hint_filename(self): return f"hints/{self.group}-{self.index:02d}-{self.hanzi}.json" def image_filename(self): return f"images/{self.group}-{self.index:02d}-{self.hanzi}.png" with open("all-words.tsv") as file: all_words = [Word(*line.rstrip().split("\t")) for line in file] uniqueid1 = 1778988700 uniqueid2 = 1450502968 hanzi_writer = """
""" model = genanki.Model( model_id=uniqueid1, name="Basic (type in the answer) (Jim)", fields=[{"name": "Chinese"}, {"name": "ChineseBlank"}, {"name": "English"}, {"name": "Definition"}, {"name": "Picture"}, {"name": "Answer"}], templates=[ { "name": "Card 1", "qfmt": """
{{ChineseBlank}}
{{Picture}}
“{{English}}”

{{Definition}}
{{type:Answer}} """, "afmt": """
{{Chinese}}
""" + hanzi_writer + """ {{Picture}}
“{{English}}”

{{Definition}}
{{type:Answer}}
""", } ], css=""" .card { font-family: arial; font-size: 20px; text-align: center; color: black; background-color: white; } .card.nightMode { font-family: arial; font-size: 20px; text-align: center; color: black; background-color: white; } """, model_type=0, ) model_learn = genanki.Model( model_id=uniqueid1 + 1, name="Basic (type in the answer) (Jim; Learn)", fields=model.fields, templates=[ { "name": model.templates[0]["name"], "qfmt": """
{{ChineseBlank}}
""" + hanzi_writer + """ {{Picture}}
“{{English}}”

{{Definition}}
{{type:Answer}} """, "afmt": model.templates[0]["afmt"] } ], css=model.css, ) focus_format = ( hanzi_writer .replace("width: 100", "width: 200") .replace("height: 100", "height: 200") .replace("float: right;", "margin-left: auto; margin-right: auto;") + """
{{Definition}}
{{type:Answer}} """) model_focus = genanki.Model( model_id=uniqueid1 + 2, name="Basic (type in the answer) (Jim; Focus)", fields=model.fields, templates=[ { "name": model.templates[0]["name"], "qfmt": focus_format, "afmt": focus_format + """
""", } ], css=model.css, ) decks = {} image_filenames = [] for word in all_words: # FIXME: this is partial if word.group == "HSK1_027": continue if os.path.exists(word.hint_filename()) and os.path.exists(word.image_filename()): if word.group not in decks: decks[word.group] = genanki.Deck(uniqueid2 + len(decks), "quiz::" + word.group.replace("_", "::")) decks[word.group + "_learn"] = genanki.Deck(uniqueid2 + len(decks), "learn::" + word.group.replace("_", "::")) decks[word.group + "_focus"] = genanki.Deck(uniqueid2 + len(decks), "focus::" + word.group.replace("_", "::")) deck = decks[word.group] deck_learn = decks[word.group + "_learn"] deck_focus = decks[word.group + "_focus"] with open(word.hint_filename()) as file: response = json.load(file) content = json.loads(response["choices"][0]["message"]["content"]) image = f"" chinese = content["sentence"].replace(word.hanzi, f"{word.hanzi}") chinese_blank = content["sentence"].replace(word.hanzi, "   ") english = content["sentence_translation"] definition = content["better_definition"] image_filenames.append(word.image_filename()) deck.add_note( genanki.Note(model, [chinese, chinese_blank, english, definition, image, word.hanzi]) ) deck_learn.add_note( genanki.Note(model_learn, [chinese, chinese_blank, english, definition, image, word.hanzi]) ) deck_focus.add_note( genanki.Note(model_focus, [chinese, chinese_blank, english, definition, image, word.hanzi]) ) package = genanki.Package([deck for name, deck in sorted(decks.items())]) package.media_files = image_filenames package.write_to_file("hsk1.apkg")