On Oct 30 at 16:23 -0700, Lindsey wrote: > How should I go about learning words with multiple meanings? The 2 > ways that come to mind are either have all the meanings in a single > answer (which violates the minimum information rule), or create a > single card for each answer, but with no context I'll have no idea > which meaning is the current one so I'll have to cycle through > possible correct answers until I get the right one.
I concur with the other recommendations in this thread, but I've
sometimes also found it useful to include dictionary definitions from
one word to several meanings.
I've been using the attached patch (for Mnemosyne 1.x) that adds a
special <next> tag for separating the meanings:
e.g.
Q: foreign word
A: meaning B<next>
meaning C<next>
meaning D
which creates four cards:
Q: meaning B A: foreign word
Q: meaning C A: foreign word
Q: meaning D A: foreign word
Q: foreign word A: meaning B
meaning C
meaning D
It's more pragmatic than perfect. It has the following limitations:
1. It doesn't work properly with the convention of id / inverse_id
that is used in the Mnemosyne scheduler to space similar cards.
2. If you use the pronunciation field for anything other than
pronunciation, then manual edits may be required after adding.
3. It works with the duplicate+merge feature of Mnemosyne but only if
the card texts match exactly. In practice, some manual cleanup is
often required to merge similar cards.
4. As stated in the other posts, and well discussed on the Piotr
Wozniak's site, it's much harder to memorise lists than pairs.
5. As stated in other posts, and the rule on sites like
wordreference.com, context is extremely important, both for
memorisation and also for use.
All that said, I find it saves me a lot of time.
Tim.
Index: branches/1.x-branch/mnemosyne/mnemosyne/pyqt_ui/add_items_dlg.py
===================================================================
--- branches/1.x-branch/mnemosyne/mnemosyne/pyqt_ui/add_items_dlg.py (revision 642)
+++ branches/1.x-branch/mnemosyne/mnemosyne/pyqt_ui/add_items_dlg.py (working copy)
@@ -278,8 +278,32 @@
return new_item
+ ##########################################################################
+ #
+ # add_multiple
+ #
+ # Utility function, that attempts to add a list of questions, all
+ # having the same answer. It returns a list of questions that were
+ # not added.
+ #
+ ##########################################################################
+ def add_multiple(self, grade, qlist, a, cat_name, id_prefix):
+ count = 0
+ failed = []
+ id = id_prefix
+
+ for q in qlist:
+ if len(qlist) > 1: id = '%s-%d' % (id_prefix, count)
+
+ added = self.check_duplicates_and_add(grade, q.strip(), a,
+ cat_name, id)
+ if not added: failed.append(q)
+ count = count + 1
+
+ return failed
+
##########################################################################
#
# new_item
@@ -303,20 +327,25 @@
else:
if q == "":
return
+
+ next_re = re.compile(r'<next\s*/?>', re.IGNORECASE)
+ alist = re.split(next_re, a)
+ afailed = []
if get_config("3_sided_input") == False:
- orig_added = self.check_duplicates_and_add(grade,q,a,cat_name)
+ orig_added = self.check_duplicates_and_add(grade,q,
+ ''.join(alist),cat_name)
rev_added = None
if orig_added and self.addViceVersa.isOn():
- rev_added = self.check_duplicates_and_add(grade,a,q,\
- cat_name,orig_added.id+'.inv')
+ afailed = self.add_multiple(grade, alist, q, cat_name,
+ orig_added.id+'.inv')
- if self.addViceVersa.isOn() and orig_added and not rev_added:
+ if self.addViceVersa.isOn() and orig_added and len(afailed) > 0:
# Swap question and answer.
- self.question.setText(a)
+ self.question.setText('<next>'.join(afailed))
self.answer.setText(q)
self.addViceVersa.setChecked(False)
@@ -329,11 +358,11 @@
else: # 3-sided input.
- i = self.check_duplicates_and_add(grade,q,p+'\n'+a,cat_name)
+ i = self.check_duplicates_and_add(grade,q,
+ p+'\n'+''.join(alist),cat_name)
if i:
- self.check_duplicates_and_add(grade,a,q+'\n'+p,cat_name,
- i.id+'.tr.1')
+ self.add_multiple(grade,alist,q+'\n'+p, cat_name,i.id+'.tr.1')
self.question.setText("")
self.pronunciation.setText("")
signature.asc
Description: Digital signature
