feat: Don't forget about the adverbs

This commit is contained in:
Alexander Polynomdivision 2018-10-02 15:49:53 +02:00
parent 2971069954
commit d6f5ef4cc5
4 changed files with 47 additions and 14 deletions

View File

@ -29,6 +29,10 @@ export interface IAdjektivData {
endung_n: string; endung_n: string;
}; };
export interface IAdverbData {
grundform: string;
};
export interface IVocab { export interface IVocab {
// If a word has multiple meanings // If a word has multiple meanings
german: string[]; german: string[];
@ -36,7 +40,7 @@ export interface IVocab {
mnemonic?: string; mnemonic?: string;
type: VocabType; type: VocabType;
latin: INomenData | IVerbData | IAdjektivData; latin: INomenData | IVerbData | IAdjektivData | IAdverbData;
// This number is unique across all vocabulary items // This number is unique across all vocabulary items
id: number; id: number;
@ -152,9 +156,14 @@ export function vocabToReviewCard(vocab: IVocab): IReviewCard[] {
qtype: ReviewQType.ADJ_ENDUNG_N, qtype: ReviewQType.ADJ_ENDUNG_N,
id: vocab.id, id: vocab.id,
}]; }];
default: case VocabType.ADVERB:
// TODO: Remove after removing Adverbien return [{
return []; // Latin -> German
question: vocab.latin.grundform,
answers: vocab.german,
qtype: ReviewQType.GERMAN,
id: vocab.id,
}];
} }
} }

View File

@ -129,7 +129,7 @@ const LevelPageWithRouter = withRouter(
<b>Endung neutrum:</b> {aData.endung_n} <b>Endung neutrum:</b> {aData.endung_n}
</Typography> </Typography>
</div>; </div>;
default: case VocabType.ADVERB:
return <div />; return <div />;
} }
} }

View File

@ -21,7 +21,9 @@ import CloseIcon from "@material-ui/icons/Close";
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
import { IVocab, IReviewCard, vocabToReviewCard, reviewQTypeToStr } from "../models/vocab"; import {
IVocab, IReviewCard, vocabToReviewCard, reviewQTypeToStr, VocabType
} from "../models/vocab";
import { ReviewType, IReviewMetadata } from "../models/review"; import { ReviewType, IReviewMetadata } from "../models/review";
import { levW } from "../algorithms/levenshtein"; import { levW } from "../algorithms/levenshtein";
@ -139,10 +141,6 @@ const ReviewPageWithRouter = withRouter(
}; };
} }
vocabFromId = (id: number): IVocab | {} => {
return this.vocab.find((el) => el.id === this.props.current.id);
}
// When a vocabulary item has been answered, we need to update // When a vocabulary item has been answered, we need to update
// the group's SuperMemo2-data. // the group's SuperMemo2-data.
// We update based on the following State-Machine: (C = Correct; W = Wrong) // We update based on the following State-Machine: (C = Correct; W = Wrong)
@ -275,12 +273,25 @@ const ReviewPageWithRouter = withRouter(
const { question, qtype } = this.props.current; const { question, qtype } = this.props.current;
const questionTitle = `${question} (${reviewQTypeToStr(qtype)})`; const questionTitle = `${question} (${reviewQTypeToStr(qtype)})`;
// TODO/NOTE: This assumes that each vocabulary item gets mapped to
// exactly 3 review cards // NOTE: This assumes that adverbs get mapped to only 1 card,
// while every other type of vocabulary gets mapped to
// exactly 3 cards each.
// NOTE: The 'numCards === 0 ?' is neccessary as (for some reasdn) numCards // NOTE: The 'numCards === 0 ?' is neccessary as (for some reasdn) numCards
// starts of by being 0, which results in progress === -Inifinity. // starts of by being 0, which results in progress === -Inifinity.
// That looks weird as the user sees the progressbar jump. // That looks weird as the user sees the progressbar jump.
const numCards = this.vocab.length * 3; // NOTE: The arrow function needs the ': number' annotation as TS
// will then deduce the type of acc and curr to be '1|3',
// leads to compiler warnings, as a, b element {1, 3} is not
// element {1, 3}.
const numCards = this.vocab.map((vocab): number => {
if (vocab.type === VocabType.ADVERB) {
return 1;
} else {
return 3;
}
}).reduce((acc, curr) => acc + curr);
const progress = numCards === 0 ? ( const progress = numCards === 0 ? (
0 0
) : ( ) : (

View File

@ -7,6 +7,7 @@ import pymongo
TYPE_NOUNS = 0 TYPE_NOUNS = 0
TYPE_VERBS = 1 TYPE_VERBS = 1
TYPE_ADJECTIVES = 2 TYPE_ADJECTIVES = 2
TYPE_ADVERB = 3
PATH_TO_VOCAB = "../data/vocab" PATH_TO_VOCAB = "../data/vocab"
@ -92,7 +93,14 @@ def csv_to_vocab(filename, type, from_id):
latin["endung_f"] = endung_f latin["endung_f"] = endung_f
latin["endung_n"] = endung_n latin["endung_n"] = endung_n
elif (type == TYPE_ADVERB):
# Adverb
bedeutungen = [row[1]]
if (row[2] != ""):
bedeutungen.append(row[2])
if (row[3] != ""):
bedeutungen.append(row[3])
# TODO: Hints and mnemonics # TODO: Hints and mnemonics
vocab.append({ vocab.append({
"id": id, "id": id,
@ -130,6 +138,11 @@ adj, last_id = csv_to_vocab("Adjektive.csv", TYPE_ADJECTIVES, last_id)
vocab += adj vocab += adj
id = last_id id = last_id
log("Adverbs...", tabs=1)
adj, last_id = csv_to_vocab("Adverbien.csv", TYPE_ADVERBS, last_id)
vocab += adj
# Connect to the database # Connect to the database
log("Inserting vocabulary into database") log("Inserting vocabulary into database")
log("Connecting...", tabs=1) log("Connecting...", tabs=1)