Mass Immersion Approach

Comprehensive Guide to MorphMan

Intro

MorphMan is an Anki add-on that keeps track of what words you know and uses that to reorder your new cards into an optimal order for learning.

You tell MorphMan which decks/cards/fields you want it to look at, and it goes through and parses all the text in those fields into “Morphs” (basically, words). It assumes you already know all the Morphs contained within the cards you’ve learned. In this way, it creates a database of your current knowledge and uses that database to analyze how many unknown Morphs are contained within each of your new cards.

It then reorders your new cards based on difficulty, so that you see the easiest cards (i.e., the cards with the fewest number of unknown Morphs) first. MorphMan only reorders your new cards; it doesn’t touch the scheduling of cards you’ve already learned. You can tell MorphMan to re-analyze and reorder your cards as often as you like. This allows you to always learn new cards in a 1T fashion.

MorphMan is useful for use with subs2srs collections, as it can do the work of finding all of the 1T sentences in an episode for you. It is also ideal for learning with a pre-made deck alongside sentence mining, as any material contained within the pre-made deck that you’ve already learned through mining will automatically be skipped, saving you time.

In addition to its main feature of reordering cards, MorphMan can also do the following:

  • Automatically add specific tags and fill specific fields to provide information about the difficulty of cards.
  • Analyze the readability of target-language texts based on your current knowledge.
  • Create frequency lists from target-language texts.
  • Edit subtitle files to show/hide words based on your current knowledge.

Morphman was created for use with Japanese but has full support for Chinese as well. MorphMan also has limited support for any language written with spaces between words, and languages that use CJK characters.

Although MorphMan can be used on both Anki 2.1 and Anki 2.0, this guide will focus on the Anki 2.1 port. Because the two versions differ in several areas, some information in this guide may not apply to the Anki 2.0 version.

MorphMan has passed through the hands of multiple programmers since its creation in 2011, and unfortunately, it’s a bit of a mess in its current form. This guide is an attempt to explain how MorphMan for Anki 2.1 functions as simply as possible. Feel free to skip straight to Installation or Setup, and refer back to the Glossary whenever clarification is needed.

The following video demonstrates how to set up the basic features of MorphMan:

Glossary

1T Sentence

Abbreviation for “one-target sentence”. A sentence that contains one unknown word or grammar structure. The unknown word or structure is referred to as the “target word” or “target structure”.

Learning through 1T sentences can be thought of as “picking low-hanging fruit”. It makes the target word/structure easy to understand and retain. As you continue to learn, sentences that were previously one-target will become zero-target, and sentences that were previously multi-target will become one-target. In this way, one-target sentences can take you all the way to fluency.

You can learn more about the idea here.

Morph

Short for “morpheme.” A morpheme is “a meaningful morphological unit of a language that cannot be further divided (e.g. in, come, -ing, forming incoming) [The Oxford English Dictionary]”. In the context of MorphMan, a Morph is basically a word.

Database (DB)

A list of Morphs, which are saved in a “.db” file. MorphMan uses seven different databases to keep track of what you know and how well you know it. Four of the seven are necessary for MorphMan to function and are generated automatically. The other two are for additional features and must be manually created by the user. All seven databases go in the following directory: C:\Users\[user]\AppData\Roaming\Anki2\[profile_name]\dbs.

The seven databases are:

  • all.db: automatically generated; contains all Morphs contained within specified fields + all Morphs that have been imported from external.db.
  • mature.db: automatically generated; contains all mature Morphs.
  • known.db: automatically generated; contains all known Morphs.
  • seen.db: automatically generated; contains all seen Morphs.
  • priority.db: manually generated using the Database Manager; cards containing Morphs in this database will be prioritized over cards that would otherwise have the same MorphMan Index.
  • frequency.txt: manually generated; functions as a frequency list. Cards with Morphs positioned higher on this list will be prioritized over cards with Morphs positioned lower.
  • external.db: manually generated using the Database Manager; user-managed database that tracks outside-Anki knowledge. MorphMan assumes that all Morphs in this database are mature.

Mature

A card that has an interval of at least 21 days. Also, a Morph that is contained within the specified field of a “mature” card. Morphs added through “external.db” are automatically counted as mature. The threshold of when a card gets counted as “mature” can be changed in config.py.

Known

A card that has been reviewed. Also, a Morph that is contained within the specified field of a “known” card. Same as a “seen” card/Morph. The threshold of when a card gets counted as “known” can be changed in config.py. If you change the threshold from the default of 10 seconds to 24 hours, only cards that have graduated from the learning queue will be counted as “known”, thereby differentiating “known” and “seen” cards/Morphs.

Seen

A card that has been reviewed. Also, a morph that is contained within the specified field of a “seen” card. With the default config.py settings, “seen” cards/Morphs will also be treated as “known” cards, even before graduating from the learning queue.

Unknown

A Morph that has not been “seen”.

Unmature

A Morph that is “known”, but is still not “mature”.

Focus Morph

