Priority Reorder

AnkiWeb addon 857040600

Reorders new Anki cards into priority and normal queues via configurable searches, occurrence dictionaries, frequency fields, and sorting, then syncs the new order.
AI-generated summary; may contain mistakes.

review-flowsearch

Open on AnkiWeb GitHub Ask about alternatives

AnkiWeb

Rating
2 (๐Ÿ‘ 2 ยท ๐Ÿ‘Ž 0)
Updated
2026-09-28
Anki versions
25.07.5~
Description language
en

Maintenance

active

  • Last update or commit was 3 days before the snapshot (2026-09-28).
  • The repository has 18 test files.

Will it work on my Anki?

Version branches
Min AnkiMax AnkiUpdated
25.07.5+2026-09-28
History across monthly snapshots

Loadingโ€ฆ

Similar addons

Daily Occurrences

Records words from Japanese text streamed over a websocket, using the Jiten API to build daily occurrence dictionaries for Anki that can feed Priority Reorder's seen search.

sync-integrationstatisticsservice-client

Rating 0 ๐Ÿ‘ 0 ยท ๐Ÿ‘Ž 0 โญ 0 Anki 2.1.1~ Updated 2026-08-16
Yomitan Frequency Sort

Sorts new cards using Yomitan frequency dictionaries with toggleable averaging, startup sorting, review display, backfilling, occurrence filtering, and only word plus optional reading fields.

sync-integrationreview-flownote-management

Rating 10 ๐Ÿ‘ 10 ยท ๐Ÿ‘Ž 0 Anki 2.1.1~ Updated 2025-12-18
Review First

Reorders the traditional scheduler's queues to show due review cards first until none remain, then learning and new cards as normal.

review-flow

Rating 15 ๐Ÿ‘ 11 ยท ๐Ÿ‘Ž 4 โญ 0 Updated 2019-03-06
Freqman

Imports Yomichan frequency dictionaries and sorts selected card types by frequency or rank, offering preferences, reset options, and database/tag maintenance.

importreview-flowbeta

Rating 1 ๐Ÿ‘ 1 ยท ๐Ÿ‘Ž 0 โญ 5 Anki 2.1.56~ Updated 2023-01-23
AutoReorder

Automates reordering cards by field, converting fields to tags, and backfilling word frequencies, with reordering run at startup or through a menu and configured in options.

review-flownote-managementtaggingobsolete

Rating 5 ๐Ÿ‘ 5 ยท ๐Ÿ‘Ž 0 โญ 8 Anki 2.1.49~ Updated 2022-05-16

README

Priority Reorder Addon

Reorder your new Anki cards so the ones you care about come first.

Changelog

See CHANGELOG.md.

Overview

Instead of learning new cards in plain frequency order, you build a priority queue from searches like these:

  • common words first, using your frequency field
  • words from the VN, book, game or show you're reading now or plan to, using occurrence dictionaries
  • cards you added recently
  • words whose kanji, or kanji readings, you don't know yet
  • specific decks, tags or note types

<details> <summary>View Example</summary> <br> <img src="example.png" alt="Example of priority reorder">

<details> <summary>View Example Config</summary> <br>

