Module talk:ru-verb

Definition from Wiktionary, the free dictionary
Jump to: navigation, search

Suggested changes[edit]

Good job!

Can all (or most) parameters be made optional and wikified (without accents and to allow entry creation)? For optional forms (the translit function shouldn't be called, to avoid ()). The verb победить doesn't have 1st person singular future (!), so, to say "I'll win" one should rephrase to something like "я бу́ду победи́телем" (ja búdu pobedítelem). The impersonal verbs will have a few forms missing, e.g. ru:смеркаться (smerkátʹsja) (to grow dark, to get dusky). Please let me know if it's too much or if you have questions. --Anatoli (обсудить/вклад) 22:33, 11 April 2013 (UTC)

I would like to start by applying this template to all verbs where it can be used, and skip any verbs like победить where it doesn't. But I wonder whether it is really necessary to leave out forms that are rarely used, but not strictly wrong. In English for example, it's not wrong to say "we rained down on them" even though rain is usually impersonal. I wouldn't be surprised if Russian verbs also have such poetic uses. And it would simplify it a lot if we could just list those forms even if almost nobody ever uses them. I mean, just because almost nobody says "my space shuttle is tasty" doesn't mean it's not valid English. :) I am not sure what you mean with making the parameters optional. If they're all optional, how would the module know what to do? —CodeCat 22:42, 11 April 2013 (UTC)
For победить there really is no 1st person singular future. People make fun of this by saying "я победю́/побежду́" but that's not valid Russian. For "смеркаться" the missing forms can sound weird (e.g. я смеркаюсь, ты смеркаешься) but can perhaps be considered valid in some circumstances. OK, for impersonal verbs I could add usage notes.
Re: "optional and how would the module know what to do" A calling template would just pass nothing as a parameter and the module would display an em dash. --Anatoli (обсудить/вклад) 23:09, 11 April 2013 (UTC)
What would be the use of a table full of dashes, though? Surely at least the stem is necessary to make anything useful appear? As for победить... are there many verbs like this? If not, we can just treat them as irregular. I do find over 40 thousands results on Google for побежду, and победю 168 thousand, but I don't know the context of those words so maybe they are not actually uses of this verb at all. —CodeCat 23:20, 11 April 2013 (UTC)
I can't think of many verbs like победить. Missing inflected forms or forms that sound awkward is a Russian feature, he-he, and some people complain about this and talk jokingly about introduction of the form "побежду", that's why there are hits. Other just discuss this problem and ask experts how to say "I'll win."
Because of победить and impersonal verbs I thought that some forms could be made optional, so that we don't have to rework it later.
Because such verbs are so rare, I think the approach I outlined above would make things easier for us. Focus on the "majority" cases, and deal with rarer cases later once we have everything working. I have used this approach when converting Dutch and Catalan verbs to Lua and it seems to work. For Dutch it is actually quite easy: there are strong, weak, weak-cht and irregular verbs, where the irregular verbs just basically have their own special conjugation for them alone. So the "exceptions" have their own separate method, different from the normal verbs. —CodeCat 23:42, 11 April 2013 (UTC)

Where to from here?[edit]

Could you add the categories, please as discussed?

It seems hard if this module will try to do all types of conjugations. I can't follow it yet. I'd like to create new templates for other types. Or should I try to work on functions like "function conj_1a(args)"?

Are the things in Template talk:ru-conj-1a still outstanding? (Re: Transitive/intransitive doesn't work yet, and the short form of the adverbial participle is also missing). --Anatoli (обсудить/вклад) 06:04, 12 April 2013 (UTC)

The short form works, and I've added transitive/intransitive just now. Categories also work now. I will start on the table of conjugation types now. —CodeCat 13:26, 12 April 2013 (UTC)
Thank you. I'd like to start creating templates. I was reading Zaliznyak's book and started documenting just a bit here - User talk:Atitarev/Russian verb templates. There are many exceptions starting from type 3. Can I start creating new templates? Not sure I'll be able to do it in Lua, though. It seems like changes between types and subtypes are big, there are many exceptions, differences in stress patterns. Not sure if one module should handle all different types but I think I could write the old way. --Anatoli (обсудить/вклад) 13:52, 12 April 2013 (UTC)
I don't think that many of those templates are actually necessary, and we can do much more with Lua anyway. For example, I think it would be possible to collapse almost all of class 1 into a single Lua function, and all of class 2 into another. Most of the subtypes that cater to a specific consonant at the end of the stem wouldn't be necessary either, because Lua can detect which consonant is at the end and adjust. In other words, many of the things that we might have originally needed separate templates or parameters for can be done "automatically" with Lua. That is why I kindly ask you to wait and not rush into things (but you are Rushin' after all so... *giggle*) because a lot of the work that you are so eager to do might not actually be necessary in the end. Of course, if you don't mind that and just need something to do, then of course feel free to go ahead, but a lot of your work might become obsolete if I am able to implement it more efficiently in Lua. —CodeCat 14:55, 12 April 2013 (UTC)
Do you mean that I temporarily changed the codes from Lua back to templates? Consider that was done just for my learning. Not trying to break your work or something and I wasn't impatient. Also, I don't know about your commitments. Once we start, it's better to get it to some meaningful end. I hope you're not oversimplifying. Besides, if you had a Lua program similar to Template:ru-conj-table, making new templates wouldn't be hard for me now. With Lua and the way you're trying to make it work for all templates, I'm a bit lost and also I can't do much. Could you also document Module:ru-verb a bit? BTW, did you get my email? --Anatoli (обсудить/вклад) 15:09, 12 April 2013 (UTC)
Well, that is actually pretty much what we do have. Have a look at the module and you'll see what I mean. Hopefully, the Lua code that makes the forms is not too difficult to understand, so that you can see how it is done and extend the pattern yourself. I have now added a function for 2a verbs as well, but only the -ovat' variety, not -evat' yet. Are verbs of that class ever stressed on the a or the o/e, like -óvat'/-évat' or -ovát'/-evát'? And if the stress is there, where does the stress fall when the ending changes to -uje-? The code currently doesn't support that yet, but I can add it fairly easily if it turns out to be necessary.
That is where I would like to ask you for help. There is now {{ru-conj-1a}} and {{ru-conj-2a}}, and I would like to see how many verb entries you can add those templates to. And more importantly, where they do not yet work because the forms they generate are wrong for some verb. In other words, I want to "stress test" these templates, and see whether these templates can cover all the verbs of classes 1 and 2, and which they cannot cover yet and why not. Once we have an idea of the variety of reasons why they do not work with some verbs, we can decide to either create a new function/template, or extend the current ones with code detects the exceptions if there is a certain pattern in them.
And yes I did get your email but I'm not sure what to say to it... —CodeCat 15:44, 12 April 2013 (UTC)
{{ru-conj-1a}} is fine and I will be able to create many verbs - already converted existing. I have already advised about {{ru-conj-2a}}. The stress shifts if the infinitive form is shifted, see current шлифовать. Just need to make the params longer. These two are pretty standard. The "b" version - Template:ru-verb-2b-impf has always stressed endings. --Anatoli (обсудить/вклад) 16:12, 12 April 2013 (UTC)
I notice that the stressed endings only apply to the present and the present active and adverbial participles. Is that true of all verbs with b stress pattern? —CodeCat 16:15, 12 April 2013 (UTC)
That's correct. It's not a big group of verbs. Could you add categories based on conjugation type? --Anatoli (обсудить/вклад) 16:22, 12 April 2013 (UTC)
I've created it and added it to блевать. Can you check it? I'm not sure about the present passive participle, not just for this verb but for all of them because none of the 2b verbs had one in their table, but they did have a past passive participle (so they are probably transitive?). —CodeCat 16:40, 12 April 2013 (UTC)
There's no present passive, even for transitive verbs for the whole group. I don't se, which part of the module does it but all instances of "блу" should be replaced with "блю". Gotta go to bed. Talk to you tomorrow. Thanks for your work:)
Ok, I've fixed that. —CodeCat 17:06, 12 April 2013 (UTC)
(Today I won't be very responsive - real life is in the way). I think this pattern and all onwards should have two stem parameters(at least). блева́/блю but other verbs have "у" in the second stem. Verb ru:наставать has the same conjugation but stems are different. Can we have two params: блева́/блю? (2a could be done the same, will also make it easier to program for future forms). --Anatoli (обсудить/вклад) 23:30, 12 April 2013 (UTC)
If one of the stems can be predicted from the other, why would it be necessary to provide two? For the class 2 verbs I have made the module do the conversion itself, so you don't need to provide more than one stem. 2 stems should only be necessary if one cannot be predicted from the other. —CodeCat 23:32, 12 April 2013 (UTC)
It didn't work for наставать. The two stems настава́/наста are the two stems like блева́/блю for блевать. They have a different shape but same conjugation. --Anatoli (обсудить/вклад) 23:47, 12 April 2013 (UTC)
Um... that's kind of because that's not the right verb class. It belongs to class 13 according to your list. —CodeCat 23:51, 12 April 2013 (UTC)
You'rr right! Changed the Russian wiki. But with two stem params we could combine these two! 13b and 2b. --Anatoli (обсудить/вклад) 00:05, 13 April 2013 (UTC)
We could combine more than these two, in that case. (I think you are beginning to see the advantages of merging now...) On the other hand, if we merge them we wouldn't be able to put them into distinct categories the way we do now. Let's try to have at least 1 template/function per class, and once they're all done we can see what we can do about merging. —CodeCat 00:10, 13 April 2013 (UTC)
I should have said reusing, not merging :) There will be, no doubt similarities but it makes sense to classify them in 16 types and subtypes. Can categorisation be left with the calling templates instead? A new parameter for types? This module does too much work. 1 template/function per class sounds good to me, I see you're using for subclasses as well. (They are actually called types in the original book and ru:wiki). --Anatoli (обсудить/вклад) 04:35, 13 April 2013 (UTC)
The functions don't have to correspond to the templates one-to-one. For example, each of the functions could contain only a small piece of code that generates stems, and it could then pass those stems on to another generic function (which works for many classes) which then creates the full forms. Look at Module:nl-verb or Module:ca-verb for example, where this has been done. nl-verb has a "present" and a "past" function, and ca-verb has make_impf, make_pret, make_pres_sub and so on. However, it is probably better to write everything out in full first, before we start merging them. There is a saying in programming that goes "premature optimisation is the root of all evil". It means that you shouldn't start simplifying your code too much right from the start, and wait until it's all finished and you have a complete picture of the situation. —CodeCat 13:10, 13 April 2013 (UTC)
You seem to be unhappy if I add new functions for subtypes, which cover variations. While adding I'm learning and testing the results. I'm happy if you redo them later, correct my mistakes by making functions more generic but let me take an active part in this. --Anatoli (обсудить/вклад) 13:31, 13 April 2013 (UTC)

Refexive - also intransitive[edit]

Could you make reflexive verbs intransitive as well (category)? --Anatoli (обсудить/вклад) 15:34, 12 April 2013 (UTC)

I put the reflexive category inside the intransitive category. That way, it's almost the same but the entries won't need even more categories. —CodeCat 15:44, 12 April 2013 (UTC)
I see. Thanks. I haven't checked that it was nested. --Anatoli (обсудить/вклад) 15:55, 12 April 2013 (UTC)

Template:ru-conj-2a needs to change[edit]

This template is not working as before as the stem is shorted. монти́ровать and шлифова́ть have different stress patterns. The old template included longer parameters: шлифова́|шлифу́|шлифу́емый|шлифо́ванный. Please have a look. --Anatoli (обсудить/вклад) 15:53, 12 April 2013 (UTC)

I guess that answers my question above then. So if the infinitive has -óvat' or -ovát' then the present has -úje-? —CodeCat 16:02, 12 April 2013 (UTC)
I think шлифовать works now, and I think verbs with -evati are now also supported. But I haven't found one to try it on yet. —CodeCat 16:12, 12 April 2013 (UTC)
Passive participle is incorrect: "отшлифо́ва", should be "отшлифо́ванный", "русифицировать" is OK though. --Anatoli (обсудить/вклад) 16:38, 12 April 2013 (UTC)
You need to specify the full word, not just the stem. Like with the old templates. I don't know if that's convenient or not but it can always be changed again. —CodeCat 16:42, 12 April 2013 (UTC)
I prefer шлифо́ва, отшлифо́ва, if you can please that was in the old template (if you mean my template), the participles were full words. --Anatoli (обсудить/вклад) 16:49, 12 April 2013 (UTC)
That can work, but is the past passive participle always formed by adding нный to the end of some stem? There are the t-participles, so that is one case where the full word needs to be specified, right? And it would be a bit more confusing if some templates expected a stem, and others expected a full word. —CodeCat 16:55, 12 April 2013 (UTC)
I missed this answer and question. It's always "-нный" with this pattern, т-participle is not part of it but the stress can vary. --Anatoli (обсудить/вклад) 07:20, 13 April 2013 (UTC)
Right now, the participle is completely independent of any pattern. I can make it pattern dependent but I wonder what good that will do, since the parameter will need to be specified anyway. —CodeCat 12:55, 13 April 2013 (UTC)
Perhaps let's leave the participle as is - parameter. I've made some codes and tested. Slowly learning. Looks I'm getting the hang of it but the module will become very big if all functions for each subtype go in. Please let me know what you think. I chose the simplest approach - a bit more parameters will make less the number of functions and templates. There are too many irregularities with the Russian verbs but there will be less templates then e.g. noun templates Category:Russian_noun_inflection-table_templates (those with -unc could be combined) I don't understand all the code but learning bits and pieces as I go.
I'd like to also be able to use the module for completely irregular verbs, where each parameter is passed, like есть. --Anatoli (обсудить/вклад) 13:09, 13 April 2013 (UTC)
For completely irregular verbs, in Module:nl-verb I have just written one function that generates all the full forms. We can probably do that for Russian too as long as we don't have too many, and it has an advantage: you automatically get the conjugation of all prefixed verbs "for free". I don't know if there are any verbs that are prefixed forms of есть, but if there are, they should be able to use the same conjugation function shouldn't they? —CodeCat 13:29, 13 April 2013 (UTC)
There are a few derivatives of есть, e.g. perfective надоесть, which needs attention. For understanding how to write a function this, I wouldn't need a walk-through or rely on you to do, if you can. :) --Anatoli (обсудить/вклад) 13:57, 13 April 2013 (UTC)

Two more functions 10c, 10a[edit]

I've created simple functions - conjugations["10c"], and conjugations["10a"], covering a very small group of verb, I only made a few examples. --Anatoli (обсудить/вклад) 07:12, 13 April 2013 (UTC)

There are some issues, I hope I can fix them. --Anatoli (обсудить/вклад) 07:38, 13 April 2013 (UTC)
What is the purpose of the 3 stems of the 10c conjugation? —CodeCat 12:59, 13 April 2013 (UTC)
With 3 stems for 10c stems it's easier. cf ru:молоть and ru:колоть. Why is it bad to have three parameters.? --Anatoli (обсудить/вклад) 13:20, 13 April 2013 (UTC)
I would just like to know what each one is for. The names you've given them (stem2, stem3) don't really reveal much. I also wonder what the relationship between them is. Can one of the stems be automatically derived from the other in some way? (Compare the class 2 verbs, where ová is automatically replaced with ú, ova with u, evá with jú, eva with ju) —CodeCat 13:24, 13 April 2013 (UTC)
1. моло́ - infinitive, past forms, past participle, adverbial, 2. ме́л - present tense (except for 1st pers. sg), 3. мел - 1st pers. sg pres, pres adverbial. полоть has these: поло́|по́л|пол. Stem 2 and 3 only differ in the presence or absence of the accent, they both are different from stem1. --Anatoli (обсудить/вклад) 13:50, 13 April 2013 (UTC)
I see. The accent can be automatically removed, so stem 3 isn't really necessary. As for the difference between stem 1 and 2, is it true that е́л > оло́ and о́л > оло́? Because in that case, you can make stem 2 the "real" stem and you can make a rule that creates stem 1 by replacing е́л and о́л > оло́. —CodeCat 14:00, 13 April 2013 (UTC)
Doesn't seem right. ru:трепаться has трепа́/тре́пл/трепл. Adding an extra "л". It may be allright just because it's a small group of verbs. --Anatoli (обсудить/вклад) 14:16, 13 April 2013 (UTC)
That seems like another rule called Proto-Slavic iotation, where certain consonants change when there is an ending that starts with -j-. Slovene has this too: kj > č, gj > ž, pj > plj, tj > č and so on. I think it also happens in class 4, in the 1st person singular? I will make a function that applies this change, because it seems like it would be useful to have a re-usable function for this (it was for Slovene, anyway). —CodeCat 14:21, 13 April 2013 (UTC)
The list of standard interchange of consonants is here: User talk:Atitarev/Russian verb templates, sometimes non-standard happend (т - щ). --Anatoli (обсудить/вклад) 14:31, 13 April 2013 (UTC)
I thought that d was usually replaced by žd in this change? —CodeCat 14:35, 13 April 2013 (UTC)
No, обижать/обидеть. --Anatoli (обсудить/вклад) 14:38, 13 April 2013 (UTC)

Class 4[edit]

What is the purpose of the "4a-сс" class? I don't see any difference between it and the normal 4a. And what about the "ш" class? If that class is used automatically with verbs that end in certain consonants, then we can remove it and add code to the normal class 4 functions, which can detect the last consonant and change the endings accordingly. —CodeCat 13:05, 13 April 2013 (UTC)

I don't have a full understanding but "сс" seems to indicate the cluster of consonants, the difference is in the imperative. It's hard to decide whether just add a check for consonant cluster will fix all other verbs of this type. For me it was easier to add a new code and then later decide if some subtypes can be merged. I won't create too many verbs with small subtypes, so the change is easy.
Agree about "ш". If you can do that, it would be great. --Anatoli (обсудить/вклад) 13:20, 13 April 2013 (UTC)
Can you tell me which final consonants automatically use this subtype? —CodeCat 13:25, 13 April 2013 (UTC)
I couldn't find anything in the book but it's not searchable, so I might have missed. The Russian wiki is not well documented. I just made first an assumption that "сс" stands for согласный but not sure anymore. All I see is "сс" verbs have an "и", not "й" in the imperative. --Anatoli (обсудить/вклад) 13:42, 13 April 2013 (UTC)
No I meant the ш class... —CodeCat 13:50, 13 April 2013 (UTC)
Copying from User talk:Atitarev/Russian verb templates: "ш" (шипящий звук - hissing, hushing or sibilant sound - what's the proper term?) change ending as per spelling rules for vowels after hushing sounds ш, щ, ж and ч. (ю - у, я - а, etc.). --Anatoli (обсудить/вклад) 13:53, 13 April 2013 (UTC)
Ok, I've made this change and I removed the ш conjugations (they now have script errors). Can you see if they work correctly with the normal 4a / 4b? —CodeCat 14:10, 13 April 2013 (UTC)
It falls over on find function. Trying to make обручиться work with Template:ru-conj-4b. --Anatoli (обсудить/вклад) 14:28, 13 April 2013 (UTC)
Oops... fixed I hope. —CodeCat 14:32, 13 April 2013 (UTC)
Yes, working and is correct :). Please keep me in the loop if you plan to add new functions, will add a couple of verbs and test. I answered some other questions on this page. Have a good night, it's 00:30 am here. --Anatoli (обсудить/вклад) 14:36, 13 April 2013 (UTC)

Test module[edit]

@CodeCate. I have created a test module Module:ru-verb-testmodule to test new types, to see what can be done.

Looking at type 3, stress patterns a, b and c. Ru:wikt has many variants. Dropping "-ну-" and variant imperatives are the variants I spotted so far.

Numbers 5 and 6 mean that "-ну-" is preserved in certain forms.

Ru:wikt seems to be a bit inconsistent in choosing patterns, will have to check thoroughly and test verbs from different subtypes.

--Anatoli (обсудить/вклад) 08:50, 14 April 2013 (UTC)

Moved group 3 from Module:ru-verb-testmodule[edit]

I have moved four type 3 functions from Module:ru-verb-testmodule - a, b and c stress patterns and one irregular. Unlike types 1 and 2, this seems to be complete and works for one exception as well. Will address irregular verbs of types 1 and 2. And I need to document the functions and calling templates. --Anatoli (обсудить/вклад) 01:01, 18 April 2013 (UTC)

conjugations["4a"][edit]

I'm making the necessary changes to the function to allow for variant imperatives - unpredictable, predictable iotation. Currently the calling template is using Module:ru-verb-testmodule. I'm going through the whole type 4, so other functions will be changed or added. --Anatoli (обсудить/вклад) 12:27, 18 April 2013 (UTC)

When converting Module:ca-verb, I've tried to allow for as few irregularities as I could. The module currently only supports two irregular forms: the past participle and a stress-based stem change. My intention was to see how many regular forms could be done first. That way, what you're left with is only the irregular verbs, which makes it much easier to recognise what changes would be needed to support them. In Catalan, as it turns out, the remaining irregular verbs are just single verbs rather than any verbs with specific patterns, so they would just need to be taken care of individually. —CodeCat 12:45, 18 April 2013 (UTC)
Yes, if you mean the "irreg" functions I've done so far, they would only work for those exceptions but as I found later, one template works for two verbs. I could have done them later but I'm going through each type, trying not leave anything behind and may find that that template may also work on another one. I may review them when I'm done with regular verbs. The "regular" ones are also not that regular, they may have a different form of imperative (unpredictable) or two interchangeable forms. --Anatoli (обсудить/вклад) 13:58, 18 April 2013 (UTC)
I meant adding the ability to say "this verb is regular, except for these forms". The old Catalan templates allowed you to say that any form was irregular, but that really became a mess because there were long lists of forms in entries. So with the module I want to prevent that. —CodeCat 14:14, 18 April 2013 (UTC)
I see your Module:ca-verb only handles regular verbs. Do you want me to move irregular verbs to a different module? I'd prefer irregular verbs to be handled by a module as well (either this one or a separate), some irregular verbs also have a number of derivatives. So far, I've been able to keep few functions for a variety of conjugation types. I've added handling of consonant interchange into type 4 (that is still in the test module but the same will have to be done to b and c subtypes). The imperative form difference (ь/й) seems to be only partially predictable. --Anatoli (обсудить/вклад) 22:45, 18 April 2013 (UTC)
Oh, no. That module isn't finished yet. My intention is to add new functions for the remaining verbs, but they would work differently. Instead of making functions that work for whole classes of verbs, these functions would conjugate just that one verb, and derivatives of it. So for example the irregular verb estar would have its own function. In fact, some of them already have their own templates right now, so it's just extending that same idea to the remainder. Basically what I have done is I've looked at Catalan verbs and asked "how many verbs have this irregularity", and then I figured, I might as well not even create a "type" for them because there's just one or two like it. But you may also notice that I have actually added specific exceptions for some verbs. The verb donar is regular but has a few unpredictable forms, and the module recognises when someone conjugates that form and replaces the forms accordingly. I have also applied that principle to Module:nl-verb, for verbs like zeggen or houden. So technically, as long as the list of exceptions is small, you can even treat them as regular verbs and make the module so that it catches those verbs and handles the exceptions itself. —CodeCat 23:00, 18 April 2013 (UTC)
My idea is not different from yours. Irregular verbs like есть will have a bunch of derivatives, perfective and imperfective, so a separate function will handle them. Slight but unpredictable variations in the conjugations are also handled by one template but I use additional parameters, which is more intuitive to editors, rather than relying on the module to figure out everything. Predictable variations are done consistently (I'm using your code and also started using Module:ru-common). Russian verbs are more complicated than Romance or Germanic verbs, and because of various stress patterns even more complicated than Czech and Polish (but these two have more predictable consonant interchanges and internal vowel (especially Polish)), so there will be more Russian functions. Surprisingly, there's little systematic approach to address Russian verbs in a smart systematic way. All reference materials, online or print, as a maximum provide conjugations of individual verbs (e.g. 501 Russian verbs) and show only two conjugation types. Zaliznyak's work hasn't been implemented and described anywhere except the Russian Wiktionary but there are some errors there. I may have some technical questions but I think I'll be able to make a module comprehensive and good. Please let me know about the irregular verbs - separate modules and templates? --Anatoli (обсудить/вклад) 23:26, 18 April 2013 (UTC)
With irregular verbs in Dutch, I made a single template which takes the name of the verb itself as the parameter. The module then just shows the inflection of that verb, which is stored in the module itself. —CodeCat 02:30, 19 April 2013 (UTC)
That's not a bad idea. It can partially be applied to Russian. Although the endings in Dutch are more consistent, in Russian you would still need to fit inflected forms into some other template or templates. Verbs миновать and живописать combine features of the 1st and the 2nd type, минуть has two types of stress patterns, ru:морщиться (not done yet) has two forms of imperatives. есть, хотеть, мочь are completely irregular (some can be reused for other verbs). I only scratched the surface of irregular verbs. --Anatoli (обсудить/вклад) 02:46, 19 April 2013 (UTC)
If Russian is anything like Proto-Slavic, then there are really only two types of present tense endings... one with -e- as the vowel and one with -i-. I suppose because Russian has separate letters for a preceding j, there would be one or two more types. But what if you split off the formation of the present into a separate function? Then it could be re-used for almost all verbs. —CodeCat 02:52, 19 April 2013 (UTC)
It's possible but I might get lost. Will think about it. Not just -ет(-ёт)/ит but also different stress patterns (stressed "е" changes to "ё"). If present can be done, then past as well. There are two stress patterns an -0- ending for some masculine forms. --Anatoli (обсудить/вклад) 03:01, 19 April 2013 (UTC)

Conjugation endings to use in a separate function and/or in the documentation[edit]

Moved to Appendix:Russian stress patterns - verbs --Anatoli (обсудить/вклад) 13:09, 20 April 2013 (UTC)

Thank you. I will try to work on the two present conjugations instead as they seem simpler. Do you know if the present participle(s) and/or the imperative also follow those two patterns? —CodeCat 12:55, 20 April 2013 (UTC)
I have moved to an appendix, as above.
They seem predictable but see у́чащий/уча́щийся (from учить/учиться) and there are some variations in using ь/и in type 4a (unstressed ending), й is used after vowels.
a/: де́лающий (делать), ве́рящий (верить); b/: беру́щий (брать), стоя́щий (стоять); c/: пи́шущий (писа́ть), у́чащий (учить)/уча́щийся (учиться)
a/: де́лай, ве́рь; b/: бери́, стой; c/: пиши́, учи́/учи́сь. --Anatoli (обсудить/вклад) 13:09, 20 April 2013 (UTC)
Variations are not that much of a problem as long as they are predictable from the stem in some way. What I need to know is, can the current 3 functions (which I created) correctly create the imperative forms based on the parameter that they have received? —CodeCat 13:23, 20 April 2013 (UTC)
Please fix the script error.
I'll search for the answers. I have no confidence yet in answering with certainty. The accent matches 1st person singular but forming may be less predictable for stems ending in consonants.
I wouldn't create functions for imperatives for all verbs just yet. E.g., type 11's imperatives have forms, which are different from personal forms: бить - бей (я, бью, ты бьёшь). I'll write about some rules. --Anatoli (обсудить/вклад) 13:37, 20 April 2013 (UTC)
Present participle is predictable, I've written in Appendix:Russian stress patterns - verbs. --Anatoli (обсудить/вклад) 14:35, 20 April 2013 (UTC)

I have been looking at the imperative forms that we have so far and I think that they may be predictable:

  • Stem ends in vowel -> й
  • Stem ends in hushing consonant ->
    • Accent A -> ь
    • Accent B + C -> ??
  • Stem ends in other consonant ->
    • Accent A -> и
    • Accent B + C -> и́

Can you see if this applies correctly to most verbs? —CodeCat 14:45, 20 April 2013 (UTC)

  • Stem ends in vowel for B + C is also и́ - поить - пои́, hushing or other consonant, still и́, водить - води́, держать - держи́.
  • The issue is only with stress pattern A, which can get either ь or и. Single consonant seem to get ь (including hushing consonants, for which ь is only a grammatical indicator (прятать - прячь), clusters may get ь or и. The rules is not clear to me yet and haven't found enough info. Type 11 is completely different as above. --Anatoli (обсудить/вклад) 20:58, 20 April 2013 (UTC)
    • But for 2b it's -у́й and not -уи́? I'm not sure if поить counts as a good example because it's irregular anyway. I will leave things as they are for now, maybe it will be clearer when we've created functions for more classes. What we could also do is assume a default, and just override (by reassigning) the default form in the individual conjugations when necessary. That way, we can easily see for which verbs the default works and for which it doesn't. —CodeCat 21:44, 20 April 2013 (UTC)
"поить" is standard because и is stressed: "пои́ть", other verbs with this stress pattern will work the same way - дои́ть - дои́.
I can suggest the following:
Types 1 and 2 get й.
From 3 upward: "и́" is consistent for b and c stress patterns, except for types 2b (goof pickup!) and 11.
Otherwise, for type a: й - after vowels, ь after single consonants and и after consonant clusters. Some consonant clusters have variants: морщиться but forms with ь are less common, a bot colloquial but also sometimes harder to pronounce - портить - по́рти, порть. "и" would work as default for type a with consonant clusters (any two consonants). If there are any exceptions, we can review. --Anatoli (обсудить/вклад) 00:14, 21 April 2013 (UTC)

Script error[edit]

See делать and must many other verbs:

Lua error in Module:ru-verb at line 595: attempt to concatenate local 'stem' (a nil value). --Anatoli (обсудить/вклад) 13:39, 20 April 2013 (UTC)

Fixed, hopefully. —CodeCat 13:44, 20 April 2013 (UTC)
Thanks. --Anatoli (обсудить/вклад) 20:59, 20 April 2013 (UTC)

Parameters of 3c and 10c[edit]

These two conjugations have extra stem parameters. 3c has stem and stem2, and 10c has inf_stem, stem2 and stem3. What do those stems actually mean? Is stem2 just stem with an accent in it, and likewise for stem3 and stem 2? If that's the case, then those parameters are not needed, because Lua can remove the accents. I think clearer names would also be more appropriate. I have named variables that had the accents removed with _noa (for "no accent") or we could change that to _noacc if it's clearer. In any case it's very important to use names that are clear and descriptive, so that others can understand what they represent. —CodeCat 13:48, 20 April 2013 (UTC)

Done, thanks for fixing the order. --Anatoli (обсудить/вклад) 20:59, 20 April 2013 (UTC)

conjugations["2b"][edit]

This part:

    pres_stem = mw.ustring.gsub(pres_stem, "о(́?)ва(́?)$", "у%1%2")
    pres_stem = mw.ustring.gsub(pres_stem, "е(́?)ва(́?)$", "ю%1%2")

is working OK but I don't know if it's justified scientifically and perhaps it's better to have two parameters for two different stems. There seem to be no rule on how the present form is made, like type 10. --Anatoli (обсудить/вклад) 21:32, 20 April 2013 (UTC)

Could you let me know before I convert verbs from Template:ru-verb-2b-impf to this module Template:ru-conj-2b? I go mushrooming today and will be away for most of the day. --Anatoli (обсудить/вклад) 21:34, 20 April 2013 (UTC)
It is justified scientifically, because this alternation happens the same way in all Slavic languages and is therefore inherited from Proto-Slavic. And in Proto-Slavic itself, it is the result of regular sound changes. The original endings were *(j)-ova-ti and *(j)-ov-j-, which were then affected by these two sound changes:
  1. o > e after hushing consonant or j (this is the change that you also see in hard vs. soft stem nouns): *-ova-ti, *-ov-j- but *j-eva-ti, *j-ev-ju
  2. ov > u, ev > ju before a consonant: *-ova-ti, *-u-j- and *j-eva-ti, *j-u-j-
So, it is very much scientifically justified... —CodeCat 21:51, 20 April 2013 (UTC)
Agreed, will change "наставать" to use a different function later. --Anatoli (обсудить/вклад) 10:06, 21 April 2013 (UTC)

present_e_a and similar functions for type 4[edit]

I wonder how to use this type of functions with stems that don't have the hushing consonants but change their consonants in 1st person singular, like бредить (using "conjugations["4a"]" in my Module:ru-verb-testmodule but I'd like to convert using your new logic). 1st singular - бре́жу, 3rd plural - бре́дят. "бре́ж" is the "iotated_stem" and "бре́д" is "stem" in the function.

Perhaps the forms should be build in the main function first, then passed to present conjugation first, which ending would fit? --Anatoli (обсудить/вклад) 11:18, 21 April 2013 (UTC)

There is a function in Module:ru-common that performs iotation, so there is no need for a parameter. If we automatically add iotation to the 1st person singular of i-presents, then it should be applied to all stems where it is possible (which I think is correct, but you should check). We would need to perform iotation first, and then see if the result of the iotation has a hushing consonant, and then apply the rule. That means that if the stem undergoes iotation, then the 1st person singular might have a hushing consonant while the 3rd person plural does not. —CodeCat 12:10, 21 April 2013 (UTC)
I think you misunderstand my question. I'm already using the iotation function in Module:ru-verb-testmodule: local iotated_stem = com.iotation(stem). The problem in the function "present_e_a" is that it takes "stem" as the parameter, which assumes that all present forms are either iotated or not iotated. Please see "conjugations["4a"]" function in Module:ru-verb-testmodule and please tell me if how I could use the conjugation function with verbs like бредить. --Anatoli (обсудить/вклад) 12:20, 21 April 2013 (UTC)
Why are you not using present_i_a instead? The iotation applies only to i-presents, not e-presents. —CodeCat 12:30, 21 April 2013 (UTC)
I chose one name of the function but this is applicable to all of them. "present_i_a" converts both "pres_futr_1sg" and "pres_futr_3pl", which is not desirable (which type did you use it for). Need to convert only "pres_futr_1sg". --Anatoli (обсудить/вклад) 12:39, 21 April 2013 (UTC)
Yes, that is why I said, if the function applies iotation, it needs to check those two forms separately. I've added it to present_i_a now to show what I mean. —CodeCat 12:43, 21 April 2013 (UTC)
Now that you separated "present_i_a" it is clearer to me how it works. I will test new functions here then.
Could you apply the following logic to "conjugations["4a"]", please?:
Variable "impr_end" (imperative ending) should be for "a" stress type the following: "й" - after vowels, "ь" - after single consonants, "и" - after consonant clusters (any two of "бвгджзклмнпрстфхцчшщ" in a row?). --Anatoli (обсудить/вклад) 13:13, 21 April 2013 (UTC)
I can check for vowels and consonants using this:
    if mw.ustring.find(stem, "[аэыоуяеиёюа́э́ы́о́у́я́е́и́ю́]$") and impr_end == nil then
        impr_end = "й"
    else --default
        impr_end = "ь"
    end
but don't know how to check for two consonants in a row, could you help, please.
Function "conjugations["4a-сс"]" (template: "Template:ru-conj-4a-сс") could go if you could do that. The only difference of this with "conjugations["4a"]" (without "-сс") is the imperative form endings in consonantal stems - "ь" vs "и": --Anatoli (обсудить/вклад) 13:17, 21 April 2013 (UTC)
You can check for a sequence by removing the []. The [] means "any of these characters". You can also use [^ at the start to say "none of these characters". You need to be careful with accented vowels, because they really count as two characters, not one, so they are really a sequence. So [аэыоуяеиёюа́э́ы́о́у́я́е́и́ю́] really contains all the vowels twice, and lists the accent character ten times. It is nearly equivalent to [аэыоуяеиёю́], which means "all ten vowels, and the accent on any letter". If you want to make absolutely sure that the accent is on a vowel, you can use "[аэыоуяеиёю]́" which means "any vowel, followed by an accent". —CodeCat 14:06, 21 April 2013 (UTC)
Thank you, I'll check tomorrow. It's too late here. I'll have to read something about Lua's regular expressions. By "[аэыоуяеиёюа́э́ы́о́у́я́е́и́ю́]" I meant "any vowel, with or without accent". How do I check for a sequence of two consonants at the end of the stem? --Anatoli (обсудить/вклад) 14:18, 21 April 2013 (UTC)
You can use "CC$", but that checks only for two C's. I suppose you could do it like this: "[^аэыоуяеиёю][^аэыоуяеиёю]$" which means "any character that is not a vowel, followed by any character that is not a vowel, followed by the end of the string". But that would not work for а́C because that matches the sequence, because C is not a vowel and the character before it is not a vowel either (because it's the accent). So I think treating the accent as a vowel too, like "[^аэыоуяеиёю́][^аэыоуяеиёю́]$", would work best. As long as nobody puts a vowel on a consonant (р́р would not match), it would work. —CodeCat 14:31, 21 April 2013 (UTC)
Thank you, that's really helpful. I've modified the function the following way. (Note: this only applies to stress pattern "a", b and c use only "и").
    --set defaults if nothing is passed, "й" for stems ending in a vowel, "ь" for single consonant ending, "и" for double consonant ending
    -- "й" after any vowel, with or without an acute accent (беспоко́ить), no parameter passed
    if mw.ustring.find(stem, "[аэыоуяеиёю́]$") and impr_end == nil then
        impr_end = "й"
    -- "и" after two consonants in a row (мо́рщить, зафре́ндить), no parameter passed
    elseif mw.ustring.find(stem, "[CC$]$") and impr_end == nil then
        impr_end = "и"
    -- "ь" after a single consonant (бре́дить), no parameter passed
    elseif mw.ustring.find(stem, "[аэыоуяеиёю́C$]$") and impr_end == nil then
        impr_end = "ь"
    -- default
    else --default
        impr_end = "ь"
    end
Could you please check? Will add the comments to the model, as above. --Anatoli (обсудить/вклад) 00:37, 22 April 2013 (UTC)
Sorry, I think you misunderstood. I meant C as a kind of placeholder to describe the idea. If you literally type in "CC$" then that is what it will match: two capital letter C's. If you put it in [ ] then it becomes a choice between one of the characters, so "[CC$]$" means "a Latin capital letter C (the second one is redundant), or a dollar sign, at the end of the string". "[аэыоуяеиёю́C$]$" means "any Russian vowel, or an acute accent, or a Latin capital letter C, or a dollar sign, at the end of the string". —CodeCat 00:39, 22 April 2013 (UTC)
Oops, I've changed to "elseif mw.ustring.find(stem, "[бвгджзклмнпрстфхцчшщ][бвгджзклмнпрстфхцчшщ]$") and impr_end == nil then". Is it better? --Anatoli (обсудить/вклад) 01:00, 22 April 2013 (UTC)
It's working! Removing "conjugations["4a-сс"]" function. --Anatoli (обсудить/вклад) 01:40, 22 April 2013 (UTC)

Type 4 exception groups[edit]

The basic forms for type 4 are now complete but there are many important exception groups, e.g. when "т" is iotised as "щ" (защити́ть - защищу́), not "ч" (usually тратить - тра́чу) or when "т" is not undergoing iotation (почти́ть - почту́), also verbs with 1st pers. sg. missing altogether - победи́ть - 0. Some groups are not so small and can have derivatives. --Anatoli (обсудить/вклад) 03:07, 22 April 2013 (UTC)

The current template already covers the majority of verbs of type 4.

A few verbs/patterns to consider:

  1. "т"-> "щ" (not "ч") (a larger group with this type, will make a separate function) ru:поглотить (Шаблон:гл ru 4c(7)-щСВ), ru:защитить (see ru:защититься Шаблон:гл ru 4b-щ-сяСВ), возвратиться, etc (ru templates use letter "щ").
  2. Missing 1st pers. sg. missing altogether - ru:победить (Шаблон:гл ru 4bСВ-жд) (убедить, переубедить, возродить, (на)дерзить, предубедить, разубедить, побудить)
  3. ru:очутиться (Шаблон:гл ru 4c-т?-сяСВ) - no 1st pers. sg. or " очучусь"?
  4. ru:стелить (Шаблон:гл ru 4c-стелить) - exception. --Anatoli (обсудить/вклад) 05:30, 22 April 2013 (UTC)
I am wondering why iotation sometimes resulted in "т"-> "щ" rather than the regular "ч". I know that in Old Church Slavonic щ was the normal outcome of iotated т, but in OCS that letter was pronounced as št. Iotated t always has the same outcome as kt and gt in infinitives, so Russian has some infinitives ending in -чь, and in OCS those same infinitives end in -щи (-šti). The only reason I can think of why Russian might use that letter for iotation, could be because they might have borrowed the verb and all its forms from OCS while preserving their spelling, and therefore also inherited the (irregular for Russian) iotation outcome. I would need to know the Proto-Slavic origin of the "т"-> "щ" verbs to understand this more. Do you think you could help with that? —CodeCat 12:41, 22 April 2013 (UTC)
I'm not so good with etymologies but защитить/защищать (related term: щит - shield) seem to be derived from Proto-Slavic "*ščitъ", Slovene cognate ščìt. See ru:защищать#Этимология. возвращаться/возвратиться - OCS "вращати" --Anatoli (обсудить/вклад) 14:19, 22 April 2013 (UTC)

no_short_past in 3a[edit]

There is an if statement there with three possible cases. But I don't really understand what they are for. Either there is a short past or there isn't one, right? Why three options and not just two? —CodeCat 12:34, 22 April 2013 (UTC)

Not exactly. One param is for no_short_past and no_short_past_partcpl sometimes seem to be independent from each other. That's what I found when I looked at various verbs of type 3. Zaliznyak marks them with 5 and 6 for each exception type (5 - no short present, 6 - no short past participle). There are definitely verbs that never have short forms, the other way is also true. I have no example ready right now where one is true but not the other (I saw them before). I thought I'd keep it that way because this type has many verbs for which one or the other short form is either not used at all or extremely rare. It would be easier if ru-wikt was consistent about this but it's not and I don't have all verbs in my memory. I had to verify verb forms, which are not in the template or vice versa - they were but sounded weird to me. Sorry if I sound confusing. --Anatoli (обсудить/вклад) 14:08, 22 April 2013 (UTC)
What confuses me is the parameters. The parameter can either be yes or no, and yet there are three possibilities. How do you specify the third possibility? "maybe"? :p —CodeCat 14:52, 22 April 2013 (UTC)
I see. This could be done better. I wanted to make the parameters optional without making the module crash or generate errors if parameters are missing. In this example (завянуть, although short form "завявший" is also attestable) is the second argument nil or ""? {{ru-conj-3a|pf-intr|завя́||1|нь|завя́нуть|завял}} I don't know ho wto test the module without first saving saving it, which makes it more time-consuming. --Anatoli (обсудить/вклад) 23:36, 22 April 2013 (UTC)
I don't know how to test it either. In your example, the second argument is "завя́" but I assume you meant the third, which is "" and not nil. It is only nil if the argument is missing altogether, which is harder to do for numbered parameters. For that reason I usually do it this way: local param = args[3]; if param == "" then param = nil end That way, "" and nil become equivalent, because every time it is "" it is changed into nil. It doesn't really matter whether you choose to represent empty parameters with "" or with nil, so you could also do the opposite: local param = args[3]; if param == nil then param = "" end Both approaches have advantages and disadvantages, and consequences you need to be aware of:
  • When you put things in an if-statement, the condition is converted into a boolean value (true or false). nil is considered false, but "" is considered true. That means that if you want to check whether a parameter has been provided, if param then (or to check if it is missing, if not param then) is enough. If you use "" to represent an empty parameter, you will instead need if param ~= "" then (or if param == "" then for the opposite) which is less clear and slightly more cumbersome.
  • The same also applies when you want to choose a default value if the parameter is missing. If you use nil, it becomes (param or "default") which will use param if it is not nil, otherwise it will use "default". If you use "", it is a bit longer: (param ~= "" and param or "default").
  • One advantage of using "" is that you can easily add it to another string: local someword = stem .. param. You cannot add nil to a string, so if you use it, you have to use a default-value-expression, like so: local someword = stem .. (param or "").
I prefer to use nil instead of "", although I didn't start doing that immediately (Module:nl-verb uses "" instead, but it's easy to convert). —CodeCat 23:51, 22 April 2013 (UTC)
Yes, I meant the 3rd parameter. I understand and I saw your examples of evaluating nil as false. I see you have already converted the code, thanks for that. --Anatoli (обсудить/вклад) 00:52, 23 April 2013 (UTC)

temp fix[edit]

I had to use this to fix the fix the error. Not the best solution but it's working now for both тратить (тра́чу) and похитить (похи́щу) - two types of iotation:

    -- if shch is nil, pass a dummy string, otherwise pass "щ"
    if not shch then
        present_i_a(forms, stem, "blah")    -- param #3 must be a string
    else -- tell the conjugator that this is an exception
        present_i_a(forms, stem, shch)
    end

Checking for nil won't work in Module:ru-common, so I changed it to check explicitly for "щ". --Anatoli (обсудить/вклад) 13:32, 23 April 2013 (UTC)

Why doesn't it work? —CodeCat 14:14, 23 April 2013 (UTC)
I was getting an error message, something "string expected, got nil". My previous version (before your last edit) didn't work either. I made it work (test: тратить (тра́чу) and похитить (похи́щу)) but this temporary fix is not elegant. Please change to make it a better style if you can. I will follow your style and make a change to b and c functions.
I'd also like to accommodate conjugation of verbs like победить, возродить (type 4b), which don't have 1st person singular future (they are all perfective). I'll have to change three functions for that. Hopefully I can reuse a similar approach as with "т-щ"-verbs. --Anatoli (обсудить/вклад) 22:22, 23 April 2013 (UTC)
It would be helpful if I knew where that error occurred. Script errors normally tell you in which function on which line the error happened. If this special type 4b is the same as the regular type 4b, except for this strange missing form, then maybe there isn't even a need for a special function. Just a parameter like "no_1sg_futr=1" would be enough. Another way would be to add code to the function that recognises when the stem is one of these verbs, and does it automatically, but that is only useful if there aren't many verbs like this. —CodeCat 22:26, 23 April 2013 (UTC)
Sorry, I couldn't replicate the error. I've changed it to you style, I hope. Anyway, it's working and I will do the same for b and c functions.
With the parameter "no_1sg_futr=1", i would need to make change in "present_i_a" as well, meaning that both "conjugations["4a"]" and "present_i_a" need a new parameter?
(before the edit conflict):
function present_i_a(forms, stem, shch, no_1sg_futr)
...

    if no_1sg_futr == 1 then 
        forms["pres_futr_1sg"] = ""
    elseif mw.ustring.find(iotated_stem, "[шщжч]$") then
        forms["pres_futr_1sg"] = iotated_stem .. "у"
    else
        forms["pres_futr_1sg"] = iotated_stem .. "ю"
    end

--Anatoli (обсудить/вклад) 23:15, 23 April 2013 (UTC)

There is no need to change present_i_a... you can just allow it to generate the form as usual, and then override it after the call. It could also be made into a global parameter that applies to all templates identically, like the first parameter and the participle already do. That way, you won't need to add it to every conjugation where this occurs. —CodeCat 23:18, 23 April 2013 (UTC)
(after the edit conflict). Thanks for your help. I see. Will try to implement your approach. --Anatoli (обсудить/вклад) 23:22, 23 April 2013 (UTC)

1, 2, 3, 4 types are done[edit]

Conjugation for verb types 1, 2, 3, 4 are completely Yes check.svg Done! It wasn't easy for me but I'm getting a hang of it, a little. Type 3 is only documented in the templates, type 4 needs to be documented. Haven't checked for very minor exceptions. Thank you very much for your guidance, CodeCat! There are many types to do but it should become much easier. --Anatoli (обсудить/вклад) 05:20, 24 April 2013 (UTC)

There are some annoying exceptions but I will address them later. --Anatoli (обсудить/вклад) 03:32, 25 April 2013 (UTC)

Red links[edit]

I'd like to display red links as black. How can this be done? --Anatoli (обсудить/вклад) 02:12, 25 April 2013 (UTC)

I think you add the "inflection-table" CSS class, but I'm not sure. —CodeCat 02:25, 25 April 2013 (UTC)
Thank you, I will check on GP later. (I'm doing type 5a on Module:ru-verb-testmodule). --Anatoli (обсудить/вклад) 03:28, 25 April 2013 (UTC)

Splitting future imperfective?[edit]

@CodeCat. I'd like to split "бу́ду де́лать" into "бу́ду" "де́лать" or simply бу́ду де́лать, etc. leaving transliteration as it is. Could you help me with this, please? --Anatoli (обсудить/вклад) 07:30, 27 April 2013 (UTC)

I think it would make more sense to not link them at all. Or to link only the first word. The second word would always be the same as the current page. —CodeCat 11:05, 27 April 2013 (UTC)
Yes, please, that would be great, if you could do it. --Anatoli (обсудить/вклад) 11:08, 27 April 2013 (UTC)
I'm actually not sure how to do it. If I add links to the future auxiliary, then that link will also appear in the transliteration... —CodeCat 12:09, 27 April 2013 (UTC)

This section could be processed later and excluded from the "for loop" for key, form in pairs(forms) do ...

        forms["futr_1sg"] = "бу́ду " .. forms["infinitive"]
        forms["futr_2sg"] = "бу́дешь " .. forms["infinitive"]
        forms["futr_3sg"] = "бу́дет " .. forms["infinitive"]
        forms["futr_1pl"] = "бу́дем " .. forms["infinitive"]
        forms["futr_2pl"] = "бу́дете " .. forms["infinitive"]
        forms["futr_3pl"] = "бу́дут " .. forms["infinitive"]

This "if statement" should exclude all "futr..." forms.

   if form ~= "" then

I could add the above section with translit just below the "for loop" but I don't know how to exclude them from processing by the "if statement". --Anatoli (обсудить/вклад) 12:18, 27 April 2013 (UTC)

But it shouldn't skip if the verb is perfective, should it? —CodeCat 12:30, 27 April 2013 (UTC)
Yes, that's right, only imperfective compound future forms. Perhaps, it's also better to process the infinitive form later as well. I will add translit later. --Anatoli (обсудить/вклад) 12:42, 27 April 2013 (UTC)
Thank you, looks great! --Anatoli (обсудить/вклад) 14:08, 27 April 2013 (UTC)

Irregular verbs[edit]

Wouldn't it be reasonable to move all irregular verb forms into separate data table which will be loaded via mw.loadData() when other types are insufficient? And: I think that есть as "to eat" definitely has present active participle едящий and probably has present passive form едомый. The reason in separate module is also that such cases would be fixed in it without regenerating all the verb pages. Ignatus (talk) 13:05, 14 May 2013 (UTC)

UPD: I see you added them, and even form едя (I don't use it in my speech but maybe it's considered possible by scholars). But now I note that it has broken the logic. These templates for irregular verbs should handle a bunch of verbs derived from basic one by prefixes, e.g. поесть, заесть, отъесть etc. But since such verbs are mostly perfective (and sometimes have other differences from their parent), they don't have some forms of original verb, like present active participle *поедящий. Another example of current malfunctioning is absence of pres_adv_part будучи for быть. Thus, we either should examine the inf form specially, if it is strictly есть or something more, and include some switches for it (as it is done in some other cases); or for original form we should override some parts of the paradigm in-place (after forming it automatically, examine args for parameters like pres_adv_part=будучи, and generate table after that). Ignatus (talk) 18:06, 2 June 2013 (UTC)

  • Having examined поесть, I se that pf suppresses unnecessary forms, so the edit doesn't need to be rollbacked, and for some rare prefixes which don't form perfect (не-, со-, сверх-, compound bases) sush forms can exist (but prefix.. was omitted, so if words like *малоесть ever appear and listed, they wouldn't work). But en tute I don't like the code structure. Ignatus (talk) 18:22, 2 June 2013 (UTC)

P.S. Generating result with endless consequentive concatenations is an inefficient way, consider using string.format or table.concat instead. Ignatus (talk) 18:06, 2 June 2013 (UTC)

Thank you for your efforts and no doubt, for the just criticism but I'll have to decline. Despite being a poor Lua developer, nevertheless, I've brought this module to the conclusion. Don't get me wrong, I don't want to take all the credit for the work, thanks to CodeCat, she got me started. It will now work for 99% of Russian verbs, including irregular and marginal cases. Admittedly, there are flaws. My main concern is not the code standards but the fact that I only implemented Andrey Zaliznyak's idea partially. Types 1 to 16 have subtypes - a/, b/ and c/ but only the present tense stress variation was implemented in this module. Many types have the second part - /a, /b and /c - for the past tense. As a result, some functions are more complicated than others, e.g. 7b is more complicated than it could be if it were split. Stressed final particle "ся́", alternative forms, override and missing forms were added later and it wasn't done the best way. Still, the module works and is almost complete. No need to fix something, which is not broken. Even if it's less efficient, I can understand it.
I'll have to support, enhance and document the functions of this module, so that other users can use it. Some parts of you module I may start using when I understand them.
Thank you for understanding. You may use your skills for other languages lacking such modules. New transliteration modules are needed and some need a lot of attention. With Korean, Hindi I know the reading rules but don't know how to code this. Modules can be done for languages such as Thai - again, the problem is in expressing the rules in code. There are about 2,000 Russian verbs to convert. We also have Russian noun and adjective templates, which are not Lua'ised. But it's not just about creating a module, needed to see it in action, stress-test it and convert a number of entries to use them. Tell me, which of the projects are you interested in. (Feel free to reply in Russian if it's too hard). --Anatoli (обсудить/вклад) 23:24, 2 June 2013 (UTC)
Well, I won't insist except on fixing быть, I didn't examined this module very carefully. I'll think about noun/adjective modules. In fact, in Russian wiktionary there is totally very few lua yet, it's seemingly main techadmin is now busy on Wikipedia, thus the front of works is great. Ignatus (talk) 18:51, 4 June 2013 (UTC)

Another suggestion[edit]

Is it ok for anyone to include biaspectual verbs? From

impf - imperfective, transitive
pf - perfective, transitive
impf-intr - imperfective, intransitive
pf-intr - perfective, intransitive
impf-refl - imperfective, reflexive
pf-refl - perfective, reflexive

Into

impf - imperfective, transitive
pf - perfective, transitive
impf-intr - imperfective, intransitive
pf-intr - perfective, intransitive
impf-refl - imperfective, reflexive
pf-refl - perfective, reflexive
bi - biaspectual, transitive
bi-intr - biaspectual, intransitive

Just saying. --KoreanQuoter (talk) 09:11, 20 April 2014 (UTC)