with open("questions/grammarPickle.pkl", 'rb') as f: dictionary = pickle.load(f) except FileNotFoundError: dictionary = {} return dictionary def save(): with open("questions/grammarPickle%s.pkl" % time.asctime().replace(' ', '_').replace(':','-'), 'wb') as f: pickle.dump(dictionary, f, -1) with open("questions/grammarPickle.pkl", 'wb') as f: pickle.dump(dictionary, f, -1) dictionary = load() vocab = voc.get_vocab() inter = [q for q in vocab if (isinstance(q, voc.VocabKtoSQuestion) or isinstance(q, voc.VocabRtoSQuestion))] revMap = defaultdict(lambda :defaultdict(set)) for q in inter: for entry in q.entries: for sense in q.entries[entry]: pos = frozenset(entities[pos] for pos in sense.poss) for gloss in sense.glosses: gloss = EnglishVerifier.normalize(gloss) revMap[gloss][pos].add(entry[0]) revMap.default_factory = None def display_from_revMap(word):
dictionary = {} return dictionary def save(): with open( "questions/grammarPickle%s.pkl" % time.asctime().replace(' ', '_').replace(':', '-'), 'wb') as f: pickle.dump(dictionary, f, -1) with open("questions/grammarPickle.pkl", 'wb') as f: pickle.dump(dictionary, f, -1) dictionary = load() vocab = voc.get_vocab() inter = [ q for q in vocab if (isinstance(q, voc.VocabKtoSQuestion) or isinstance(q, voc.VocabRtoSQuestion)) ] revMap = defaultdict(lambda: defaultdict(set)) for q in inter: for entry in q.entries: for sense in q.entries[entry]: pos = frozenset(entities[pos] for pos in sense.poss) for gloss in sense.glosses: gloss = EnglishVerifier.normalize(gloss) revMap[gloss][pos].add(entry[0]) revMap.default_factory = None
def get_questions(): records = get_freq() components = get_components() kana = kanjiq.get_kana() kanji = kanjiq.get_kanji() vocab = vocabq.get_vocab() grammar_words = grammarq.get_words() wordlist = get_wordlist() wordlist_rank = {r:i for i, r in enumerate(wordlist)} freq_rank = {r.word:r.count for r in records if r.word not in grammarq.grammar_words} def rank(word): return (-wordlist_rank[word] if word in wordlist_rank else -len(wordlist), freq_rank[word] if word in freq_rank else 0) vocab.sort(key=lambda q:rank(q.head), reverse=True) kanji = {q.head:q for q in kanji} grammar_words = sorted(grammar_words, key=lambda q:rank(q.primary_translation), reverse=True) grammar_words = grammarq.get_grammar(grammar_words) grammar_words = {q.primary_translation:(q, concepts) for q, concepts in grammar_words} #print("Got materials.") used = set() questions = [] def add(q): used.add(q) questions.append(q) def dfs(c): if c not in kanji: return # skip non-kanji radicals if kanji[c] in used: return # done, or in progress used.add(kanji[c]) if c in components: for c2 in components[c]: dfs(c2) questions.append(kanji[c]) for q in kana: add(q) kana = set(q.head for q in kana) for q in vocab: if q.head in kanji and isinstance(q, vocabq.VocabKtoSQuestion): # prune duplicated kanji and vocabKtoS questions for value in q.verifier.values: if value not in kanji[q.head].answers: kanji[q.head].answers.append(value) continue if not all(c in kana or c in kanji for c in kanjiq.iterate_with_yoon(q.head)): # Uses characters we don't teach, so skip continue for c in kanjiq.iterate_with_yoon(q.head): if c in kanji: dfs(c) # teach kanji and components first add(q) if (q.head in grammar_words and (isinstance(q, vocabq.VocabKtoRQuestion) or isinstance(q, vocabq.VocabRtoSQuestion))): grammar_question, grammar_concepts = grammar_words[q.head] #print("Word", len(questions)) add(grammar_question) for concept in grammar_concepts: #print("Concept", len(questions)) add(concept) return questions