```
{
  "normal_search": "deck:ๆ—ฅๆœฌ่ชž::Mining",
  "priority_search": [
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:[9-nine-ใ“ใ“ใฎใคใ“ใ“ใฎใ‹ใ“ใ“ใฎใ„ใ‚,9-nine-ใใ‚‰ใ„ใ‚ใใ‚‰ใ†ใŸใใ‚‰ใฎใŠใจ,9-nine-ใฏใ‚‹ใ„ใ‚ใฏใ‚‹ใ“ใ„ใฏใ‚‹ใฎใ‹ใœ,9-nine-ใ‚†ใใ„ใ‚ใ‚†ใใฏใชใ‚†ใใฎใ‚ใจ]>=10",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:[9-nine-ใ“ใ“ใฎใคใ“ใ“ใฎใ‹ใ“ใ“ใฎใ„ใ‚,9-nine-ใใ‚‰ใ„ใ‚ใใ‚‰ใ†ใŸใใ‚‰ใฎใŠใจ,9-nine-ใฏใ‚‹ใ„ใ‚ใฏใ‚‹ใ“ใ„ใฏใ‚‹ใฎใ‹ใœ,9-nine-ใ‚†ใใ„ใ‚ใ‚†ใใฏใชใ‚†ใใฎใ‚ใจ]>=3",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:็ฉข็ฟผใฎใƒฆใƒผใ‚นใƒ†ใ‚ฃใ‚ข>=3 added:14",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:็ฉข็ฟผใฎใƒฆใƒผใ‚นใƒ†ใ‚ฃใ‚ข>=10 added:14",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:้ญ”ๆณ•ๅฐ‘ๅฅณใƒŽ้ญ”ๅฅณ่ฃๅˆค>=10 added:14",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:[ใ†ใŸใ‚ใ‚Œใ‚‹ใ‚‚ใฎ,ใ†ใŸใ‚ใ‚Œใ‚‹ใ‚‚ใฎ2,ใ†ใŸใ‚ใ‚Œใ‚‹ใ‚‚ใฎ3]>=20 added:14",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:็ฉข็ฟผใฎใƒฆใƒผใ‚นใƒ†ใ‚ฃใ‚ข>=7",
    "deck:ๆ—ฅๆœฌ่ชž::Mining occurrences:็ฉข็ฟผใฎใƒฆใƒผใ‚นใƒ†ใ‚ฃใ‚ข>=5"
  ],
  "priority_search_mode": "sequential",
  "sort_field": "FreqSort",
  "sort_reverse": false,
  "tuning": {
    "priority_cutoff": null,
    "normal_prioritization": null,
    "priority_limit": null,
    "shift_existing": true
  },
  "sync_behavior": {
    "reorder_on_sync": true,
    "auto_update_dicts": false
  },
  "word_fields": {
    "expression_field": "Expression",
    "expression_reading_field": "ExpressionReading"
  }
}
```

</details>

My first searches pick the most frequent words in the VN I'm reading now. Later searches pick frequent words from VNs I plan to read next. </details>

Installation

  1. Install from AnkiWeb.
  2. Restart Anki.

You need a note type with frequency data. I recommend Lapis. To add frequency data to existing cards, see backfill-anki-yomitan.

Quick Start

The default config prioritizes cards added in the last 3 days. To change it:

  1. Go to Tools โ†’ Add-ons, select Priority Reorder and press Config.
  2. Edit the settings you want. For cards added in the last 5 days:
    {
         "priority_search": [
             "deck:ๆ—ฅๆœฌ่ชž::Mining added:5"
         ],
         "normal_search": "deck:ๆ—ฅๆœฌ่ชž::Mining",
         "sort_field": "FreqSort"
    }
    

    A deck name with spaces needs escaped quotes: "\"deck:ๆ—ฅๆœฌ่ชž::Mining Deck\" added:5". Occurrence dictionary folder names can't contain spaces at all, so rename the folder.

  3. Set sort_field to the frequency field of your note type (e.g. "FreqSort" or "Frequency").
  4. Press OK.

The addon reorders your new cards after every sync, then syncs once more so your other devices get the new order. Press Ctrl+Alt+` to reorder by hand.

The searches and sorting sit at the top level of the config. Everything else is grouped into the matching, tuning, sync_behavior and word_fields sections.

How it Works

The addon splits your new cards into two queues:

  1. Priority queue: cards matching priority_search, shown first.
  2. Normal queue: cards matching normal_search, shown after.

Each queue is sorted by sort_field. A card matching both goes in the priority queue, so in the example above, recent cards are placed first even though they also match the normal search.

Everything lives under Tools โ†’ Priority Reorder: Reorder Cards (Ctrl+Alt+` ), Show Summary, and Update Jiten Occurrence Dictionaries.

Summary Window

Tools โ†’ Priority Reorder โ†’ Show Summary shows what each priority search did in the latest reorder this session. If nothing has run yet, press Run reorder or sync.

The top shows how many cards were prioritized, when, and a bar splitting the priority queue by search. Below, each search gets a row with its kept and matched counts, its place in the queue, and a thin bar showing where its matches went: kept, taken by an earlier search, over its limit=, or cut by priority_cutoff. Click a row for the numbers and for buttons that open those notes in the Browser. Edit config and Run reorder are at the top, so you can change a setting and check the result straight away.

In "mix" mode the searches are pooled before sorting, so each row shows only its matched count.

In "cycle" mode, a search that takes several turns shows two ranges, such as 1โ€“5, 2981โ€“3400 โ†ป: its first turn, then the stretch where its later turns alternate with the other searches. Hover the range for the number of turns. The bar shows each first turn in place, then a striped stretch for the later turns; hover it to see which searches placed how many cards there.

Search Terms

Mix these into any Anki search:

