Example #1
0
        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):
Example #2
0
        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
Example #3
0
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