Replies: 11 comments 6 replies
-
I'm always open to new ideas that can improve the add-on :)
Wouldn't the problem you are describing still exist for those different fields too?
Yeah, it's to prevent looking up cards that have different morphs even though they look the same. I'm no linguist, but Chinese is the only language I know of that doesn't have inflections, and therefore doesn't have this problem. The only potential issue I see with adding an option to do this is that there are already many related options (only browse same unknowns, browse same morphs, browse same lemma), so it would probably have to be implemented as a toggle option instead of an ever present option, i.e. it would change the functionality of pressing "L" instead of having an additional keyboard shortcut for it.
I don't think this is a great idea. The position in the frequency file/collection frequency is a fairly objective metric, whereas learning interval can have all kinds of wonky values. For example: I have sometimes in the past just given some cards a "good" review even though I forgot a complicated word on it, simply because I couldn't be bothered to deal with it again. Throw the FSRS algorithm and its re-optimize parameters feature in there, and you could get very unexpected results.
Sure, but not in the immediate future, it would require a lot of work and testing, and it could completely crash and burn at the end of it all.
Yeah, it's an semi-arbitrary number for performance reasons. If someone is trying to learn more than the top 50K words of a language then they should probably be saved from themselves, but there might be some intricacy that makes it valid that I haven't thought about.
Adding columns/values to the frequency files isn't trivial, not only because of the size increase of the files themselves, but also the time it takes to load and read them by the addon. That said, it might not be catastrophic to add a column or two if it significantly improves the workflow/usage of the addon. I don't immediately see how that would take care of the "study plan" feature though, could you elaborate on that?
I think a feature like that should be out of scope for ankimorphs--an endless addition of somewhat niche features is undesirable for maintenance reasons. That could be a cool companion addon though, I'd probably use it. |
Beta Was this translation helpful? Give feedback.
-
Thanks for your responses. I'll probably wait until Ankimorphs 2 comes out, and I have time to see which of these changes I want to implement. Now that I've decided that I like jieba, I might wait to see if that gets added to Ankimorphs as well, before changing over to it. It sounds like you're mostly not interested in my ideas, which is fine. Let me know if you are at some point in the future.
I'm not 100% sure on this. I'd have to check all the places where am-unknowns gets written/reset. Morphman has a separate field for the focus morph and for the unknowns, and I don't think that they are always the same thing.
Yeah, I felt that might be a problem.
Fair enough. Out of curiosity, do you put the am-unknowns on the front of your card, or just the sentence? I focus more on the individual word, and only look at the sentence after I've remembered the word in isolation. I'm not that interested in the sentence difficulty metric anyway, since I'd prefer to think about the word usefulness.
If I had all of the frequency counts for all of the files, I could write a standalone python script to create a new frequency list in the order needed for the study plan. My coding isn't good enough to want to put it into Ankimorphs myself. But I don't know how much it would help the add-on itself, except for people like me who are interested to look at numbers a lot.
I understand. I am surprised that I didn't find an addon like this already. Maybe I just didn't look hard enough. |
Beta Was this translation helpful? Give feedback.
-
This is me being interesting in your ideas right now, hehe. If I hadn't been interested then I wouldn't even try to scrutinize them. Sorry if it came across as dismissive, but it's really important to put ideas through an antifragility process in my opinion to make the end-product is as good as possible.
anki-morphs/ankimorphs/recalc.py Lines 442 to 445 in 2437d92 You mentioned that you want to update those fields manually, but then you can't also have ankimorphs auto-populate them, at least not in the same way as the 'am-unknowns' field, because like you said, it gets overwritten. I'm not sure there is any good way to selectively choose which fields on which cards to auto-populate. You could maybe create an exclude list and store it in the profile folder I guess, but when recalcing you would have to check each card if it is included in that list, which would negatively affect the speed of the recalc to some extent.
All the example cards in the guide are from my collection, so they look like this: with the I probably care less about the sentences than you suspect--learning unknown words with the added context of a sentence is just the best/fastest way to learn an unknown word in my experience, so sorting the sentences by difficulty is just the most efficient way to learn new words, that's all.
Oh, you mean if the study plan feature isn't going to be made, then the extra columns in a frequency file would help you make a study plan yourself? Yeah, no, I definitely plan on making the study plan thing, the details just have to be ironed out and more pressing concerns have to be taken care of first.
I'm 95% sure I've seen the result of an addon that does this in some pre-made decks that was tailored to morphman. The decks had thousands of cards and each had a separate field for the definition of the focus morph, so I hope that wasn't done manually. The "only do it if it has one unknown morph" constraint won't apply to any addon you find ofc, so they might be of limited use if combined with ankimorphs. |
Beta Was this translation helpful? Give feedback.
-
I haven't heard this term before, but I totally agree. But I also realize that that trying to make a software do everything that everyone wants is a recipe for an unwieldy codebase (see: Morphman), and I know that one of your priorities is to not do that. So I expect that you will need to be selective in what you do implement.
I will need to think this through more. Thanks for the pointer to where it gets set.
That's about the same as me. But I'm probably doing a lot fewer words/day than you (about 5), which is why I'm more focused on which words get selected.
Yeah
Great! I'll try to be patient. There are so many nice details with Ankimorphs that I'm looking forward to being able to switch over. |
Beta Was this translation helpful? Give feedback.
-
@mortii I am seeing what you mean about this. I was wondering why morphs are not showing up as learning in the am-highlight, when I know that I keep failing that morph. It turns out that they are on other cards, which I have given a "good" review, because I am mostly grading the am-unknowns. I don't know how many places the morph interval is used, but I'd like to suggest a change to how the morph interval is calculated, at least for the highlighting and whether the card has a learning morph in _get_card_difficulty_and_unknowns_and_learning_status.
I think this will get around the problem that the interval of a card may not reflect the interval of all of the morphs, especially the tough ones. |
Beta Was this translation helpful? Give feedback.
-
So I think that what you are saying is that if there were a way to implement this that was easy to understand, and simpler, that you'd consider it? Oftentimes, the initial obvious way of implementing something isn't the optimal way (that's why software development teams have design reviews), so maybe there's a way to do this that would be acceptable. If you genuinely think that this would not make for a better user experience, that's a different question. |
Beta Was this translation helpful? Give feedback.
-
Thanks! Probably won't look at it for a bit, but hopefully I will eventually.
Unfortunately, pretty much any implementation of "morph interval" is problematic if there is more than one card with that morph. |
Beta Was this translation helpful? Give feedback.
-
Here are some updates
I edited my own branch of the code to rename the "am-unknowns" field to "Word" and it seems to be working fine for me. Sometimes I do need to edit this field if the morphs weren't processed correctly, but only when I'm studying it, so then the card is no longer new. I don't need to have another field for it. But it would make some other things that I'd like to do easier if the
I now have this working in the way that I want it to now. Basically, rather than building a table as a list of all intervals from all of the morphs from all of the cards, I make a dict of the morphs and keep track of the longest interval for it when it's a focus morph (matches what's in the am-unknowns field), and when it's not a focus morph.
Then after all the cards have been read, it writes out the table, selecting the focus_morph interval if it exists.
This way of calculating it is really best for me, because I ONLY grade the card on whether I know the focus morph. When I look at the morphs that went from "known" from the original code to "learning" in this version, they make sense to me. Also, in order to do this, I had to find a way to get |
Beta Was this translation helpful? Give feedback.
-
Given that we haven't landed on a new name for the "focus morph" field, this will be a messy combination of field names and lookups, sorry about that. Anyway, I was thinking we could add an option like am_config: AnkiMorphsConfig = AnkiMorphsConfig()
if am_config.morph_interval_based_on_focus_morph:
# do things But implementing the the production ready option can be done later, just add a In the the # returns -1 if not found
focus_morph_field_index: int = existing_field_names.index(
ankimorphs_globals.EXTRA_FIELD_UNKNOWNS
)
for anki_row_data in _get_anki_data(am_config, note_type_id, tags).values():
card_data = AnkiCardData(
am_config=am_config,
tag_manager=tag_manager,
note_type_id=note_type_id,
expression_field_index=field_index,
focus_morph_field_index=focus_morph_field_index,
anki_row_data=anki_row_data,
)
card_data_dict[anki_row_data.card_id] = card_data
return card_data_dict And the def __init__( # pylint:disable=too-many-arguments
self,
am_config: AnkiMorphsConfig,
tag_manager: TagManager,
note_type_id: NotetypeId,
expression_field_index: int,
focus_morph_field_index: int,
anki_row_data: AnkiDBRowData,
) -> None:
fields_list = anki.utils.split_fields(anki_row_data.note_fields)
expression_field = fields_list[expression_field_index]
if focus_morph_field_index != -1:
focus_morph = fields_list[focus_morph_field_index]
else:
focus_morph = None
# ---Snipped---
self.expression = expression
self.focus_morph = focus_morph |
Beta Was this translation helpful? Give feedback.
-
I think there is a fundamental problem with this approach of extracting the morph(s) from the The output to the extra field will only contain the inflection or the lemma, which makes it lossy, and reversing the process isn't doable because the user could have switched between using lemmas or inflections any number of times in the past. This means this will only really work for Chinese. To make this work we would either have to change how the morph is stored and/or change the retrieval process. Another problem is obviously that there could be multiple morphs in the field, but they are comma separated, so that is very solvable. |
Beta Was this translation helpful? Give feedback.
-
Not adding any new features, apologies. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
@mortii I think you study in a more sentence-focused way, but I study in a very word-focused way. There are a few extensions/changes to the way anki-morphs currently works to make it more ideal for the way I study. I don't know how unique I am, so I thought I'd write up how I study and what improvements I'm considering.
To describe how I study a bit, I've been using Morphman as well as other Chinese word anki decks to build my vocabulary. In my current setup, I have the Morphman "FocusMorph" field set to "Word," which is the same field that I use for my other non-Morph decks. When I am studying, I use the "L" shortcut to find all cards with the same FocusMorph, across both my Morph and non-Morph decks. When I do recalc, I want it to find the best morph for me to study, and then order the +1 sentences in by "usefulness" (to the extent that this is possible). Because I have a deck from several TV shows that has thousands of unknown morphs, and I am learning new morphs at a pretty slow rate, I rely on the Morphman Study Plan to identify the unknown morphs that are going to be most useful for me for the particular episode I'm watching, in the context of the TV series as a whole.
In order to move over to anki-morphs and keep my same flow, here are some of the things I think I'd want to / need to change. If you're not interested in these types of changes, I could keep in my own branch of anki-morphs just for myself.
Auto-populate the "Focus Morph" or "Words" field with the am-unknowns value. At first I thought that I could just rename the am-unknowns field, but there may be some cases where am-unknowns gets updated that I wouldn't want it to be updated. Since the parser makes mistakes, I sometimes need to go and fix the morph that is populated there.
Make the "browse same morphs" feature work across non-morph decks, and also have it search for whatever is in the "Focus Morph" field, regardless of whether this is a new morph or not. A quick draft of what I am thinking is here: https://github.com/xofm31/anki-morphs/blob/714f97c106599178129f0aa62e179722fe33168f/ankimorphs/browser_utils.py#L71-L92 . I think you avoided a search like this due to issues with Japanese inflections, but this is not a problem for Chinese. If you are interested in this functionality, I could probably clean it up add it as an another way to search related cards.
Difficulty calculation. I've only been thinking about this so far, but personally, I want to make the usefulness of the morph (as measured by its spot in the frequency list be the most important factor, with the difficulty of the sentence being a secondary criteria for the ordering. I also like the idea of throwing in a morph or two that are in the learning stage, to reinforce other cards that I'm currently learning. I think that there should be a way to combine the "word usefulness" and the "sentence difficulty" in a way that would allow for a parameter setting to select their relative importance. Some random thoughts:
I believe you're thinking about implementing a study plan. But if not, I'd probably want to do it outside of anki-morphs (I'm not a software developer, and that seems a bit too much for me). What I would do is add columns to the frequency file for the morph status (new/learning/known) and the frequency count. I was considering including a column for the frequency count for each of the txt files individually, but I'm not sure if this would be problematic if someone had hundreds or thousands of files.
Another thing I'm considering is filling in the card's fields for the word's definition and pinyin from the open source CCDICT when there is just one unknown morph.
Beta Was this translation helpful? Give feedback.
All reactions