Term Short Matches by
f<10000 value of your sort field
length>=3 l>=3 characters in the expression field
occurrences:Name>5 o:Name>5 times the word appears in an occurrence dictionary
seen:7 s:7 whether the word appeared in the last 7 days
kanji:new=1 k:new=1 number of kanji you haven't learned
kanji:new_reading>=1 k:new_reading>=1 number of kanji in a reading you haven't learned
kanji:num=2 k:num=2 number of kanji
limit=20 keeps only the top 20 of this search (config only)

All of them except limit= also work in the Browse search bar and through the collection API (and so AnkiConnect), which makes the Browser a good place to try a search before you put it in your config. They use the same matching settings, word_fields and sort_field as the reorder. Comparisons can be =, !=, <, <=, > or >=, and a leading - negates a term (-seen:30).

The short forms are the same terms, and you can mix the two. limit= has no short form, because l belongs to length. If one of your note types has a field named o, k, s or l, the short form hides searches on that field, so use the long form there. Short forms also work only while this addon is enabled, so write the long form in a search you plan to share.

Frequency (f)

f<10000 or f>=30000 compares the number in your sort field. It's most useful combined with other terms, e.g. to keep only the common words from an occurrence search.

Length (length)

length>=3 matches expressions of 3 or more characters, length=1 single-character words. The raw field value is counted in Unicode characters, with no HTML stripping, so markup counts toward the length. An empty field has length 0.

Occurrences (occurrences:)

Prioritize words from specific media, using Yomitan occurrence dictionaries.

  • occurrences:้Š€่‰ฒใ€้ฅใ‹>=5 matches words that appear 5 or more times in ้Š€่‰ฒใ€้ฅใ‹.
  • occurrences:[้Š€่‰ฒใ€้ฅใ‹,็ฉข็ฟผใฎใƒฆใƒผใ‚นใƒ†ใ‚ฃใ‚ข]>=10 adds up the counts from both.
  • occurrences:all>=10 adds up every dictionary in user_files, for words common across all your media.

Setting up occurrence dictionaries

Download them from Jiten: each media page has them under Download deck -> Yomitan (occurrences).

  1. Go to Tools โ†’ Add-ons, select Priority Reorder and press View Files.
  2. Open the user_files folder.
  3. Create a folder named after the dictionary, e.g. ้Š€่‰ฒใ€้ฅใ‹. The folder name is what you type after occurrences:, so it can't contain spaces.
  4. Unzip the Jiten download into it. The addon reads every term_meta_bank_*.json, and the updater needs index.json:
    user_files/
    โ”œโ”€โ”€ ้Š€่‰ฒใ€้ฅใ‹/
    โ”‚   โ”œโ”€โ”€ index.json
    โ”‚   โ””โ”€โ”€ term_meta_bank_1.json
    โ””โ”€โ”€ ็ฉข็ฟผใฎใƒฆใƒผใ‚นใƒ†ใ‚ฃใ‚ข/
        โ”œโ”€โ”€ index.json
        โ””โ”€โ”€ term_meta_bank_1.json
    
  5. Set word_fields to match your note type. For Lapis:
    "word_fields": {
        "expression_field": "Expression",
        "expression_reading_field": "ExpressionReading"
    }
    

Updating occurrence dictionaries

The addon can update dictionaries that came from Jiten.

  • Tools โ†’ Priority Reorder โ†’ Update Jiten Occurrence Dictionaries checks all of them now.
  • "auto_update_dicts": true in the sync_behavior section checks once a day, after a sync.

Jiten's API allows roughly 10 requests per minute, so with more than 10 dictionaries an update pauses to wait out the limit. If that makes syncing feel slow, leave auto_update_dicts off and update from the menu.

Matching options

By default a card counts only the entries that exactly match its expression and reading. The options in the matching section also credit it with related entries:

"matching": { "prefix_matching": true, "variant_matching": true }

They apply wherever occurrences: and seen: run, in the reorder and in the Browse bar. All are off by default, and they combine without counting an entry twice.