The unknown Morph in a sentence with one unknown Morph.

MorphMan Index (MMI)

MorphMan sorts your cards in accordance with their MorphMan Index. MorphMan Index is based on the number of unique unknown Morphs, the length of the sentence, and the usefulness score of the unknown Morphs.

The formula is:
MMI = (100,000*N_k) + (1,000*lenDiff ) + (99,999 - min( 99,999 , usefulness )), where:

  • MMI = MorphMan Index
  • N_k = number of unique unknown Morphs
  • lenDiff = min( 9, length_of_sentence over ‘max good sentence length’ or under ‘min good sentence length’ )
  • usefulness =
    • ‘frequency.txt weight scale’*(frequency_len – frequency_index) +
    • priority_weight +
    • verb_bonus +
    • avg_freq_of_focus_morpheme_in_all_cards +
    • reinforce_weight

In other words, cards are first sorted by the number of unknown Morphs they contain. This means that 0T cards (or what MorphMan calls “comprehension” and “fresh vocab” cards) will be at the very top (although in MorphMan Preferences you can tell MorphMan to always skip these cards). Then 1T cards, then MT cards.

Cards with the same number of unknown Morphs are then further sorted using a point system. The more points a card has, the higher it will be sorted. Points are calculated using the following criteria:

  • Cards with sentences that are too long or too short are penalized. For each Morph under the “minimum good sentence length” or above the “maximum good sentence length”, 1,000 points are deducted. There is a maximum penalty of 9,000. By default, the “minimum good sentence length” is 2 and the “maximum good sentence length” is 8. This can be changed in config.py.
  • Cards with unknown Morphs contained in frequency.txt are boosted proportionally to how high their position is in frequency.txt. The formula for determining the boost is, for each unknown Morph contained in frequency.txt, “‘total number of words in frequency.txt’ minus ‘position in frequency.txt’, times ‘frequency weight'”. The default the “frequency weight” is 10. This can be changed in config.py.
  • Cards with Morphs contained in priority.db are boosted. By default, for each unknown Morph contained in priority.db, 200 points are added. This amount can be changed in config.py.
  • If at least one of the unknown Morphs in a card is a verb, the card is given a flat boost. By default, the boost is 100 points. This amount can be changed in config.py.
  • Cards are boosted proportionally to how frequently their unknown Morphs show up within the portion of your Anki collection that MorphMan looks at. By default, for every occurrence of the unknown Morph in your collection, 5 points are added. This can be changed in config.py. If a card contains multiple unknown Morphs, the boost is calculated using the average number of occurrences of each unknown Morph.
  • Cards with unmature (“known” but not yet “mature”) Morphs are boosted. The boost is calculated by dividing the “reinforce new vocab weight” by the interval of the most mature card containing that Morph. For Morphs whose most mature card has an interval of less than 1 day, .5 is used in place of the interval. If a card contains multiple unmature Morphs, the points for each Morph are added up. The default “reinforce new vocab weight” is set to 5. This can be changed in config.py.

Installation

You can download MorphMan for Anki 2.1 here. The Anki 2.0 version can be found here.

In order to keep track of what you know, MorphMan uses a parsing dictionary to divide up sentences into individual words. In the case of Japanese, MorphMan doesn’t come with its own parsing dictionary, and the user must install one separately in order for MorphMan to function. For languages other than Japanese, parsing dictionaries comes pre-packaged with MorphMan.

Note: parsing dictionaries are only for parsing and can’t actually be used to obtain definitions for words.

The most advanced Japanese parsing dictionary currently available for MorphMan is the MeCab UniDic dictionary, which you can add to MorphMan simply by installing this add-on. Once the add-on is installed, simply restart Anki and MorphMan will automatically start using MeCab UniDic for parsing.

The MIA Japanese or Japanese Support add-ons also come with pre-packaged Japanese parsing dictionaries. If either one of these is installed, MorphMan will be able to use their parsing dictionary to function. It’s important to note that the dictionaries packaged with MIA Japanese and Japanese Support are not as advanced as MeCab UniDic, and will produce inferior parsing results.

MeCab UniDic and MIA Japanese are only available for Anki 2.1, so Japanese Support is the only option available to Anki 2.0 users.

If you’re currently a MorphMan user who relies on either MIA Japanese’s or Japanese Support’s parsing dictionary, simply by installing the MeCab UniDic add-on, MorphMan will automatically begin prioritizing MeCab UniDic over the others. It’s important to note that after upgrading to MeCab UniDic, it’s a good idea to re-generate your MorphMan database from scratch using the new dictionary. In order to do this, simply delete your all.db and then run Recalc.

Setup

