vix86 Wrote:headphone_child Wrote:...That was me remembering that sentence instead of the meaning of the word. If this sentence was different each time...
...I bolded and underlined the keyword in the sentence. It stood out better and I eventually trained my self to hone in on that first. This helped me stop memorizing the sentence and put the word first.
...
That being said, that technical challenge is the main thing making this very unlikely. A lot of stuff probably won't line up semantically when choosing at random.
I suggest you try out the new Morph Man v3.3. There are three relevant features that you might be interested in.
1) As per vix86's underlining suggestion, it can automatically highlight the unknown word in a sentence. In fact, you can arbitrarily style morphemes according to maturity level in category (eg. seen but not known, known but not mature, etc) or the interval number itself (eg. 4, 7, 19.3 days, etc) with CSS.
2) Create a filtered deck for "tag:comprehension -is:review", which will get you m+0 sentences you're not actively studying and burn through some to practice recognizing words and grammar points in different contexts.
3) While reviewing a sentence with a "focus morpheme" (ie. the single unknown in a k+1 sentence), hit "L" and test yourself against the "alternative" sentences, which are other k+1 sentences that also contain the particular vocab you're focusing on.
What you said you wanted is essentially a more automated #3, which can be accomplished by something like:
Code:
from anki import sched
import random
def my_getRevCard( self, _old ):
# 1) get next card according to anki's normal method
card = _old( self )
# 2) get it's focus morpheme if it has one
try:
focus = card.note()[ 'focusMorph' ]
except KeyError:
focus = None
# 3) if it has one, we look for alternatives
if focus:
searchQuery = "focusMorph:%s -is:review" % focus
alternativeCards = mw.col.findCards( searchQuery )
# 4) if it has alternatives, pick one randomly to replace it
if alternativeCards:
card = random.choice( alternativeCards )
return card
sched.Scheduler._getRevCard = wrap( sched.Scheduler._getRevCard, my_getRevCard, 'around' )
Note the above isn't a full solution, you still need to modify what happens when you answer a card so that it modifies the scheduling of the original card instead of the one you replaced it with, but that shouldn't be too difficult.
Edited: 2013-03-01, 1:32 pm