Option Card gets the counts of Example
kana_normalization the same word in the other kana script ใ‚ฎใƒชใ‚ฎใƒช โ† ใŽใ‚ŠใŽใ‚Š
combine_word_forms every reading of its expression, plus kana-only entries of its reading ๅ—ไบฌ โ† all ๅ—ไบฌ entries
prefix_matching longer entries that start with it ๅฝซๅˆป โ† ๅฝซๅˆปๅฎถ
suffix_matching longer entries that end with it ๅญฆๆ ก โ† ๅฐๅญฆๆ ก
variant_matching other spellings of the same word ็…Œใ‚ใ โ† ็…Œใ
stem_matching its noun form ๆˆ’ใ‚ใ‚‹ โ† ๆˆ’ใ‚
compound_matching compounds built on its stem ๅ–ใ‚‹ โ† ๅ–ใ‚Šๆถˆใ™
honorific_folding its ใŠ/ใ”/ๅพก form ่Œถ โ† ใŠ่Œถ

The full rules follow. Every option only adds counts, so the worst a loose match can do is push a card over a threshold early.

<details> <summary><code>kana_normalization</code> and <code>combine_word_forms</code></summary>

kana_normalization folds katakana to hiragana on both the card and the dictionary before matching, in the expression and the reading. These pairs match with it on:

  • ใ‚ฎใƒชใ‚ฎใƒช/ใ‚ฎใƒชใ‚ฎใƒช and ใŽใ‚ŠใŽใ‚Š/ใŽใ‚ŠใŽใ‚Š
  • ๅ—ไบฌ/ใƒŠใƒณใ‚ญใƒณ and ๅ—ไบฌ/ใชใ‚“ใใ‚“
  • ใƒใ‚ฟๅธณ/ใƒใ‚ฟใกใ‚‡ใ† and ใญใŸๅธณ/ใญใŸใกใ‚‡ใ†

combine_word_forms sums every entry under the card's expression, whatever its reading, plus every kana-only entry (ใ‹•) for the card's reading. A ๅ—ไบฌ/ใชใ‚“ใใ‚“ card gets all ๅ—ไบฌ entries and all kana-only ใชใ‚“ใใ‚“ entries. A kana card, whose expression is its reading, isn't counted twice.

The two are independent. With both on, the kana is folded first and the combined lookup runs on the folded keys. </details>

<details> <summary><code>prefix_matching</code></summary>

The card gets the counts of every longer entry that starts with its expression. With entries ๅฝซๅˆปๅฎถ (100) and ๅฝซๅˆปๅ“ (30), a ๅฝซๅˆป card counts its own entry plus 130, so occurrences:MyDict>=50 can pick it up even if ๅฝซๅˆป alone appears only a few times.

  • 2 characters minimum. A single character is too loose: ๆ‰‹ would absorb ๆ‰‹็ด™ and ๆ‰‹่ก“, where it is only part of the word and often read differently.
  • Single kanji, particle phrases. A single-kanji card with a reading is credited by entries of the form kanji + particle (ใ‚’ ใŒ ใฎ ใซ ใง ใฏ ใ‚‚ ใธ ใจ), optionally followed by more, when the entry's reading starts with the card's reading plus that particle. ๆ‰‹ใ‚’่ฒธใ™ (ใฆใ‚’ใ‹ใ™) credits ๆ‰‹/ใฆ but not ๆ‰‹/ใ—ใ‚…, and ๆ‰‹็ด™ still gives nothing. The bare form counts too: ไฟ—ใซ credits ไฟ—/ใžใ and ็‰นใซ credits ็‰น/ใจใ, so you don't need separate cards for them. The reading check is what keeps out on'yomi compounds and verbs like ็ฉใ‚‚ใ‚‹.
  • Single kanji, ใ™ใ‚‹ verbs. An entry that is the kanji plus ใ™ใ‚‹, ใ˜ใ‚‹ or ใšใ‚‹ credits it when the reading matches: ๅฑฏใ™ใ‚‹/ใŸใ‚€ใ‚ใ™ใ‚‹ credits ๅฑฏ/ใŸใ‚€ใ‚ but not ๅฑฏ/ใจใ‚“, and ๆ„Ÿใ˜ใ‚‹ credits ๆ„Ÿ/ใ‹ใ‚“. The sound change before ใ™ใ‚‹ is allowed, so ๅฏŸใ™ใ‚‹/ใ•ใฃใ™ใ‚‹ credits ๅฏŸ/ใ•ใค.
  • Entries with no reading never count for the single-kanji rules.
  • A multi-character card needs none of this: ๅ‹‰ๅผทใ™ใ‚‹ already starts with ๅ‹‰ๅผท.
  • Turning it on adds a little to the addon's startup time. </details>

<details> <summary><code>suffix_matching</code></summary>