After installing MorphMan, you will find that the following changes have been made to Anki:

  • There is now “K0V0” to the right of the “Sync” button. It looks like a button, but it’s not. The 0’s to the right of the “K” and “V” represent how many Morphs you know. It can be motivating to watch these numbers increase over time. For languages other than Japanese, the two numbers will always be the same; for Japanese, they will slightly differ.
  • The “K” stands for Known, and is the most accurate representation of how many unique Morphs you know. For example, 余り, あまり, あんま, and あんまり will all be counted as the same Morph. The “V” stands for Variation. For Japanese, it tends to count different forms (or orthography Variations) of the same word as unique Morphs. For example, 余り, あまり, あんま, and あんまり will all be counted as different Morphs. Because of this, the “V” count will be artificially larger than your true number of unique known Morphs.
  • Seven new options under “Edit” tab in the browser: “MorphMan: View Morphemes”, “MorphMan: Extract Morphemes”, “MorphMan: Batch Play”, “MorphMan: Mass Tagger”, “MorphMan: Learn Now”, “MorphMan: Browse Morphs”, and “MorphMan: Already Known Tagger.” What each of these features does will be explained later in the guide.
  • Four new options in the “Tools” menu: “MorphMan Recalc”, “MorphMan Preferences”, “MorphMan Database Manager”, and “MorphMan Readability Analyzer.” All you really need to worry about “Recalc” and “Preferences.” “Preferences” is where you configure everything, and “Recalc” is kind of like the “go!” button. “Database Manager” has some useful features, but isn’t crucial to MorphMan’s main functions; all the important components of database management are done for you automatically. “Readability Analyzer” lets you test how comprehensible texts are likely to be based on how many known and unknown words they contain.

Although you control most of MorphMan’s settings in “Preferences”, there are some other options that are controlled in “config.py”, a file that automatically gets downloaded into the following directory when installing MorphMan: C:\Users\[user]\AppData\Roaming\Anki2\addons21\900801631\morph\config.py (on Anki 2.0: C:\Users\[user]\AppData\Roaming\Anki2\addons\morph\config.py). The default config.py settings are just fine, so you don’t need to mess with them if you don’t want to. But for those interested, I will be explaining how to tinker with it later in the post.

All of this might sound very complicated at first, but really, all you need to get started is to configure “Preferences”, make a small adjustment to your note-types, and then run “Recalc.”

MorphMan Preferences

Note Filter

This is where you tell MorphMan which fields of which cards you want it to analyze. If you skip this step, MorphMan will have nothing to work with and not function. Whenever MorphMan talks about your “collection”, really it only means the portions of your collection that you specify in the Note Filter.

The instructions listed are mostly self-explanatory. Note that if you uncheck “Modify?”, MorphMan will analyze the specified fields of cards (and update the database of learned/mature Morphs based on them), but won’t actually reorder them. If you’re on Windows 10, you may have to extend the entire “MorphMan Preferences” windows in order for the “Modify?” checkbox to appear. It may also let you type text next to the checkbox, but this is simply a glitch.

It’s important to note that if you have overlapping filters, whichever filter is listed first will take priority (hence the “Up” and “Down” buttons). For example, in the picture above, no cards with the “MIA Japanese” note type will be reordered, because the first filter, which takes priority, encompasses all “MIA Japanese” cards (and leaves “Modify?” unchecked).

In this example, in order to make “MIA Japanese” cards with the “Tango” tag be reordered, and “MIA Japanese” cards without the tag only be analyzed, the order of the two filters must be switched.

Extra Fields

MorphMan has the ability to auto-fill up to seven different fields with specific information about your cards. This will only apply to cards specified in the “Note Filter” tab. In the “Extra Fields” tab, you can customize the names of each of these seven fields. In order for MorphMan to auto-fill the fields, you have to add each corresponding field to your note-types.

The “Focus Morph” field is used in other features, so it must be added to your specified note-types for MorphMan to work properly. The other six fields are entirely optional; if you don’t want them, simply don’t add them to your note-type. MorphMan will update the contents of these fields after a Recalc.

The Six Fields are as follows:

  • Focus Morph: The unknown Morph in sentences with one unmature Morph. Cleared once all Morphs are mature. If a card is not 1T, this field will be left blank.
  • Unmatures: Comma-separated list of unmature Morphs.
  • Unknowns: Comma-separated list of unknown Morphs.
  • Unknown Frequency: Average of how many times the unknown Morphs appear in the specified portion of your collection.
  • MorphMan Index: Detailed explanation here. Roughly corresponds to the difficulty of the card. The ‘due’ time of card will be set to this value.
  • Unmatures Count: Number of unmature Morphs on this note.
  • Unknown Count: Number of unknown Morphs on this note.

Personally, I would only add “Focus Morph” in order to keep card templates as clean as possible.

Tags

As part of the process of sorting cards based on their difficult, MorphMan automatically adds and removes tags to the cards you specified in the “Note Filter” tab. In the “Tags” tab, you can customize the names of the different tags, as well as select if you want MorphMan to add all, or only the required minimum, of the possible tags to your cards.