The mirror of prefix matching: the card gets the counts of longer entries that end with its expression. Japanese compounds put the head last, so this gathers a word's family: ๅญฆๆ ก gets ๅฐๅญฆๆ ก, ไธญๅญฆๆ ก and ้ซ˜็ญ‰ๅญฆๆ ก.

  • 2+ characters with a kanji. That covers kanji compounds (ๅญฆๆ ก, ็›ฎ็š„) and kanji-plus-okurigana words (้ฃŸในใ‚‹, ๅผทใ„), so compound verbs and adjectives work: ๅ‡บใ™ gets ๆ€ใ„ๅ‡บใ™ and ้ฃ›ใณๅ‡บใ™, ๅผทใ„ gets ๅฟƒๅผทใ„ and ๅŠ›ๅผทใ„. A bare single kanji (่ชž, ๆ—ฅ, ๆ‰‹) would absorb whole families with unstable readings and meanings, so it is left out, and so are pure kana cards (ใ™ใ‚‹, ใ“ใจ, loanwords).
  • Single kanji, particle phrases. As with prefixes, a single kanji is credited only by entries ending in a particle plus the kanji, when the reading ends in that particle plus the card's reading. ๆฏใฎๆ—ฅ (ใฏใฏใฎใฒ) credits ๆ—ฅ/ใฒ, not ๆ—ฅ/ใซใก, and ไปŠๆ—ฅ or ๆ—ฅๆœฌ่ชž give nothing.
  • Negative forms. A verb is credited by entries ending in its negative stem plus ใš or ใฌ: ใซใ‚‚ๆ‹˜ใ‚ใ‚‰ใš credits ๆ‹˜ใ‚ใ‚‹, ็›ธๅค‰ใ‚ใ‚‰ใš credits ๅค‰ใ‚ใ‚‹, ่ฆ‹ใš็Ÿฅใ‚‰ใš and ่ฆ‹็Ÿฅใ‚‰ใฌ credit ็Ÿฅใ‚‹, and ๆ€ใ‚ใš credits ๆ€ใ†. The reading has to end the same way, so ใซใ‚‚ๆ‹˜ใ‚‰ใš (ใซใ‚‚ใ‹ใ‹ใ‚ใ‚‰ใš) doesn't credit ๆ‹˜ใ‚‹/ใ“ใ ใ‚ใ‚‹ and ๆฐดๅ…ฅใ‚‰ใš (ใฟใšใ„ใ‚‰ใš) doesn't credit ๅ…ฅใ‚‹/ใฏใ„ใ‚‹. ใชใ„ is left out, because ใคใพใ‚‰ใชใ„ and ใใ ใ‚‰ใชใ„ would inflate their base verbs.
  • ใฆ-forms. Likewise for entries ending in the verb's ใฆ-form, which dictionaries list for adverbs and set phrases: ๆ€ฅใ„ใง credits ๆ€ฅใ, ใซๆฒฟใฃใฆ credits ๆฒฟใ†, ใ“ใฎๆœŸใซๅŠใ‚“ใง credits ๅŠใถ, ่ฌนใ‚“ใง credits ่ฌนใ‚€. The reading has to match here too.
  • Turning it on adds a little to the addon's startup time. </details>

<details> <summary><code>variant_matching</code></summary>

The card gets the counts of other spellings of the same word, differing in okurigana or kanji. Prefix and suffix matching can't reach these: ็…Œใ is neither a prefix nor a suffix of ็…Œใ‚ใ.

  • Rule. An entry counts when its reading is identical to the card's and the kanji of one form all appear in the other, with at least one kanji on each side. A ็…Œใ‚ใ card gets ็…Œใ but not ็‡ฆใ‚ใ (no shared kanji) or ใใ‚‰ใ‚ใ (no kanji). Okurigana families fold together: ่ฝ่‘‰/่ฝใก่‘‰, ๆฐ—ๆŒ/ๆฐ—ๆŒใก, ๅญไพ›/ๅญใฉใ‚‚.
  • Why all the kanji, not one. Homophones often share a kanji but are different words. Requiring one form's kanji to sit inside the other keeps ็ง‘ๅญฆ and ๅŒ–ๅญฆ, ไฟ่จผ and ไฟ้šœ, ๅฏพ่ฑก and ๅฏพ็…ง apart.
  • Glyph variants. Kanji that KANJIDIC2 lists as variants of each other count as one kanji: ็‡ˆใ™/็ฏใ™, ๆŽปใ/ๆ”ใ, ้†คๆฒน/้†ฌๆฒน, ๆ€’ๆถ›/ๆ€’ๆฟค, ็ฑ ๅŸŽ/็ฏญๅŸŽ.
  • Kana spellings don't count, since they have no kanji to compare. Turn on combine_word_forms as well if you want them. Entries with no reading never match.
  • Free while off. When on, each dictionary builds an index once, on first use. </details>

<details> <summary><code>stem_matching</code></summary>

The card, in dictionary form, gets the counts of its noun form: the ้€ฃ็”จๅฝข (masu-stem) for verbs, and for ใ„-adjectives the ใ form and the ใ•/ใฟ/ใ’ nouns. Occurrence dictionaries list these as separate entries, so without this a ๆˆ’ใ‚ใ‚‹ card scores nothing against a dictionary that has only ๆˆ’ใ‚.

  • Rule. The card's last kana is changed, and the result has to match an entry in both expression and reading. Ichidan verbs drop ใ‚‹ (ๆˆ’ใ‚ใ‚‹โ†’ๆˆ’ใ‚). Godan verbs move the last kana from the ใ†-row to the ใ„-row (้Šใถโ†’้Šใณ, ๅพ…ใคโ†’ๅพ…ใก, ่ฉฑใ™โ†’่ฉฑใ—, ๆณณใโ†’ๆณณใŽ). ใ„-adjectives take ใ (ๆ—ฉใ„โ†’ๆ—ฉใ) and all three nouns (ๅผทใ„โ†’ๅผทใ•/ๅผทใฟ/ๅผทใ’).
  • No verb-class lookup. Both the ichidan and the godan form are tried and the reading decides, so ่ตทใใ‚‹ finds ่ตทใ, ่ตฐใ‚‹ finds ่ตฐใ‚Š, and the wrong guess matches nothing.
  • One direction only. A ๆˆ’ใ‚ card is not credited by ๆˆ’ใ‚ใ‚‹. The other way round, a rare derived form would take the count of a far commoner base word and jump the queue (็„กใ’, seen once, would absorb the thousands of ็„กใ„). Use prefix_matching if you want that direction.
  • Gates. The expression and reading must end in the same kana, which is what makes the tail okurigana, so kanji-final words like ๅญฆๆ ก never qualify. They must also differ, so a kana-only card can't validate a match (ใใ‚Œใ‚‹ won't absorb ใใ‚Œ). The noun form must be at least 2 characters, which skips ่ฆ‹ใ‚‹โ†’่ฆ‹ and ็ฅžใ‚‹โ†’็ฅž.
  • Not covered. ใ™ใ‚‹ is irregular, so ๅ‹‰ๅผทใ™ใ‚‹ doesn't reach ๅ‹‰ๅผทใ—. ใ˜ใ‚‹ and ใšใ‚‹ verbs do work (ๆ„Ÿใ˜ใ‚‹โ†’ๆ„Ÿใ˜), because they conjugate as ichidan.
  • Known misses. A card ending in ใ‚‹ that is really a past form gets caught (ๆฅใŸใ‚‹โ†ๆฅใŸ), and a ้€ฃ็”จๅฝข noun ending in ใ„ is treated as an adjective (ๅ›ฒใ„โ†ๅ›ฒใฟ). Across 13 dictionaries that was 2 of 917 matches.
  • Costs nothing while off, and nothing extra while on: it builds no index and adds no startup time or memory. </details>

<details> <summary><code>compound_matching</code></summary>