The different tags are as follows:

  • Vocab note: Note that is 1T (contains one unknown Morph).
  • Fresh vocab note: Note that contains no unknown Morphs, but one or more unmature Morphs.
  • Comprehension note: Note that is 0T (contains only mature Morphs).
  • Not ready: Note that is MT (contains two or more unknown Morphs).
  • Already known: A tag that you can manually add to notes to tell MorphMan that you already know all the Morphs contained in the note. After a Recalc, MorphMan will add all the Morphs contained in notes with this tag to the database of Mature Morphs. “K” (for Known) is the hotkey for adding this tag to a card while reviewing or in the browser.
  • Priority: Note contains a Morph that is contained in priority.db. Will be ordered higher than Notes that would otherwise have the same MorphMan Index.
  • Too Short: Sentence in the specified field is too short. The threshold can be edited in config.py.
  • Too Long: Sentence in the specified field is too long. The threshold can be edited in config.py.
  • Frequency: Note contains a Morph that is contained in frequency.txt.

By unchecking the “Add tags even if not required” box, only the “Vocab”, “Fresh Vocab”, “Comprehension” and “Not Ready” tags will be added to cards.

Note that, although MorphMan will only ever change the scheduling of new cards, tags will still be added to cards you’ve already learned. This means that, for example, the “Comprehension” tag will be added to cards you know, signifying that they are 0T. But this doesn’t mean that those cards will be skipped when you review. Only new cards with the “Comprehension” tag will be skipped.

Also note that, with the exception of the “Already known” tag, manually adding tags to cards will not affect MorphMan. For example, let’s say that MorphMan said a certain card is 1T, but in reality, it’s MT. Even if you manually add the “Not ready” tag to this card, MorphMan will simply ignore this and remove the tag after the next Recalc.

General

Because the MorphMan Index is based on the expected difficulty of cards, 0T (“comprehension”/”fresh vocab”) cards end up being prioritized before 1T (“vocab”) cards. Because studying 0T sentences is mostly a waste of time, you are given the option to have MorphMan automatically skip over “comprehension” and “fresh vocab” cards, as well as “vocab” cards whose Focus Morph was already studied that day. In other words, by checking off all three of these boxes in the general tab, you can have MorphMan only show you 1T cards.

“Ignore everything contained within [] brackets” is an option intended for use with the MIA Japanese add-on. MIA Japanese adds readings and pitch accents directly into the fields of cards in the form of a simple syntax involving brackets. For example, if readings and pitch accents were generated for “走る”, it would appear as “走[はし;k2]る” in the field. In order for MorphMan to correctly identify this as “走る”, it must ignore brackets and the contents of brackets. So, make sure to check this box if you’re using the MIA Japanese add-on.

Note-Types

Like I explained in the Extra Fields portion of the previous section, you need to add (at least) the “Focus Morph” field to all the note-types that MorphMan will be analyzing.

MorphMan-specific CSS

While you’re editing your note-types, there is also some MorphMan-specific CSS that you can use to automatically color-code sentences based on the learning status of their Morphs. This MorphMan-specific CSS will only work on the desktop version of Anki; on mobile, text will continue to appear in its original color.

To add the MorphMan-specific CSS, in one of the HTML sections, choose which field you want to add color-coding to, and add morphHighlight: inside of the curly brackets, before the field name. Then, add the following to the bottom of the CSS section:

[mtype=unknown] { color: red; }
[mtype=seen] { color: orange; }
[mtype=known] { color: green; }
[mtype=mature] { color: blue; }
[priority=true] { text-decoration: underline; }
[frequency=true] { text-decoration: underline; }

It’s also possible to use “background-color” instead of “color”, in order to reserve “color” for the color-coding of pitch accent. Below is our personal coloring scheme (unknown = yellow, seen = orange, known = green, mature = gray):

[mtype=unknown] { background-color: #ffff99; }
[mtype=seen] { background-color: #ffd1b3; }
[mtype=known] { background-color: #b3e6cc; }
[mtype=mature] { background-color: #f2f2f2; }

Unfortunately, the MorphMan-specific CSS is not compatible with the Japanese Support add-on’s “furigana” feature or any of the MIA Japanese add-on’s display types.

So, in order to use the MorphMan-specific CSS in combination with one of these add-ons, you will need to have two sentence fields on your cards: one for displaying furigana/pitch accent coloring, and another for displaying MorphMan-specific CSS:

Because of this hassle, we recommend simply not bothering with the MorphMan-specific CSS. Instead, consider having the “Target” field displayed on the back of your cards, so you can be sure what the target word of the sentence is.

If you do choose to use the MorphMan-specific CSS, we recommend only putting it on the back of cards. The reason for this is that, in order to get the best results, you want your SRS experience to simulate real life as much as possible. When reading in real life, you aren’t going to be told which words you know and which you don’t. So, it makes sense to have your sentence cards reflect this.

If you still don’t see any color after adding the MorphMan CSS, don’t worry. In order for it to take effect, you first need to run “Recalc”, which will and have MorphMan analyze your collection and create the database it will use to color your cards.

frequency.txt

MorphMan allows users to manually import a frequency list, which MorphMan will use to prioritize cards with high-frequency Focus Morphs.

In order for MorphMan to recognize a frequency list, it must be formatted as a text file titled “frequency.txt”, which contains one word on each line. Once you place a “frequency.txt” file in the database folder, MorphMan will automatically begin using it to sort cards next time you run Recalc.

Please see the MorphMan Index section to understand exactly how adding a frequency list affects MorphMan’s sorting algorithm.

It’s important to note that there are two factors that influence how heavily frequency is weighted in MorphMan’s overall algorithm: “frequency weight” (a value specified in config.py) and frequency list length. When frequency list length is equal, the greater the “frequency weight”, the more heavily frequency will be weighted in the overall algorithm. The default “frequency weight” is 10, but can be changed in config.py. Additionally, assuming “frequency weight” is equal, the longer the length of the frequency list, the more heavily frequency will be weighted in the overall algorithm.

Due to the way MorphMan’s algorithm is structured, if frequency is weighted too heavily, cards that are too long or too short (but have high-frequency Focus Morphs) could potentially be ranked above cards that are the ideal length. This is problematic because sentences that are excessively long or short are difficult to learn from.

In order to ensure that this doesn’t happen, we recommend dividing 10,000 by your frequency list length, and setting that as your “frequency weight”. For example, if you’re using a frequency list that’s 1k words long, set your “frequency weight” to 10 (10k / 1k = 10). If you’re using a frequency list that’s 10k words long, set your “frequency weight” to 1 (10k / 10k = 1).

In general, longer frequency lists are preferable, as they provide more coverage. That said, it’s also important to take into account the fact that longer frequency lists will make running Recalc take longer.

You can download a 20k word frequency.txt for Japanese here. You can download a 20k word frequency.txt for Chinese here. The Japanese list was created from all of the Japanese subtitles on Netflix, and the Chinese list was created from the BLCU Chinese Corpus frequency list. When using these frequency lists, set your “frequency weight” to .5.

You can also use the Readability Analyzer to generate your own original frequency.txt from target-language text.

MorphMan Recalc

Once you have set up “MorphMan Preferences” and configured your note-types, all you have to do is run “Recalc” and you are ready to go. “Recalc” stands for “recalculation”, and is basically the command that tells MorphMan to work all its magic. When you run Recalc, MorphMan will do the following:

  • Go through the specified portion of your collection and generate/update the “all.db“, “mature.db“, “known.db” and “seen.db” databases.
  • Merge the “external.db” database with the four databases mentioned above.
  • Update MorphMan-related fields and tags, as specified in “Preferences.”
  • Reorder your new cards based on their MorphMan Index.

Basically, after learning 1T cards in a repping session, cards that were previously 1T will have become 0T, and cards that were previously MT will have become 1T. When you run Recalc, MorphMan will go through your collection, recalculate the difficulty of your cards based on your new knowledge, and reorder your new cards in a way that’s optimal for the new you: the you who knows more than you did yesterday.

You can run Recalc as often as you like. It’s a good idea to run it at least once a day so that your new cards will always appear in the most optimal order. MorphMan will also prompt you to run Recalc after closing Preferences. The hotkey for Recalc is “Ctrl+M”.

Usage

MorphMan works by reordering your New Card Queue, so make sure that “Show new cards in order added” is selected in the New Cards tab of your option group settings. Although the setting is called “Show new cards in order added“, it really means “show new cards in the order of the New Card Queue.” If you select the other option, “Show new cards in random order”, you will bypass the New Card Queue and render MorphMan useless.

After MorphMan sorts your cards, there are two main ways to proceed. The first is to jump right into repping, and iron out any kinks in your cards as you go. The second is to go into the browser, look at your newly sorted New Card Queue, and touch things up ahead of time.

If you’re using a fully-loaded pre-made deck (which includes the definitions of words), the “polish while repping” option may work well. If you’re using MorphMan with subs2srs and need to add definitions manually, the “polish in the browser” option may be more practical.

If you mainly do your reps on AnkiWeb, Anki Mobile, or AnkiDroid, the “polish on the go” option will be very limited.

The MIA Dictionary add-on allows you to automate the process of adding definitions to 1T cards. This makes the “polish while repping” option much more viable for use with subs2srs decks as well. Currently, the MIA Dictionary add-on is in the beta stage of development, and is only available to MIA patrons. The add-on should be freely availed to the public within a few months.

In the Browser

The way to go about touching things up before repping is pretty straightforward. Go into the browser, and for the deck you want to work with, find all the new cards with the “Vocab” (1T) tag.

  • “deck:deck name” is the syntax for finding cards in a specific deck (if the deck name contains spaces, the whole thing needs to be in quotations).
  • “is:new” is the syntax for finding new cards.
  • “tag:TagName” is the syntax for finding cards with a given tag.
  • “-is:suspended” is the syntax to exclude suspended cards.

By going to “Filter… > Save Current Filter…”, you can save the search for easy access later.

Once you have pulled up all your new cards that are 1T, sort them by “Due”. This will allow you to see your newly sorted New Card Queue. From here, you can add definitions to cards that look good, and suspend or delete cards that don’t.

MorphMan also adds seven new options to the “Edit” tab of the browser:

  • MorphMan: View Morphemes (Ctrl+Shift+V): Brings up pop-up window showing the Morphs contained in the selected cards. Will use the field specified in the “Note Filter” tab of Preferences. If no field is specified, the first field of the card will be used.
  • MorphMan: Extract Morphemes (Ctrl+Shift+E): Extracts Morphs from selected cards and lets you save them to a .db file. Will use the field specified in the “Note Filter” tab of Preferences. If no field is specified, the first field of the card will be used.
  • MorphMan: Batch Play (Ctrl+Shift+P): Batch play all the media of the selected cards. Useful when you want to hear the same word pronounced in multiple contexts. Must add the name of the media field to config.py for it to work.
  • MorphMan: Mass Tagger (Ctrl+Shift+T): Allows you to add specific tags to all cards whose specified field contains a Morph found in a specified .db file (for example, add the tag “TagName” to all selected cards that contain a Morph found in filename.db).
  • MorphMan: Learn Now (Ctrl+Shift+N): Raises selected cards to the top of the learning queue.
  • MorphMan: Browse Morphs (L): Brings up all of the 1T cards that have the same Focus Morph as the selected card. By using the hotkey “L”, this feature can also be used while repping.
  • MorphMan: Already Known Tagger (K): Add’s the “Already known” tag to the selected cards. By using the hotkey “K” (for Known), this feature can also be used while repping. When used while repping, the card will also be buried.

While Repping

MorphMan also has some features that make cleaning up cards on the go a smooth process.

If “Skip card if focus morph was already seen today” is checked off in “MorphMan Preferences” > “General”, MorphMan will continue to modify the New Card Queue while you rep to ensure that you only see cards that are 1T.

For example, let’s say there are five 1T cards, all with the same Focus Morph, at the top of your New Card Queue. After you learn one of those cards while repping, the other four, which are now 0T, will automatically be buried. Whenever this kind of reordering happens while you’re reviewing, the following notice will appear:

Then, the next time you run Recalc, the cards that were automatically buried will be officially tagged 0T.

Obviously, you won’t be able to benefit from this feature when repping on mobile. An easy way to get around this is to simply manually bury any 0T cards that come up when reviewing. Let’s go back to the example of having five 1T cards with the same Focus Morph: after you learn the first card, the next four will become 0T. On mobile, those four 0T cards will still show up. By simply burying them manually, you can avoid them for the time being. Then later, once you run Recalc, MorphMan will automatically move them to the bottom of your New Card Queue.

Another possible situation is that a new 1T card comes up while repping, but you think you might have a better 1T card for the same Focus Morph in your deck, and you want to learn that one instead. While repping, you can press the hotkey “L” to open the browser and see all the other 1T cards in your collection with the same Focus Morph.

From here, you can select your preferred card, and go to “Edit > MorphMan: Learn Now” (hotkey: Ctrl+Alt+N). This will close the browser and make the selected card the next card you will see while repping. Once you rep that card, any cards with the same target morph will be automatically buried, as explained above.

Working with the Algorithm

Sometimes MorphMan will say a card is 1T when it’s actually 0T due to you knowing a Morph that wasn’t in your Anki collection.

If you come across one of these cards while repping, use the hotkey “K” (for Known) to add the “Already known” tag to the card and bury it. When you do this, any other cards with the same Focus Morph will automatically be buried as well. Next time you run Recalc, MorphMan will add all the Morphs contained in the card to your mature database. You can also use the hotkey “K” to add the “Already known” tag to cards in the browser as well.

On mobile, the “K” hotkey won’t be available. Instead, one option is to simply mark and bury cards manually while repping. Then later, once you have access to a desktop, add the “Already known” tag to all marked cards in bulk.

There will also be times when MorphMan thinks an 0T card is 1T due to incorrect parsing. Unfortunately, MorphMan isn’t that smart. It’s prone to making basic mistakes like thinking two different conjugations of the same word are actually two unique words (not that this happens every time; in general, MorphMan is pretty good with parsing conjugations).

The good news is that the longer you use MorphMan, the more data it will accumulate, and the more accurate it will become. So, try not to get discouraged if it seems especially mistake-prone at first. Whenever MorphMan fails to recognize a known word due to incorrect parsing, simply add the “Already known” tag, run Recalc, and add that specific form of the word to your database.

On the other hand, there will also be times when MorphMan says a card is 1T, but you aren’t able to understand it. There are two reasons this may occur. The first is that, due to incorrect parsing, MorphMan thinks you know a word that you don’t. Unfortunately, there is no easy way to remove a Morph from MorphMan’s database. Luckily, this really shouldn’t happen very often. When it does, your only real option is to suspend or delete the card.

The other, much more likely scenario is that you still aren’t able to understand a sentence deemed 1T despite it indeed containing only one unknown word. This is simply a fact of life when it comes to language learning. Sometimes you know all the words in a sentence, but still just can’t get what it means. It could be due to many things, such as one of the words having an alternate meaning you haven’t learned yet, or the grammar being too tricky for you parse at your current level. Basically, although the sentence appears to be 1T, it’s actually MT. By definition, any sentence that’s truly 1T shouldn’t be difficult to understand.

Whenever this happens, it’s always best to swiftly suspend or delete the card and move on. The whole point of MorphMan is to help you make fast progress by collecting low hanging fruit. If you spend time mulling over things that are above your level, you’re defeating the purpose of the add-on.

MorphMan Database Manager

The MorphMan Database Manager is a tool for manipulating database files. Its most important feature is creating database files out of text files. For example, let’s say you have a Japanese novel formatted as a text file. You could input this text file into the Database Manager, and have it output a database file with all the Morphs contained in the novel.

If you named this database file “external.db“, and placed it in C:\Users\[user]\AppData\Roaming\Anki2\[profile_name]\dbs, once you Recalc, MorphMan will add all of those Morphs to your mature.db database. If you do a lot of learning outside of MorphMan, this is a good way to catch MorphMan’s database up to your current knowledge.

In a similar fashion, you could take the first few thousand words from a frequency list, use the Database Manager to convert that into a database file, name the file “priority.db“, and place it in the same directory as above. Then, once you run Recalc, MorphMan will give high-frequency words a higher MorphMan Index, increasing the efficiency of your learning.

The Database Manager is a little counter-intuitive to use, so I decided to simply make a video instead of explaining everything through text:

The above video was created before MorphMan had frequency list functionality. Now that frequency lists are supported, the “priority.db” feature is largely obsolete.

Adaptive Subs

The Database Manager also has a feature called “Adaptive Subs,” which allows you to make custom subtitles files based on your personal known.db and mature.db databases. For example, you could create a subtitle file that only displays subs for lines that contain unknown Morphs.

The feature is a bit of a hassle to set up and use and doesn’t provide much practical value. If you would like to give it a shot anyway, you can find an explanation of how to use the feature here. Note that in the current version of MorphMan, “target” must be used in place of “jpn”, and “native” must be used in place of “eng”.

Readability Analyzer

MorphMan’s Readability Analyzer allows users to run various statistical analyses on the words contained within target language texts. You can access it by going to “Tools > MorphMan Readability Analyzer” on Anki’s main page.

When inputted target-language text, the Readability Analyzer has the ability to do four things:

  • Readability Report: tell you what percentage of words contained in the text you already know (or to be exact, what percentage of the words are considered Mature Morphs in your MorphMan database). The Readability Report is outputted within the “Readability Analyzer” window. Whether the “Readability Report” box is checked off doesn’t change anything in the current version of MorphMan.
  • Word Report: outputs a list of all the words contained within the text, along with various information such as their part of speech and number of occurrences within the text. Outputted in the form of a text file placed in the “Output Directory”.
  • Target Study Plan: outputs a list of the words, ordered by frequency, that you would need to learn to reach the “Target %” percentage of known words contained within the text. Outputted in the form of a text file placed in the “Output Directory”.
  • Frequency List: outputs a frequency list that can be used as your frequency.txt. Outputted in the form of a text file placed in the “Output Directory”.

By default, the Readability Analyzer will be set up for Japanese. To use it with another language, you need to change the “default morphemizer” (or default parsing dictionary) in line 34 of config.py.

In order to use the Readability Analyzer, first select your “Input Directory”. The Readability Analyzer will analyze all files contained within the folder you specify as your input directory. You can have it analyze a single file, or multiple files at once. It supports .txt, .ass, and .srt files encoded in UTF-8. This means you can easily analyze the subtitle files for a show, which can be very useful. Then load up your known.db (which should be done automatically) and select where you want the results outputted, and press “Analyze!”.

If you load a “Master Frequency List” (formatted in the same format as the “Word Report), when generating a “Target Study Plan” and “Frequency List”, results from the files in the “Input Directory” will be combined with the Master List. For the “Target Study Plan”, adding a master list will change the order that the words are listed in and which words are left off the list; the words that appear in the list will come solely from the “Input Directory”. Using a “Master Frequency List” is entirely optional.

config.py

I said in the introduction to this post that MorphMan has passed through the hands of multiple programmers, and due to this is a bit of a mess. The configuration file, config.py, is where this becomes the most apparent.

In the early versions of MorphMan, there was no “Preferences” module inside of Anki. Instead, there was a configuration file inside the add-on’s directory, which you had to open in a text editor and use code to configure manually. Later down the line of development, the “Preferences” module was added into Anki’s interface, making it much easier for to get MorphMan setup. The problem is that this “Preferences” module didn’t completely replace the configuration file. MorphMan still comes with a configuration file inside the add-on’s directory, and there are certain settings that can only be modified by manually editing this file.

Recall that, originally, the configuration file was used to control all of MorphMan’s settings. Which decks/note-types/fields you want MorphMan to look through, what tags you want MorphMan to add, etc., was all configured through this file. Even though that most of these settings are now controlled with Preferences inside of Anki, when you open up the configuration file, the old options to edit these things are still there. This means that a portion of the options you will find in the configuration file are completely obsolete in the current version of MorphMan. Changing them won’t have any effect; they will simply be overwritten by whatever is specified in Preferences.

Editing config.py

If you are using Anki 2.1, config.py can be found in C:\Users\[user]\AppData\Roaming\Anki2\addons21\900801631\morph\config.py. In Anki 2.0, it can be found in Anki 2.0: C:\Users\[user]\AppData\Roaming\Anki2\addons\morph\config.py.

If you mess up your config.py and need to start fresh, you can find a copy of the default settings here.

Code editors with like Notepad++ or Sublime Text have syntax highlighting, which makes viewing and editing config.py much easier. But ultimately any text editor will do.

Once you open up config.py in your text editor of choice, here is a list of the following options you can tinker with (remember, some options are obsolete and don’t influence MorphMan at all):

  • Line 24: Mature threshold. How many days a card’s interval must be before the Morphs contained in the card are considered “mature”.
  • Line 25: Known threshold. How many seconds has passed since a card was initially seen before the Morphs contained in the card are considered “known”. Once a card graduates from the learning queue, its Morphs will be considered “known” regardless of whether it has reached the threshold or not. If left at the default value of “10 seconds,” there will be no distinction between Seen and Known cards; all will be considered Known.
  • Line 26: Seen threshold. How many seconds has passed since a card was initially seen before the Morphs contained in the card are considered “seen”.
  • Line 27: Text file import maturity. Default interval given to Morphs that are manually imported by the user via the external.db database.
  • Line 30: Ignore grammar position. If this is set to “True”, words that can function as multiple parts of speech will all be counted as the same Morph, regardless of what part of speech they are being used as. By default, words that can function as multiple parts of speech are counted as a unique Morph for each part of speech they are being used as. Because of this, setting this option to “True” will reduce the total number of known Morphs. Delete all.db and run Recalc each time you change this setting.
  • Line 34: Default morphemizer. Controls which parsing dictionary the Readability Analyzer uses. Set to “SpaceMorphemizer” for languages with spaces between words, “CjkCharMorphemizer” for languages that use CJK characters, and “JiebaMorphemizer” for Chinese.
  • Line 37: Set “Browse Morphs” hotkey.
  • Line 38: Set “Already Known Tagger” hotkey.
  • Line 39: Set “Batch Play” hotkey.
  • Line 40: Set “Extract Morphemes” hotkey.
  • Line 41: Set “Learn Now” hotkey.
  • Line 42: Set “Mass Tagger” hotkey.
  • Line 43: Set “View Morphemes” hotkey.
  • Line 45: Print number of alternatives skipped. If “Skip card if focus morph was already seen today” is checked off in “MorphMan Preferences” > “General,” MorphMan will continue to reorder the New Card Queue while you rep to ensure that you only see cards that are 1T. If “Print number of alternatives skipped” is set to “True,” whenever this reordering happens while you are reviewing, a small notification box will briefly appear. If set to “False,” the reordering will still happen, but this notification box will not appear.
  • Line 50: LoadAllDb. If this is set to “False”, all.db will be generate from scratch each time Recalc is run. This will make running Recalc take much longer.
  • Line 65: Batch media fields. By specifying the fields that contain audio on your cards, you can enable the Batch Play option in the browser.
  • Line 68: Min good sentence length. The minimum number of Morphs for a sentence to not be considered “too short”. Cards with sentences considered “too short” will receive a lower MorphMan Index. For Japanese, a “5” may be a good minimum.
  • Line 69: Max good sentence length. The maximum number of Morphs for a sentence to not be considered “too long”. Cards with sentences considered “too long” will receive a lower Morph Man Index. For Japanese, a “15” may be a good maximum. 
  • Line 70: Reinforce new vocab weight. When a card contains unmature Morphs, the amount specified here will be divided by the interval of the most mature card containing that Morph, and that amount will be subtracted from the MorphMan Index of that card.
  • Line 71: Verb bonus. The amount specified here will be subtracted from the MorphMan Index of cards that contain an unknown verb. The idea is that verbs tend to be more useful to learn than other parts of speech.
  • Line 74: Priority.db weight. The amount specified here will be subtracted from the MorphMan Index of cards that contain an unknown Morph that appears in the priority.db database.
  • Line 79: Frequency weight. For cards with Morphs contained within frequency.txt, the amount specified here will be multiplied by the “total number of words in frequency.txt” minus “Morph’s position in frequency.txt”, and that amount will be subtracted from the MorphMan Index of the card.
  • Line 82: Only update k+2 and below. If this option is set to “True,” cards that contain more than two unknown morphs won’t be sorted by MorphMan. This reduces how many notes are changed after a Recalc by not updating notes that aren’t as important, in return reducing the sync burden.