The card, in dictionary form, gets the counts of entries built on its stem. Much verb vocabulary lives here: a dictionary listing ๅฅฎใ„็ซ‹ใค tells no other option anything about ๅฅฎใ†, because it neither starts nor ends with ๅฅฎใ† and doesn't share its reading.

  • Rule. The same stems stem matching makes, used as a prefix instead of an exact match. ๅฅฎใ† gets ๅฅฎใ„็ซ‹ใค, ๅ–ใ‚‹ gets ๅ–ใ‚Šๆถˆใ™ and ๅ–ใ‚Šๆ‰ฑใ„, ๅ—ใ‘ใ‚‹ gets ๅ—ใ‘ๅ…ฅใ‚Œใ‚‹, ้ฃŸในใ‚‹ gets ้ฃŸใน็‰ฉ, ้–“้•ใ† gets ้–“้•ใ„ใชใ„ and ้–“้•ใ„ใชใ, ๅฐ‘ใชใ„ gets ๅฐ‘ใชใใจใ‚‚.
  • Both sides must match. The entry has to start with the stem in writing and in reading, which is why ๆŠฑใ/ใ ใ gets ๆŠฑใใ—ใ‚ใ‚‹/ใ ใใ—ใ‚ใ‚‹ and ๆŠฑใ/ใ„ใ ใ doesn't.
  • Compounds ending in the stem. The stem also counts as the last part of a compound: ็จผใ gets ๆ™‚้–“็จผใŽ, ๆญขใพใ‚‹ gets ่กŒใๆญขใพใ‚Š, ๆƒ‘ใ† gets ๆˆธๆƒ‘ใ„, ไผ‘ใ‚€ gets ๅคไผ‘ใฟ. The reading may voice the stem's first sound, as compounds usually do (ๆ‰‹่งฆใ‚Š, ใฆใ–ใ‚ใ‚Š, credits ่งฆใ‚‹).
  • Works alone. It covers the bare stem too. With stem_matching also on, that entry is counted once.
  • No overlap with prefixes. Entries that start with the card as written (้ฃŸในใ‚‹โ†้ฃŸในใ‚‹ใ‚‚ใฎ) belong to prefix_matching whether or not that is on.
  • How loose. Across 12 dictionaries, 942 of 9,877 eligible entries gained something, by a median of 9. The gains are real compounds, but the rule can't tell a compound from a relative: transitive pairs cross over (่ฆ‹ๅ›žใ‚‹โ†่ฆ‹ๅ›žใ™, ่ตทใ“ใ‚‹โ†่ตทใ“ใ™), idioms ride along (ๅฝ“ใŸใ‚‹โ†ๅฝ“ใŸใ‚Šๅ‰), and a rare base can take a common word's count (็”Ÿใ/ใ„ใ, seen twice, absorbs the compounds of ็”Ÿใใ‚‹). Kana-only cards are excluded as in stem matching, so loanwords are safe.
  • Free while off. When on, each dictionary sorts its entries once, on first use. </details>

<details> <summary><code>honorific_folding</code></summary>

The card gets the counts of entries that are the same word with ใŠ, ใ” or ๅพก in front, which is useful when a dictionary lists ใŠ่Œถ or ๅพก็คพ and your card is the bare form.

  • Rule. An entry ใŠ{X} adds its count to {X} when {X} contains a kanji (ใŠ่Œถใฎ้–“โ†’่Œถใฎ้–“, ใŠ้‡‘โ†’้‡‘) or is itself an entry in the same dictionary. A kana-only remainder needs that entry, which blocks junk like ใŠใ‹ใšโ†’ใ‹ใš and ใŠใฏใ‚ˆใ†โ†’ใฏใ‚ˆใ†.
  • One direction. An ใŠ่Œถ card is unchanged, a ่Œถ card gains ใŠ่Œถ's count. With entries ใŠ่Œถ (50) and ่Œถ (10), ่Œถ counts 60 and ใŠ่Œถ 50. With only ใŠ่Œถใฎ้–“ (9), a ่Œถใฎ้–“ card counts 9.
  • Known misses. A remainder with a kanji is folded even when it's a different word or reading: a ้ฃฏ/ใ‚ใ— card picks up ใ”้ฃฏ/ใ”ใฏใ‚“. </details>

Kanji (kanji:)

Prioritize words by the kanji you already know. A kanji is known once it appears in the expression of a card you've learned (a review or relearning card that isn't suspended). Each example also works with k:.

  • kanji:new=0: every kanji is known.
  • kanji:new=1: exactly 1 unknown kanji.
  • kanji:new>=2: 2 or more unknown kanji.
  • kanji:num=1: exactly 1 kanji.
  • kanji:num>=3: 3 or more kanji.

A kanji stops being new as soon as one learned word contains it. To raise the bar, add a target: with kanji:new[3], a kanji stays new until 3 learned words contain it (kanji:new is kanji:new[1]). This helps keep practising kanji you've met in only one or two words. The target works on new and new_reading, not on num.

New readings (kanji:new_reading)

kanji:new asks whether you've met the kanji. kanji:new_reading asks whether you've met the reading it has in this word, which is what the card tests.

Once you've learned ้ฃŸไบ‹ (ใ—ใ‚‡ใใ˜), kanji:new counts ้ฃŸในใ‚‹ (ใŸในใ‚‹) as fully known, though ้ฃŸ=ใŸ is new to you. That's the card you're about to fail.

  • kanji:new_reading>=1: at least 1 kanji in a reading you haven't learned.
  • kanji:new_reading>=1 kanji:new=0: words made entirely of kanji you know, in a reading you don't.
  • kanji:new_reading[3]>=1: a reading stays new until 3 learned words use it.

Readings are tracked per kanji, so ็”Ÿๆดป (ใ›ใ„ใ‹ใค) doesn't teach ็”Ÿใใ‚‹ (ใ„ใใ‚‹). Inflections share a reading: ไธŠใŒใ‚‹ and ไธŠใ’ใ‚‹ are both ไธŠ=ใ‚, while ไธŠใ‚‹ (ใฎใผใ‚‹) is different. Rendaku isn't a new reading either: ่ก€ (ใก) covers ้ผป่ก€ (ใฏใชใข).

Words whose reading doesn't split across their kanji, like ็ซๅ‚ท (ใ‚„ใ‘ใฉ), ไปŠๆ—ฅ (ใใ‚‡ใ†) and gikun readings, count as new for every kanji they can't explain. Those are the least predictable readings, so that's usually what you want. When only part of a word is irregular, only that part counts: ็œผ้ก/ใ‚ใŒใญ credits ็œผ=ใ‚ and flags only ้ก.

Set word_fields.expression_reading_field to the field with the kana reading. Cards without a reading never match. Readings are checked against a bundled table built from KANJIDIC2. If this term matches almost every card, the reading field is usually the cause, and the console prints a warning.

Example: occurrences:้Š€่‰ฒใ€้ฅใ‹>=5 kanji:new=0 kanji:new_reading>=1 finds words common in the VN you're reading that look fully known but will trip you up.

Recently seen words (seen:)

Experimental: seen: may change or be removed in a future version.

Prioritize words from your recent immersion, using daily occurrence dictionaries. The matching options apply to seen: too.

  • seen:N (short s:N) matches words in the daily dictionary of any of the last N days, however many times they appear. -seen:30 negates it.
  • seen:1 is today. "Today" follows Anki's "Next day starts at" setting.
  • Keep the window small. Cost grows with the number of days: seen:1 to seen:3 are cheap, while seen:30 and up get noticeably slower, more so with prefix_matching or variant_matching on. Use the smallest window that still means "recent". Reusing the same window in several searches costs nothing extra.

Setting up seen dictionaries

My Daily Occurrences addon writes one for each day, from text that arrives over a websocket (the usual VN setup).

To build them yourself, put them in a _seen folder under user_files, one subfolder per day named YYYY-MM-DD:

user_files/
โ””โ”€โ”€ _seen/
    โ”œโ”€โ”€ 2026-06-11/
    โ”‚   โ””โ”€โ”€ term_meta_bank_1.json
    โ””โ”€โ”€ 2026-06-12/
        โ””โ”€โ”€ term_meta_bank_1.json

Each term_meta_bank_*.json is an ordinary Yomitan occurrence dictionary and uses the same word_fields. The _seen folder is reserved: it isn't an occurrence dictionary, so occurrences:all skips it and occurrences:_seen can't reach it. Only seen:N reads it.

Multiple searches

Make priority_search a list, and priority_search_mode decides how the searches combine:

  • "sequential": all of the first search, then the second, and so on. ["added:3", "tag:ใƒŽใƒ™ใƒซใ‚ฒใƒผใƒ ::้Š€่‰ฒใ€้ฅใ‹"] puts recent cards first, then the ้Š€่‰ฒใ€้ฅใ‹ cards.
  • "mix": every match in one pool, sorted together.
  • "cycle": the searches take turns, each placing its next limit= cards, until all run out. ["deck:A limit=10", "deck:B", "deck:C limit=5"] places A's top 10, all of B, C's top 5, then A's next 10, C's next 5, and so on. Without any limit= this is the same as "sequential".

Limits and cutoffs

  • limit=X in a search keeps only its top X cards (added:3 limit=20: the 20 most frequent recent cards). In "cycle" mode it's the number of cards per turn, and the rest wait for the next turn.
  • tuning.priority_limit caps the whole priority queue.
  • tuning.priority_cutoff sends priority cards whose sort value is past this number (the rarer words, with a frequency-rank field) to the normal queue.
  • tuning.normal_prioritization does the opposite: normal cards with a sort value under this number join the priority queue, after all your searches.

Credits

Kanji reading and variant data is derived from KANJIDIC2, Copyright ยฉ the Electronic Dictionary Research and Development Group, used under the CC BY-SA 4.0 licence. The bundled kanji_readings.txt and kanji_variants.txt are modified extracts (readings and variant groups only, re-encoded) and are likewise CC BY-SA 4.0.